在EC2 UserData中保留JSON字符串单引号的Terraform配置问题
解决Cloudinit写入/etc/environment时丢失单引号的问题
方法1:用双引号包裹带单引号的字符串
在YAML里用双引号把整个变量值包起来,内部的单引号就会被当作字符串的一部分保留,不会被YAML解析器处理,Cloudinit处理时也会把带单引号的完整内容写入/etc/environment。
示例UserData片段:
#cloud-config environment: var: "'{\"key\": \"value\"}'"
YAML解析后,变量值就是'{"key": "value"}',最终写入/etc/environment的内容会保留外层单引号。
方法2:用runcmd直接写入环境变量
绕开Cloudinit的environment模块,直接用runcmd执行shell命令写入/etc/environment,完全自己控制内容:
示例UserData片段:
#cloud-config runcmd: - echo "var='{\"key\": \"value\"}'" >> /etc/environment
这种方式通过shell命令直接写入,单引号会被原封不动保留在文件里。
方法3:使用YAML字面量/折叠标量
用YAML的字面量标符(|)或者折叠标量(>)来定义变量值,确保单引号被包含在值中:
字面量标量(保留格式)
#cloud-config environment: var: | '{"key": "value"}'
折叠标量(去除换行)
如果不想保留换行,用折叠标量>:
#cloud-config environment: var: > '{"key": "value"}'
内容的提问来源于stack exchange,提问作者Andrew Kew
相关产品推荐
相关产品推荐

