Amazon web services aws ec2请求现场实例CLI问题

Amazon web services aws ec2请求现场实例CLI问题,amazon-web-services,amazon-ec2,Amazon Web Services,Amazon Ec2,尝试在一个简单脚本中启动几个spot实例,AWS文档和AWS ec2请求spot实例帮助输出中提供的语法以JAVA或JSON语法列出。如何从shell脚本中输入JSON语法下的参数 aws-版本 aws cli/1.2.6 Python/2.6.5 Linux/2.6.21.7-2.fc8xen aws ec2请求现场实例帮助 -在启动规范的开头,它列出了JSON语法 -发射规范结构 指定其他启动实例信息 JSON Syntax: { "ImageId":

尝试在一个简单脚本中启动几个spot实例,AWS文档和AWS ec2请求spot实例帮助输出中提供的语法以JAVA或JSON语法列出。如何从shell脚本中输入JSON语法下的参数

aws-版本

aws cli/1.2.6 Python/2.6.5 Linux/2.6.21.7-2.fc8xen

aws ec2请求现场实例帮助 -在启动规范的开头,它列出了JSON语法

-发射规范结构 指定其他启动实例信息

   JSON Syntax:

       {
         "ImageId": "string",
         "KeyName": "string",
         }, ....
         "EbsOptimized": true|false,
         "SecurityGroupIds": ["string", ...],
         "SecurityGroups": ["string", ...]
       }
我尝试了以下所有可能的组合,添加和移动括号、引号、更改选项等,但都没有效果。下面的变量$launch的正确格式是什么?其他命令变体-ec2请求现货实例在我的环境中不起作用,如果我尝试用-p替换-spot price,它也不起作用

#!/bin/bash
launch="{"ImageId":"ami-a999999","InstanceType":"c1.medium"} "SecurityGroups":"launch-wizard-6""

echo $launch

aws ec2 request-spot-instances --spot-price 0.01 --instance-count 1 --type  c1.small --launch-specification $launch
这提供了以下结果: 未知选项:安全组:启动向导-6

替换安全组编号具有相同的结果

aws ec2 Descripte instance和aws ec2 start instance都能完美地工作,因此环境和帐户信息都已正确设置,但我需要利用现货定价

事实上,本用户文档中所列的一切都不起作用:


谢谢,

这里的第一个问题是引用和格式:

$ launch="{"ImageId":"ami-a999999","InstanceType":"c1.medium"} "SecurityGroups":"launch-wizard-6""
$ launch='{"ImageId":"ami-a999999","InstanceType":"c1.medium","SecurityGroups":["launch-wizard-6"]}'
$ echo $launch
{"ImageId":"ami-a999999","InstanceType":"c1.medium","SecurityGroups":["launch-wizard-6"]}
这不会生成有效的JSON,因为从帮助文件复制的块包含来自嵌套对象的假右大括号,该嵌套对象没有包含右大括号,右大括号丢失,且未替换的双引号正在消失

但我们并没有真正达到json实际被验证的程度,因为在最后一个大括号之后的空格中,cli假设SecurityGroups和launch-wizard-6是在-launch规范参数之后的更多命令行选项:

那可能不是你所期望的。。。因此,我们将修复引号,使其在json有效后看起来像一个长参数:

从仅生成有效的json结构(不一定是内容)的角度来看,根据文档,您最有可能尝试发送的数据实际上如下所示:

{"ImageId":"ami-a999999","InstanceType":"c1.medium","SecurityGroups":["launch-wizard-6"]}
检查是否为结构有效的JSON

修复支撑、逗号和括号后,CLI将停止抛出该错误,并使用以下格式:

$ launch="{"ImageId":"ami-a999999","InstanceType":"c1.medium"} "SecurityGroups":"launch-wizard-6""
$ launch='{"ImageId":"ami-a999999","InstanceType":"c1.medium","SecurityGroups":["launch-wizard-6"]}'
$ echo $launch
{"ImageId":"ami-a999999","InstanceType":"c1.medium","SecurityGroups":["launch-wizard-6"]}

这并不是说API可能不会因为其他不正确或丢失的内容而拒绝请求,但您从未真正达到向API发送任何内容的目的;命令行工具中的本地验证失败。

这里的第一个问题是引用和格式化:

$ launch="{"ImageId":"ami-a999999","InstanceType":"c1.medium"} "SecurityGroups":"launch-wizard-6""
$ launch='{"ImageId":"ami-a999999","InstanceType":"c1.medium","SecurityGroups":["launch-wizard-6"]}'
$ echo $launch
{"ImageId":"ami-a999999","InstanceType":"c1.medium","SecurityGroups":["launch-wizard-6"]}
这不会生成有效的JSON,因为从帮助文件复制的块包含来自嵌套对象的假右大括号,该嵌套对象没有包含右大括号,右大括号丢失,且未替换的双引号正在消失

