gpt4 book ai didi

amazon-web-services - aws cloudformation 使用 Fn::加入列表

转载 作者:行者123 更新时间:2023-12-04 22:57:13 27 4
gpt4 key购买 nike

我有一个 cloudformation 模板,它使用由 lambda 函数支持的自定义资源。 lambda 函数的参数之一是字符串列表。我只有一项要在列表中传递,并且想使用 Fn:Join 连接创建字符串。但是,使用 Fn::Join 会出现错误,因为它会导致无效的 json。任何意见都将受到赞赏。

"订阅": [ "Fn::Join": [":", ["a", "b", "c"]]]

A client error (ValidationError) occurred when calling the CreateStack operation : Template format error: JSON not well-formed.

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"
] ] ]
}
} },

最佳答案

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

声明像 ['Fn::Join' : [...]] 这样的数组是无效的 JSON 语法,而必须采用 {"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 Intrinsic Function 构建 ARN 的更具可读性的解决方案.

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

关于amazon-web-services - aws cloudformation 使用 Fn::加入列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40139879/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com