我正在尝试使用aws cli创建一个新的spot请求,但如果我将shell脚本作为用户数据传递给spot请求,则会给我一个错误
我试过这个
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)
和
我怎么能用Name&标记我的现场请求?值
答案 0 :(得分: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
答案 1 :(得分: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