CloudFormation Transform :: Include参数

时间:2019-01-03 14:59:12

标签: amazon-ec2 amazon-cloudformation

我想使用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 时,错误是相同的。


尝试了不同的类型:字符串,数字,布尔值,列表-它们都不起作用。

3 个答案:

答案 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