如何使用 UserData 启动 Amazon EC2 现货实例?

如何使用 UserData 启动 Amazon EC2 现货实例?

我可以启动一个没有用户数据的 ec2 实例:

aws ec2 请求现货实例 --现货价格 .01 --实例计数 1 --启动规范'{“ImageId”:“ami-3275ee5b”,“KeyName”:“key”,“InstanceType”:“t1.micro”}'

但是当我使用用户数据尝试时出现以下错误:

aws ec2 请求现货实例 --现货价格 .01 --实例计数 1 --启动规范'{"ImageId":"ami-3275ee5b","KeyName":"key","UserData":{"Fn::Base64":{"Fn::Join":["",["#!/bin/bash\n","touch /tmp/userdata_sucess\n"]]}},"InstanceType":"t1.micro"}'

对于参数字符串:字符串类型的 UserData,其值无效('OrderedDict([(u'Fn::Base64', OrderedDict([(u'Fn::Join', [u'', [u'#!/bin/bash\n', u'touch /tmp/userdata_sucess\n']])]))])')

我正在关注例如这里

答案1

当您请求现货实例时,Amazon 要求用户数据采用 base64 格式。例如:

aws ec2 request-spot-instances \
--spot-price 0.01 \
--instance-count 2 \
--launch-specification \
    "{ \
        \"ImageId\":\"ami-a6926dce\", \
        \"InstanceType\":\"m3.medium\", \
        \"KeyName\":\"test-key\", \
        \"SecurityGroups\": [\"test-sg\"], \
        \"UserData\":\"`base64 userdata.sh`\" \
    }"

更多信息请访问:请求 Spot 实例

示例来自:小提示:如何使用 AWS CLI 启动带有 UserData 的 Spot 实例

答案2

Dimitrov 会像这样工作,将换行符包装参数-w 0添加到 JSON 中,因为这样在用户数据嵌入值中就没有换行符了。

aws ec2 request-spot-instances \
--spot-price 0.01 \
--instance-count 2 \
--launch-specification \
    "{ \
        \"ImageId\":\"ami-a6926dce\", \
        \"InstanceType\":\"m3.medium\", \
        \"KeyName\":\"test-key\", \
        \"SecurityGroups\": [\"test-sg\"], \
        \"UserData\":\"`base64 -w 0 userdata.sh`\" \
    }"

答案3

对我来说,只有以下命令有效,但 Dimitrov 提出的命令无效:

user="$(cat /scripts/userdata.sh | base64 -w 0)"

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

相关内容