Como eu inicio uma instância spot amazon ec2 com UserData?

3

Eu posso iniciar uma instância do ec2 sem os dados do usuário:

aws ec2 request-spot-instances --spot-price .01 --instance-count 1 --launch-specification '{ "ImageId": "ami-3275ee5b", "KeyName": "key", "InstanceType": "t1.micro"}'

Mas quando eu tento com userdata, recebo o seguinte erro:

aws ec2 request-spot-instances --spot-price .01 --instance-count 1 --launch-specification '{ "ImageId": "ami-3275ee5b", "KeyName": "key", "UserData": {"Fn::Base64" : { "Fn::Join" : ["", ["#!/bin/bash\n","touch /tmp/userdata_sucess\n"]]}}, "InstanceType": "t1.micro"}'

Invalid value ('OrderedDict([(u'Fn::Base64', OrderedDict([(u'Fn::Join', [u'', [u'#!/bin/bash\n', u'touch /tmp/userdata_sucess\n']])]))])') for param string:UserData of type string

Eu estava seguindo o exemplo

    
por Ryan 01.05.2014 / 06:45

3 respostas

5

Quando você solicita uma instância spot, a Amazon exige que o userdat esteja no formato base64. Exemplo:

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'\" \
    }"

Mais informações em: Solicitar instâncias spot

Exemplo é de: Pequena Dica: Como usar o AWS CLI para iniciar instâncias Spot com UserData

    
por 02.09.2014 / 08:47
1

Dimitrov's teria trabalhado assim com os argumentos args -w 0 incluídos no JSON, desde então, não há nenhuma nova linha no valor incorporado userdata.

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'\" \
    }"
    
por 23.09.2018 / 05:28
0

Para mim, apenas o seguinte comando funcionou, mas não o proposto por Dimitrov:

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

aws ec2 request-spot-instances \"UserData\": \"$user\",\"InstanceType\": \"m1.small\"}"
    
por 20.08.2017 / 15:03

Tags