如何在CloudFormation中引用AWS SSM参数?Lambda配置报错求助
问题分析与解决方案
错误原因很明确:你在SubnetIds下额外加了-,导致!Split返回的子网数组被嵌套进了另一个数组里,最终结构变成SubnetIds: [ [subnet-id-1, subnet-id-2] ],而CloudFormation要求SubnetIds的每个元素必须是字符串类型,所以触发了类型不匹配的报错。
正确写法分两种情况:
情况1:SSM参数为String类型(值是逗号分隔的子网ID)
直接将!Split的结果赋值给SubnetIds,不要加前面的-:
VpcConfig: SecurityGroupIds: - !Sub '{{resolve:ssm:platform_security_group:3}}' SubnetIds: !Split [",", !Sub '{{resolve:ssm:platform_subnets:3}}']
情况2:SSM参数为StringList类型
StringList类型的SSM参数被解析后本身就是数组格式,无需使用!Split,直接引用即可:
VpcConfig: SecurityGroupIds: - !Sub '{{resolve:ssm:platform_security_group:3}}' SubnetIds: !Resolve [ssm:platform_subnets:3]
验证逻辑
SecurityGroupIds是数组类型,你用-加单个解析后的字符串是正确的,因为这是数组的单个元素。SubnetIds本身需要的是字符串数组,所以直接把拆分/解析后的数组赋值给它即可,不需要额外嵌套一层数组。
内容的提问来源于stack exchange,提问作者Chuck
相关产品推荐
相关产品推荐

