You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 14:25:11