amazon-web-services - 如何将 SSM 参数存储 StringList 正确映射到 Lambda VpcConfig 部分
问题描述
我是 Cloudformation 的新手(来自 Terraform)。我在 SSM 中有一个参数
Key: /qa0/myService/lambda/subnetIds
Value: subnet-1234abcd, subnet-5678abcd
Type: StringList
我想在 Cloudformation 模板中的 Lambda 的VpcConfig部分中动态引用此参数,但我没有做对。我尝试了很多不同的东西。另外,我使用了一个参数来允许在多个环境中重用,所以这个参数将被填充为 qa0、qa1 等。StackEnv
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。
编辑:将Split从此处(SubnetIds: !Split [ ",", !Sub '{{resolve:ssm:/${StackEnv}/myService/lambda/subnetIds:1}}']
)中的数组中取出,因为评论中建议的404得到了相同的结果。
如果我尝试将 SSM 参数定义为 Cloudformation模板AWS::SSM::Parameter::Value<List<String>>
参数(StackEnv
模板抱怨 Default 必须是一个字符串。
我尝试了将动态查找结果嵌套在方括号中的各种版本,但没有运气:
SubnetIds: [ !Sub '{{resolve:ssm:/${StackEnv}/myService/lambda/subnetIds:1}}' ]
我在这里做错了什么?
解决方案
我通过 AWS 官方支持确认 - CloudFormation 是“在此处的内联引用之前执行内部函数,这是 CloudFormation 的错误行为。” (他们的话)需要明确的是,对于我和这个 SubnetIds 字段来说,错误的行为是 100% 一致的。
推荐阅读
- mysql - 为什么插入时会发生死锁?
- c++ - 当有多个查询时,检查某些子数组是否已排序的有效方法是什么?
- java - 简单的 xml 返回属性字段的空值
- java - 编辑:我重做我的编码。它现在运行良好,但我的一些输出没有打印
- java - 如何正确格式化 yyyy-mm-dd 中的日期?
- java - 原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.view.View.setVisibility(int)”
- r - 如果联合,则对文本进行分组
- spring - 如何修复编码密码看起来不像 BCrypt
- sql - 如何在方解石中添加具有可变数字参数的 UDF?
- java - 如何将变量从 Java 类发送到 PHP 脚本?