bash 导致 ec2 cli 请求的 json 无效
Posted
技术标签:
【中文标题】bash 导致 ec2 cli 请求的 json 无效【英文标题】:bash causes invalid json for ec2 cli request 【发布时间】:2015-04-02 05:49:00 【问题描述】:我正在使用 bash 脚本来动态创建 EC2 CLI 请求。执行 bash 脚本时,AWS CLI 返回Error parsing parameter '--launch-specification': Invalid JSON:
,但如果我复制 CLI 字符串并直接通过 CLI 提交,则 CLI 命令可以正常工作。
bash 脚本是否会生成一些导致 CLI 请求失败的代码字符,而这些字符在我在终端中使用复制/粘贴时不存在?
BASH 脚本代码
CMD01=("aws --profile $myProf --region $myRegion ec2 request-spot-instances --spot-price $PRICE --instance-count $6 --type \"one-time\" --launch-specification \"\\\"ImageId\\\":\\\"$1\\\",\\\"KeyName\\\":\\\"$2\\\",\\\"InstanceType\\\":\\\"$!5\\\",\\\"IamInstanceProfile\\\":\\\"Arn\\\":\\\"$16\\\",\\\"Placement\\\":\\\"AvailabilityZone\\\":\\\"$18\\\",\\\"GroupName\\\":\\\"$11\\\",\\\"NetworkInterfaces\\\":[\\\"DeviceIndex\\\":0,\\\"SubnetId\\\":\\\"$4\\\",\\\"AssociatePublicIpAddress\\\":$17],\\\"UserData\\\":\\\"string\\\"\" --dry-run")
回响通过
echo "$CMD01"
aws --profile myProfile --region eu-west-1 ec2 request-spot-instances --spot-price 0.004 --instance-count 1 --type "one-time" --launch-specification "\ "ImageId\":\"ami-9c7ad8eb\",\"KeyName\":\"myKey\",\"InstanceType\":\"t1.micro\",\"IamIns tanceProfile\":\"Arn \":\"arn:aws:iam::000000000000:instance-profile/myprofile\",\"Placement\":\"AvailabilityZone\":\"eu-west-1c\",\"GroupName\ ":\"myGroup\",\"NetworkInterfaces\":[\"DeviceIndex\":0,\"SubnetId\":\"subnet-xxxyyy\",\"AssociatePublicIpAddress\":true],\ "UserData\":\"string\"" --dry-run
通过$CMD01[@] > $logFile
执行
产生错误
解析参数“--launch-specification”时出错:JSON 无效: "\"ImageId\":\"ami-9c7ad8eb\",\"KeyName\":\"myKey\",\"InstanceType\":\"t1.micro\",\"IamInstanceProfile\":\ "Arn\":\"arn:aws:iam::000000000000:instance-profile/myprofile\",\"Placement\":\"AvailabilityZone\":\"eu-west-1c\",\" GroupName\":\"myGroup\",\"NetworkInterfaces\":[\"DeviceIndex\":0,\"SubnetId\":\"subnet-xxxyyy\",\"AssociatePublicIpAddress\":true] ,\"用户数据\":\"字符串\""
现在,如果我从终端获取较早的 echo echo "$CMD01"
并进行简单的复制/粘贴,CLI 输出
调用 RequestSpotInstances 操作时发生客户端错误 (DryRunOperation):请求会成功,但设置了 DryRun 标志。
所以看起来 JSON 是有效的,但是当从 bash 脚本执行时它是无效的。我做错了什么?
【问题讨论】:
【参考方案1】:我认为你有一个 bash 错误。
尝试:
CMD01=$(aws commands commands...)
【讨论】:
以上是关于bash 导致 ec2 cli 请求的 json 无效的主要内容,如果未能解决你的问题,请参考以下文章
从 EC2 CLI 退出后如何保持我的 Web 应用程序运行
AWS S3 CLI - 如何使用存储桶上设置的所有当前策略获取 JSON?
在 bash 中使用 ec2 命令行工具获取 ec2 实例的公共 dns 名称