Sam*_*amy 4 aws-cloudformation
在我的模板中,我将CommaDelimitedList帐户 ID 作为参数传递。
我希望做一些Fn::Join和/或Fn::Sub魔法来转换列表如下:
"Accounts" : {
"Type" : "CommaDelimitedList",
"Default" : "12222234,23333334,1122143234,..."
}
To be used in the template as a list `root` ARN's as :
[
"arn:aws:iam::12222234:root"
"arn:aws:iam::23333334:root"
"arn:aws:iam::1122143234:root"
]
Run Code Online (Sandbox Code Playgroud)
现在我正在传递完整的 ARN,所以它正在工作,但它很笨拙。然而事实证明,CFN 内置函数很难做到这一点。
任何人都有这样的代码?
小智 9
我能够调整 Sam Hammamy 的现有答案,以解决需要使用Fn::Sub. 您还可以组合两个Joins。
在 YAML 中:
AWS: !Split
- ','
- !Sub
- 'arn:aws:iam::${inner}:root'
- inner: !Join
- ':root,arn:aws:iam::'
- Ref: "Accounts"
Run Code Online (Sandbox Code Playgroud)
在 JSON 中:
"Fn::Split": [
",",
{
"Fn::Sub": [
"arn:aws:iam::${rest}:root",
{
"rest": {
"Fn::Join": [
":root,arn:aws:iam::",
{ "Ref": "Accounts" }
]
}
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
下面的方法有效,但它有一个很大的限制:
由于该Fn::Join函数的性质,它将分隔符放置在列表元素之间。因此,第一个和最后一个元素需要特殊处理,如下所示:
"arn:aws:iam::xxxxx,yyyyy,zzzzzz,fffffff:root"
"Principal": {
"AWS":{
"Fn::Split" :
[",",
{"Fn::Join" : [",arn:aws:iam::",
{
"Fn::Split" :
[",",
{"Fn::Join" :
[":root,", {"Ref": "Accounts"}]}
]
}
]}
]
}
}
Run Code Online (Sandbox Code Playgroud)
不是很好,但比以前好多了。
| 归档时间: |
|
| 查看次数: |
1601 次 |
| 最近记录: |