【发布时间】:2020-01-18 02:35:27
【问题描述】:
我是 Cloudformation 的新手(来自 Terraform)。我在 SSM 中有一个参数
Key: /qa0/myService/lambda/subnetIds
Value: subnet-1234abcd, subnet-5678abcd
Type: StringList
我想 dynamically reference Cloudformation 模板中 Lambda 的 VpcConfig 部分中的此参数,但我没有做对。我尝试了很多不同的东西。另外,我使用StackEnv 参数来允许在多个环境中重复使用,因此该参数将填充为 qa0、qa1 等。
VpcConfig:
SecurityGroupIds: !Ref VpcSecurityGroupIds
SubnetIds: !Sub '{{resolve:ssm:/${StackEnv}/myService/lambda/subnetIds:1}}'
结果:“属性 SubnetIds 的值必须是字符串列表类型”
VpcConfig:
SecurityGroupIds: !Ref VpcSecurityGroupIds
SubnetIds: [!Split [",", !Sub '{{resolve:ssm:/${StackEnv}/myService/lambda/subnetIds:1}}']]
结果:“子网 ID 'subnet-1234abcd,subnet-5678abcd' 不存在”。由于某种原因,它没有在这里拆分 StringList。
编辑:在 cmets 中建议的 404 将 Split 从数组中取出 (SubnetIds: !Split [ ",", !Sub '{{resolve:ssm:/${StackEnv}/myService/lambda/subnetIds:1}}']) 得到相同的结果。
如果我尝试defining the SSM parameter as a Cloudformation template parameter (AWS::SSM::Parameter::Value<List<String>>),我会卡住,因为我需要使用默认值替换StackEnv,而不是静态字符串,这是不受支持的。模板抱怨 Default 必须是字符串。
我尝试了将动态查找结果嵌套在方括号中的各种版本,但没有成功:
SubnetIds: [ !Sub '{{resolve:ssm:/${StackEnv}/myService/lambda/subnetIds:1}}' ]
我在这里做错了什么?
【问题讨论】:
-
Split返回一个数组,所以不要放在数组中:SubnetIds: [!Split->SubnetIds: !Split -
似乎无关紧要。编辑我的问题以涵盖数组之外的
!Split。
标签: amazon-web-services amazon-cloudformation