如何在CloudFormation模板中正确使用AWS SSM的StringList配置Lambda子网?
解决CloudFormation配置Lambda子网时的SSM StringList解析错误
问题背景
在AWS SSM中存储了StringList类型的子网参数(格式如s1,s2),尝试通过CloudFormation模板为Lambda配置这些子网以实现PostgreSQL数据写入功能时,使用!Split [',','{{resolve:ssm:/testing/vpc/subnets:1}}']设置SubnetIds部署失败,报错:
Resource handler returned message: "1 validation error detected: Value '[subnet-XXXXX, subnet-XXXXXX]' at 'vpcConfig.subnetIds' failed to satisfy constraint"
错误原因
SSM的StringList类型参数,经CloudFormation的{{resolve:ssm:...}}解析后本身就是列表格式,并非逗号分隔的字符串。额外添加!Split操作,会把列表的字符串表示(比如"[subnet-xxx, subnet-yyy]")当作单个字符串按逗号分割,最终得到的元素包含方括号和空格,不符合LambdaSubnetIds对纯子网ID字符串列表的格式要求。
修复方案
直接使用解析后的SSM参数作为SubnetIds的值,无需!Split处理:
Resources: TargetLambdaFunction: Type: AWS::Lambda::Function Properties: # 填写Lambda其他必要属性(如代码包、执行角色等) VpcConfig: SubnetIds: '{{resolve:ssm:/testing/vpc/subnets:1}}' SecurityGroupIds: # 配置Lambda访问PostgreSQL所需的安全组ID
这样配置后,CloudFormation会自动将SSM中的StringList参数转换为合规的子网ID列表,直接传递给Lambda的VPC配置,即可解决该验证错误。
内容的提问来源于stack exchange,提问作者Raghav
相关产品推荐
相关产品推荐

