3

我正在尝试使用 aws cli 创建一个新的现场请求,但如果我将 shell 脚本作为用户数据传递给现场请求,它会给我一个错误

我试过这个

    aws ec2 request-spot-instances --spot-price "0.04" --instance-count 1 --launch-specification "{\"UserData\": \"/srv/user-data.sh\",\"InstanceType\": \"m1.small\"}"

这给了我一个错误

    Invalid BASE64 encoding of user data (400 response code)

我如何用名称和值标记我的现场请求

4

2 回答 2

3

正是如此,aws 期望为 UserData 值传递一个 base64 编码的字符串。我不知道为什么这些工具不能为你做到这一点。

所以,而不是字符串:

  /srv/user-data.sh

使用字符串的 base64 编码版本(使用在线编码器,我得到以下内容):

 L3Nydi91c2VyLWRhdGEuc2g=

我猜最终的 json 应该是这样的:

   '{"UserData": "L3Nydi91c2VyLWRhdGEuc2g=","InstanceType": "m1.small"}'

创建标签非常简单。这是“aws”CLI 命令文档的链接:http: //docs.aws.amazon.com/cli/latest/reference/ec2/create-tags.html

您需要确定资源 AMI id:

  aws ec2 create-tags --resources ami-78a54011 --tags Key=Name,Value=myname
于 2014-08-08T13:12:26.493 回答
1

是的,我让它像这样工作

     test="$(cat /srv/user-data.sh | base64 -w 0)"

     aws ec2 request-spot-instances \"UserData\": \"$test\",\"InstanceType\": \"m1.small\"}"

问题主要解决了

   -w, --wrap=COLS
          wrap encoded lines after COLS character (default 76).  Use 0 to disable line wrapping

并用于标记 aws 实例

  aws ec2 create-tags --resources $instanceId --tags Key=Name,Value=$instancesName
于 2014-08-08T13:39:47.200 回答