使用AWS CLI更新ECS Task Definition时JSON解析报错如何解决
根因说明
- AWS CLI报错是shell执行时对未加双引号的变量做了分词处理,JSON中的空格、换行被拆分,AWS CLI仅收到开头的
{字符,无法完成JSON解析 - VSCode调试时长变量显示不全是默认的长文本截断机制,不属于bug,变量实际存储的内容完整,不影响执行
脚本修复
你原有脚本存在隐藏缺陷:仅提取容器定义注册新任务,会丢失原有任务的执行角色、CPU/内存、网络模式等配置,建议用如下完整修改逻辑:
# 拉取原有任务定义,过滤掉注册时不需要的系统生成元字段 TASK_DEFINITION=$(aws ecs describe-task-definition --task-definition $TASKDEFINITION_ARN --query 'taskDefinition | {family: .family, networkMode: .networkMode, executionRoleArn: .executionRoleArn, taskRoleArn: .taskRoleArn, cpu: .cpu, memory: .memory, containerDefinitions: .containerDefinitions, requiresCompatibilities: .requiresCompatibilities, runtimePlatform: .runtimePlatform}' --output json) # 直接修改对应环境变量 UPDATED_TASK_DEF=$(echo "$TASK_DEFINITION" | jq '.containerDefinitions[0].environment |= map(if .name == "ES_PORT_9200_TCP_ADDR" then .value = "vpc-kkslke-shared-3-abcdkalssdfy.us-east-1.es.amazonaws.com" else . end)') # 注册新任务定义,变量加双引号避免分词 aws ecs register-task-definition --cli-input-json "$UPDATED_TASK_DEF"
如果要保留你原有拆分存储容器定义的逻辑,仅需修改最后一行的传参方式,二选一即可:
- 直接读本地文件:
aws ecs register-task-definition --family $FAMILY_NAME --container-definitions file://container-definition.json - 变量加双引号避免分词:
aws ecs register-task-definition --family $FAMILY_NAME --container-definitions "$CONTAINER_DEF"
VSCode显示调整
如需调试时查看完整长变量内容,打开VSCode设置,搜索debug.maxStringLength,将默认的1024调整为更大的数值即可解除截断限制。
内容的提问来源于stack exchange,提问作者kumar
相关产品推荐
相关产品推荐

