blu*_*res 3 amazon-web-services aws-cloudformation
我是 Cloudformation 的新手(来自 Terraform)。我在SSM中有一个参数
Key: /qa0/myService/lambda/subnetIds
Value: subnet-1234abcd, subnet-5678abcd
Type: StringList
Run Code Online (Sandbox Code Playgroud)
我想在 Cloudformation 模板中的 Lambda 的VpcConfig部分动态引用此参数,但我没有得到正确的结果。我尝试过很多不同的事情。另外,我使用一个参数来允许在多个环境中重用,因此该参数将填充为 qa0、qa1 等。StackEnv
VpcConfig:
SecurityGroupIds: !Ref VpcSecurityGroupIds
SubnetIds: !Sub '{{resolve:ssm:/${StackEnv}/myService/lambda/subnetIds:1}}'
Run Code Online (Sandbox Code Playgroud)
结果:“属性 SubnetIds 的值必须是字符串列表类型”
VpcConfig:
SecurityGroupIds: !Ref VpcSecurityGroupIds
SubnetIds: [!Split [",", !Sub '{{resolve:ssm:/${StackEnv}/myService/lambda/subnetIds:1}}']]
Run Code Online (Sandbox Code Playgroud)
结果:“子网 ID 'subnet-1234abcd,subnet-5678abcd' 不存在”。由于某种原因,它没有在这里拆分 StringList。
编辑:按照评论中建议的 404 从此处的数组中取出 Split ( SubnetIds: !Split [ ",", !Sub '{{resolve:ssm:/${StackEnv}/myService/lambda/subnetIds:1}}']) 会得到相同的结果。
如果我尝试将 SSM 参数定义为 Cloudformation 模板参数( AWS::SSM::Parameter::Value<List<String>>),我会遇到困难,因为我需要替换默认值StackEnv,而不是静态字符串,而静态字符串不受支持。该模板抱怨默认值必须是字符串。
我尝试过将动态查找结果嵌套在方括号中的各种版本,但没有成功:
SubnetIds: [ !Sub '{{resolve:ssm:/${StackEnv}/myService/lambda/subnetIds:1}}' ]
我在这里做错了什么?
我向 AWS 官方支持确认 - CloudFormation 是“在内联引用之前执行内部函数,这是 CloudFormation 的错误行为”。(他们的话)需要明确的是,错误行为对于我和这个 SubnetIds 字段来说是 100% 一致的。
| 归档时间: |
|
| 查看次数: |
2721 次 |
| 最近记录: |