但我们并没有真正达到json实际被验证的程度,因为在最后一个大括号之后的空格中,cli假设SecurityGroups和launch-wizard-6是在-launch规范参数之后的更多命令行选项:

那可能不是你所期望的。。。因此,我们将修复引号,使其在json有效后看起来像一个长参数:

从仅生成有效的json结构(不一定是内容)的角度来看,根据文档,您最有可能尝试发送的数据实际上如下所示:

{"ImageId":"ami-a999999","InstanceType":"c1.medium","SecurityGroups":["launch-wizard-6"]}
检查是否为结构有效的JSON

修复支撑、逗号和括号后,CLI将停止抛出该错误,并使用以下格式:

$ launch="{"ImageId":"ami-a999999","InstanceType":"c1.medium"} "SecurityGroups":"launch-wizard-6""
$ launch='{"ImageId":"ami-a999999","InstanceType":"c1.medium","SecurityGroups":["launch-wizard-6"]}'
$ echo $launch
{"ImageId":"ami-a999999","InstanceType":"c1.medium","SecurityGroups":["launch-wizard-6"]}

这并不是说API可能不会因为其他不正确或丢失的内容而拒绝请求,但您从未真正达到向API发送任何内容的目的;命令行工具中的本地验证失败。

在这种情况下,您必须使用列表:

"SecurityGroups": ["string", ...]
所以

变成

"SecurityGroups":["launch-wizard-6"]
无论如何,我现在正在处理CLI,我发现使用外部JSON更有用

下面是一个使用Python的示例:

myJson="file:///Users/xxx/Documents/Python/xxxxx/spotInstanceInformation.json"
x= subprocess.check_output(["/usr/local/bin/aws ec2 request-spot-instances --spot-price  0.2 --launch-specification "+myJson],shell=True)
print x
输出为:

"SpotInstanceRequests": [
 {
"Status": {
            "UpdateTime": "2013-12-09T02:41:41.000Z", 
            "Code": "pending-evaluation", 
            "Message": "Your Spot request has been submitted for review, and is pending evaluation."
etc etc ....
医生在这里:


仅供参考-我正在添加文件:///因为我正在使用MAC。如果您使用Linux启动bash脚本,可以使用myJson=/path/to/file/

在这种情况下,您必须使用列表:

"SecurityGroups": ["string", ...]
所以

变成

"SecurityGroups":["launch-wizard-6"]
无论如何,我现在正在处理CLI,我发现使用外部JSON更有用

下面是一个使用Python的示例:

myJson="file:///Users/xxx/Documents/Python/xxxxx/spotInstanceInformation.json"
x= subprocess.check_output(["/usr/local/bin/aws ec2 request-spot-instances --spot-price  0.2 --launch-specification "+myJson],shell=True)
print x
输出为:

"SpotInstanceRequests": [
 {
"Status": {
            "UpdateTime": "2013-12-09T02:41:41.000Z", 
            "Code": "pending-evaluation", 
            "Message": "Your Spot request has been submitted for review, and is pending evaluation."
etc etc ....
医生在这里:


仅供参考-我正在添加文件:///因为我正在使用MAC。如果您使用Linux启动bash脚本,您可以使用myJson=/path/to/file/

我知道这是一个老问题,但万一有人碰到它。我最近和th有同样的问题 e CLI。对于请求点实例,很难让所有参数正常工作



#!/bin/bash
AWS_DEFAULT_OUTPUT="text"
UserData=$(base64 < userdata-current)
region="us-west-2"
price="0.03"
zone="us-west-2c"

aws ec2 request-spot-instances  --region $region --spot-price $price  --launch-specification "{ \"KeyName\": \"YourKey\", \"ImageId\": \"ami-3d50120d\" , \"UserData\": \"$UserData\", \"InstanceType\": \"r3.large\" , \"Placement\": {\"AvailabilityZone\": \"$zone\"}, \"IamInstanceProfile\": {\"Arn\": \"arn:aws:iam::YourAccount:YourProfile\"},   \"SecurityGroupIds\": [\"YourSecurityGroupId\"],\"SubnetId\": \"YourSubnectId\" }"

我知道这是个老问题,但万一有人碰到它。我最近在CLI上也遇到了同样的问题。对于请求点实例,很难让所有参数正常工作



#!/bin/bash
AWS_DEFAULT_OUTPUT="text"
UserData=$(base64 < userdata-current)
region="us-west-2"
price="0.03"
zone="us-west-2c"

aws ec2 request-spot-instances  --region $region --spot-price $price  --launch-specification "{ \"KeyName\": \"YourKey\", \"ImageId\": \"ami-3d50120d\" , \"UserData\": \"$UserData\", \"InstanceType\": \"r3.large\" , \"Placement\": {\"AvailabilityZone\": \"$zone\"}, \"IamInstanceProfile\": {\"Arn\": \"arn:aws:iam::YourAccount:YourProfile\"},   \"SecurityGroupIds\": [\"YourSecurityGroupId\"],\"SubnetId\": \"YourSubnectId\" }"