aws cloudformation在列表中使用Fn::Join



我有一个使用lambda函数支持的自定义资源的cloudformation模板。lambda函数的一个参数是字符串列表。我只有一个项目要在列表中传递,并且希望使用Fn:Join来连接创建字符串。但是,使用Fn::Join会产生错误,因为它会导致无效的json。如有任何意见,欢迎。

"订阅":[" Fn::加入 ": [":", [" a"、"b"、"c"]]]

调用CreateStack时发生客户端错误(ValidationError)模板格式错误:JSON格式不正确。

Cloudformation片段:-

  "Resources": {
"MyCustomRes": {
      "Type": "Custom::CustomResource",
      "Properties": {
        "ServiceToken": { "Fn::Join": [ "", [
                                        "arn:aws:lambda:",
                                        { "Ref": "AWS::Region" },
                                        ":",
                                        { "Ref": "AWS::AccountId" },
                                        ":function:LambdaFn"
                                      ] ] },
        "Version": 1,
        "ResourceName": { "Ref": "ResourceName" },
        "Subscriptions"       : [ "Fn::Join": [ "", [
                                        "arn:aws:sns:",
                                        { "Ref": "AWS::Region" },
                                        ":",
                                        { "Ref": "AWS::AccountId" },
                                        ":Topic1"
                                      ] ] ]
    }
}     },

用于构建Subscriptions属性值的Fn::Join Intrinsic Function必须是对象而不是数组。

这是无效的JSON语法来声明一个数组像['Fn::Join' : [...]]相反,它必须是{"Fn::Join" : [...]}的形式

文档将语法描述为

{ "Fn::Join" : [ "delimiter", [ comma-delimited list of values ] ] }

因此你的CloudFormation模板应该使用下面的

{
  "Subscriptions": {
    "Fn::Join": [
      ":",
      [
        "arn:aws:sns",
        {
          "Ref": "AWS::Region"
        },
        {
          "Ref": "AWS::AccountId"
        },
        "Topic1"
      ]
    ]
  }
}

Fn::Sub固有函数构造ARN有一个更容易读懂的解决方案。

{
  "Fn::Sub": [
    "arn:${AWS::Partition}:sns:${AWS::Region}:${AWS::AccountId}:Topic1"
  ]
}

我来到这里寻找相同的语法在YAML文件。让我感到困惑的是需要有两个参数列表:一个包含2个要连接的项的列表,其中第二个本身就是一个列表。完整的YAML语法如下所示:

  SourceArn: 
    Fn::Join: 
    - ""
    - - 'arn:aws:execute-api:'
      - !Ref AWS::Region
      - ':'
      - !Ref AWS::AccountId
      - ':'
      - !Ref ApiGatewayRestApiResource
      - '/*'

最新更新