我可以启动一个没有用户数据的 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 实例
答案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\"}"