aws cloudformation 在列表中使用 Fn::Join
Posted
技术标签:
【中文标题】aws cloudformation 在列表中使用 Fn::Join【英文标题】:aws cloudformation use Fn::Join in a list 【发布时间】:2017-03-01 14:16:31 【问题描述】:我有一个 cloudformation 模板,它使用由 lambda 函数支持的自定义资源。 lambda 函数的参数之一是字符串列表。我在列表中只有一项要传递,并且想使用 Fn:Join 来连接创建字符串。但是,使用 Fn::Join 会产生错误,因为它会导致 json 无效。任何意见表示赞赏。
“订阅”:[“Fn::Join”:[“:”,[“a”,“b”,“c”]]]
调用 CreateStack 时发生客户端错误(ValidationError) 操作:模板格式错误:JSON 格式不正确。
Cloudformation sn-p:-
"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"
] ] ]
,
【问题讨论】:
【参考方案1】:用于构建Subscriptions
属性值的Fn::Join
Intrinsic Function 必须是对象而不是数组。
使用 ['Fn::Join' : [...]]
之类的数组是无效的 JSON 语法,而它必须是 "Fn::Join" : [...]
的形式
文档将语法描述为
"Fn::Join" : [ "delimiter", [ comma-delimited list of values ] ]
因此,您的 Cloud Formation 模板应使用以下内容
"Subscriptions":
"Fn::Join": [":", [
"arn:aws:sns",
"Ref": "AWS::Region",
"Ref": "AWS::AccountId",
"Topic1"]
]
【讨论】:
“ref”又做了什么?【参考方案2】:我来到这里是为了在 YAML 文件中寻找相同的语法。让我觉得需要有两个 args 列表:一个包含 2 个要加入的项目的列表,第二个是一个列表本身。完整的 YAML 语法如下所示:
SourceArn:
Fn::Join:
- ""
- - 'arn:aws:execute-api:'
- !Ref AWS::Region
- ':'
- !Ref AWS::AccountId
- ':'
- !Ref ApiGatewayRestApiResource
- '/*'
【讨论】:
我在AWS下找到了这个文档docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…以上是关于aws cloudformation 在列表中使用 Fn::Join的主要内容,如果未能解决你的问题,请参考以下文章
AWS CloudFormation CodePipeline、ParameterOverrides、将列表传递给嵌套堆栈
AWS CloudFormation 错误“属性 AlarmActions 的值必须是字符串列表类型”
可以使用StringList类型的cloudformation SSM动态引用解析列表吗?
是否可以在 AWS::OpsWorks::Instance 资源中使用 AWS::CloudFormation::Init 和元数据?