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

aws ec2 create-launch-template-version传环境变量到JSON报错排查

问题根因

报错由两个问题导致:

  • Shell单引号不会触发变量解析:Bash、Zsh等常见Shell中,单引号包裹的内容会原样传递给命令,不会替换其中$开头的环境变量。你的命令里整个JSON参数被单引号包裹,AWS CLI收到的ImageId实际是字符串$ami_id,而非环境变量里存的真实AMI ID,直接触发格式校验错误。
  • SecurityGroupIds存在格式隐患:该字段要求JSON数组格式,如果你环境变量里存了多个安全组ID,直接用["$security_group_ids"]写法会把所有ID拼成单个字符串塞进数组,后续会触发参数非法错误。
可行方案

优先用AWS CLI原生简写参数传参,不需要手动拼接JSON,彻底规避转义、变量解析、JSON格式错误问题:

aws ec2 create-launch-template-version \
  --launch-template-id lt-xxx \
  --launch-template-data "ImageId=$ami_id,InstanceType=$instance_type,KeyName=$key_name,SecurityGroupIds=$security_group_ids"

注意:如果security_group_ids存了多个安全组ID,用空格分隔多个ID即可,AWS CLI会自动转换为合法的JSON数组,不需要手动加方括号、引号。

如果需要手写完整JSON传参,要把外层单引号换成双引号,同时转义JSON内部的双引号,让Shell正常解析变量:

# 仅适用于单安全组场景,多安全组需提前把变量处理为["sg-xxx","sg-yyy"]的标准JSON数组格式
aws ec2 create-launch-template-version \
  --launch-template-id lt-xxx \
  --launch-template-data "{\"ImageId\":\"$ami_id\", \"InstanceType\": \"$instance_type\", \"KeyName\": \"$key_name\", \"SecurityGroupIds\": [\"$security_group_ids\"]}"

内容的提问来源于stack exchange,提问作者Ydrab

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 03:36:34