AWS 特定参数和 EC2 SecurityGroupIds 列表字符串错误
AWS specific parameters and EC2 SecurityGroupIds List String Error
我有一个相当烦人的问题,我无法解决,我会尽力解释。
下面的缩减示例可以在其中引用参数并通过 SecurityGroupIds 属性:
将安全组分配给我的实例
"Parameters" : {
"pDefaultSg" : {
"Description" : "AWS2 VPC default security groups",
"Type" : "List<AWS::EC2::SecurityGroup::Id>",
"Default" : "sg-245xxxxx,sg-275xxxxx,sg-235xxxxx"
}
}
"Resources" : {
"ec2Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"SecurityGroupIds" : { "Ref" : "pDefaultSg" }
}
}
当我还想将第二个值添加到 SecurityGroupIds 属性 引用在同一模板中实例化的安全组资源时,问题就开始了:
"Resources" : {
"ec2Instance" : { ...
"SecurityGroupIds" : [ { "Ref" : "pDefaultSg" }, { "Fn::GetAtt" : "sgDb", "GroupId" } ],
....
"sgDb" : {
"Type" : "AWS::EC2::SecurityGroup",
"Properties" : { ...
然后我无法避免导致 Cloudformation 堆栈回滚的以下错误:
属性 的值 SecurityGroupIds 的类型必须为字符串列表
非常感谢任何指点。
非常感谢
问题是,当通过 Ref
内部函数访问 pDefaultSg
时,它 returns 是一个列表,因此您的 SecurityGroupIds
属性 看起来像
[["sg-245xxxxx","sg-275xxxxx","sg-235xxxxx"],"sg-1234DB"]
解决方案是将 SecurityGroupIds
属性 更改为 Fn::Join
将 pDefaultSg
列表更改为逗号分隔的字符串,后跟 sgDb
:
"SecurityGroupIds": [
{"Fn::Join":
[",",
{"Ref": "pDefaultSg"}
]
},
{ "Fn::GetAtt" : ["sgDb", "GroupId"] }
]
我有一个相当烦人的问题,我无法解决,我会尽力解释。
下面的缩减示例可以在其中引用参数并通过 SecurityGroupIds 属性:
将安全组分配给我的实例"Parameters" : {
"pDefaultSg" : {
"Description" : "AWS2 VPC default security groups",
"Type" : "List<AWS::EC2::SecurityGroup::Id>",
"Default" : "sg-245xxxxx,sg-275xxxxx,sg-235xxxxx"
}
}
"Resources" : {
"ec2Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"SecurityGroupIds" : { "Ref" : "pDefaultSg" }
}
}
当我还想将第二个值添加到 SecurityGroupIds 属性 引用在同一模板中实例化的安全组资源时,问题就开始了:
"Resources" : {
"ec2Instance" : { ...
"SecurityGroupIds" : [ { "Ref" : "pDefaultSg" }, { "Fn::GetAtt" : "sgDb", "GroupId" } ],
....
"sgDb" : {
"Type" : "AWS::EC2::SecurityGroup",
"Properties" : { ...
然后我无法避免导致 Cloudformation 堆栈回滚的以下错误:
属性 的值 SecurityGroupIds 的类型必须为字符串列表
非常感谢任何指点。
非常感谢
问题是,当通过 Ref
内部函数访问 pDefaultSg
时,它 returns 是一个列表,因此您的 SecurityGroupIds
属性 看起来像
[["sg-245xxxxx","sg-275xxxxx","sg-235xxxxx"],"sg-1234DB"]
解决方案是将 SecurityGroupIds
属性 更改为 Fn::Join
将 pDefaultSg
列表更改为逗号分隔的字符串,后跟 sgDb
:
"SecurityGroupIds": [
{"Fn::Join":
[",",
{"Ref": "pDefaultSg"}
]
},
{ "Fn::GetAtt" : ["sgDb", "GroupId"] }
]