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

AWS CloudFormation:Fn::Join JSON转YAML报错及NAT实例模板集成求助

CloudFormation NAT实例模板转码报错与资源集成实操

「Unexpected Token : In JSON At Position 10」报错根因

  • 通用在线JSON转YAML工具仅支持解析标准纯JSON语法,对CloudFormation模板专属的内置函数、非JSON格式片段无兼容能力,位置10的报错基本来自三类常见问题:
    • 待转换片段直接使用了CloudFormation短形式语法(如!Join、!Ref),这类语法不属于标准JSON规范,解析器遇到感叹号这类非JSON允许字符时直接触发报错
    • 待转换JSON的属性名遗漏双引号包裹,如未给Fn::Join加双引号,解析器识别到属性名后的冒号时,因前面的内容不是合法JSON字符串,触发token识别错误
    • 拼接bash初始化脚本时,字符串边界提前闭合,导致后续脚本内容被解析器当成JSON语法块,在遇到脚本里的冒号时触发报错

正确转换与集成方法

  • 无需依赖通用在线转码工具处理带CloudFormation逻辑的片段,直接使用CloudFormation YAML原生支持的内置函数语法编写即可,避免不必要的转码报错
  • 结合已定义的NatInstance基础配置(t2.micro规格、关联AmazonLinuxAMIID镜像、绑定PublicSubnet1公网子网、关联AppSecurityGroup安全组、绑定InstanceProfile IAM角色、设置「NAT Instance」名称标签),集成Fn::Join组装初始化脚本的完整资源片段参考如下:
NatInstance:
  Type: AWS::EC2::Instance
  Properties:
    ImageId: !Ref AmazonLinuxAMIID
    InstanceType: t2.micro
    SubnetId: !Ref PublicSubnet1
    SecurityGroupIds:
      - !Ref AppSecurityGroup
    IamInstanceProfile: !Ref InstanceProfile
    Tags:
      - Key: Name
        Value: NAT Instance
    # 原JSON中用Fn::Join组装bash初始化脚本的逻辑,直接用YAML短形式实现即可
    UserData:
      Fn::Base64: !Join
        - ""
        - |-
          #!/bin/bash -xe
          yum update -y
          # 开启NAT转发核心配置
          sysctl -w net.ipv4.ip_forward=1
          echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
          # 配置NAT源地址伪装规则
          iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
          service iptables save
  • 如果一定要使用在线工具完成转换,需先把待转换片段调整为100%符合JSON语法的结构再操作:
    1. 把所有CloudFormation短形式函数替换为对应的长形式JSON写法(如把!Join替换为"Fn::Join")
    2. 给所有对象键、字符串值补上双引号包裹,移除所有非JSON语法的注释、感叹号标记
    3. 检查所有字符串的边界闭合情况,确保bash脚本内容全部被双引号包裹、用转义字符\n表示换行
      修正后的可直接转码的纯JSON片段示例:
{
  "UserData": {
    "Fn::Base64": {
      "Fn::Join": [
        "",
        [
          "#!/bin/bash -xe\n",
          "yum update -y\n",
          "sysctl -w net.ipv4.ip_forward=1\n"
        ]
      ]
    }
  }
}

快速排查技巧

  • 定位报错时直接数待转换JSON的第10个字符位置:如果该位置是感叹号、全角冒号、未加引号的标识符,就是不符合JSON规范的语法点
  • 不要把现有YAML模板的片段直接粘贴到JSON转码工具中,YAML对语法的宽松度远高于JSON,大量YAML专属语法本身就无法通过JSON校验

内容的提问来源于stack exchange,提问作者조효빈

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 14:06:03