如何在CloudFormation的AWS::SSM::Parameter中传入字典结构Value
问题分析与解决方法
错误原因
你的CloudFormation模板中,Value字段的JSON字符串存在双引号嵌套解析错误:YAML语法里,双引号包裹的字符串内部的双引号会被识别为字符串的结束符,导致整个Value的内容被YAML错误拆分,最终触发SSM参数的类型验证失败(因为解析后的内容不再是合法的字符串类型)。
正确的实现方式
以下三种方法都可以正确设置字典结构的SSM String类型参数:
方法1:用单引号包裹整个JSON字符串
YAML中,单引号包裹的字符串内部的双引号无需转义,直接使用即可:
AWSTemplateFormatVersion: "2010-09-09" Description: Systems Manager Parameter Store Parameters Resources: Test-Channels: Type: AWS::SSM::Parameter DeletionPolicy: Delete Properties: Name: test-Channels Description: Lambda required parameter key and values Type: String Value: '{"key1": "value1","key2": "value2", "key3": "value3"}'
方法2:转义内部双引号
在JSON里的每个双引号前添加反斜杠\,让YAML把内部双引号识别为字符串的一部分:
AWSTemplateFormatVersion: "2010-09-09" Description: Systems Manager Parameter Store Parameters Resources: Test-Channels: Type: AWS::SSM::Parameter DeletionPolicy: Delete Properties: Name: test-Channels Description: Lambda required parameter key and values Type: String Value: "{ \"key1\": \"value1\",\"key2\": \"value2\", \"key3\": \"value3\"}"
方法3:使用YAML多行字符串标记|
如果JSON结构复杂,用多行字符串更易读,|会保留换行和格式,最终存储为字符串类型的JSON:
AWSTemplateFormatVersion: "2010-09-09" Description: Systems Manager Parameter Store Parameters Resources: Test-Channels: Type: AWS::SSM::Parameter DeletionPolicy: Delete Properties: Name: test-Channels Description: Lambda required parameter key and values Type: String Value: | { "key1": "value1", "key2": "value2", "key3": "value3" }
内容的提问来源于stack exchange,提问作者jia chang
相关产品推荐
相关产品推荐

