我想使用AWS宏Transform :: include并包含一些文件动态参数。
Resources:
'Fn::Transform':
Name: 'AWS::Include'
Parameters:
TestMacroVariable:
Default: 2
Type: Number
Location: !Sub "s3://${InstallBucketName}/test.yaml"
test.yaml:
DataAutoScalingGroup:
Type: AWS::AutoScaling::AutoScalingGroup
Properties:
LaunchConfigurationName:
Ref: DataLaunchConfiguration
MinSize: '1'
MaxSize: '100'
DesiredCapacity:
Ref: TestMacroVariable
...
致电后:aws cloudformation describe-stack-events --stack-name $stack
我得到:
“ ResourceStatusReason”:“参数TestMacroVariable的值 在transform Include下,必须解析为字符串,数字,布尔值或 这些列表中的任何一个。.用户请求的回滚。“
当我尝试这样做时:
Resources:
'Fn::Transform':
Name: 'AWS::Include'
Parameters:
TestMacroVariable: 2
Location: !Sub "s3://${InstallBucketName}/couchbase/final/test.yaml"
我得到:
“ ResourceStatusReason”:“模板格式错误:无法解析的资源 的资源块中的依赖项[TestMacroVariable] 模板”
当我完全不提供 TestMacroVariable 时,错误是相同的。
尝试了不同的类型:字符串,数字,布尔值,列表-它们都不起作用。
答案 0 :(得分:1)
据我所知,您只能使用Parameters
的{{1}}部分中的 Location 键。在这里AWS DOC
答案 1 :(得分:0)
或者,您可以将整个S3路径作为参数传递,并在Location
中引用它:
Parameters:
MyS3Path:
Type: String
Default: 's3://my-cf-templates/my-include.yaml'
...
'Fn::Transform':
Name: 'AWS::Include'
Parameters:
Location: !Ref MyS3Path
答案 2 :(得分:0)
基于@BatteryAcid 所说的内容,您可以使用 Sub 函数直接从文件中引用 Cloudformation 模板中的参数:
在您的 CF 模板中:
Parameters:
TableName:
Type: String
Description: Table Name of the Dynamo DB Users table
Default: 'Users'
在您包含的文件中:
"Resource": [
{
"Fn::Sub": [
"arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tableName}",
{
"tableName": {
"Ref": "TableName"
}
}
]
}
或者不必是参数,而是模板中的任何资源:
Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${QueryTelemtryFunction.Arn}/invocations