aws ec2 run-instances: base64 l'utilisateur des données blob est ignoré

Mon encodées en base64 de données utilisateur est ignoré lors de l'exécution de aws ec2 run-instances commande.

Voici mes données d'utilisateur:

$ cat user-data.sh 
#!/bin/bash
cat >> /var/tmp/user-data-testing <<EOF
this is test line added at $(date)
EOF

ici est base64 blob du script ci-dessus:

IyEvYmluL2Jhc2gKY2F0ID4+IC92YXIvdG1wL3VzZXItZGF0YS10ZXN0aW5nIDw8RU9GCnRoaXMgaXMgdGVzdCBsaW5lIGFkZGVkIGF0ICQoZGF0ZSkKRU9GCg==

Maintenant, Ma commande ci-dessous, ne lisez l'utilisateur des données de l'amende:

aws ec2 run-instances --image-id ami-8635a9b6 --instance-type t1.micro --placement AvailabilityZone=us-west-2a --security-groups quicklaunch-1 --key-name devops --user-data file://user-data.sh

Je ne vois que le fichier /var/tmp/user-data-testing est créé.

Cependant, lorsque j'essaie de passer par l'utilisateur que les données encodées en base64 blob comme ci-dessous, alors il est ignorée:

aws ec2 run-instances --image-id ami-8635a9b6 --instance-type t1.micro --placement AvailabilityZone=us-west-2a --security-groups quicklaunch-1 --key-name devops --user-data IyEvYmluL2Jhc2gKY2F0ID4+IC92YXIvdG1wL3VzZXItZGF0YS10ZXN0aW5nIDw8RU9GCnRoaXMgaXMgdGVzdCBsaW5lIGFkZGVkIGF0ICQoZGF0ZSkKRU9GCg==

Maintenant, je ne vois pas le fichier /var/tmp/user-data-testing créé.

Aussi, je sais que mon base64 blob est sain que je peut le décoder amende:

$ base64 --decode <<< IyEvYmluL2Jhc2gKY2F0ID4+IC92YXIvdG1wL3VzZXItZGF0YS10ZXN0aW5nIDw8RU9GCnRoaXMgaXMgdGVzdCBsaW5lIGFkZGVkIGF0ICQoZGF0ZSkKRU9GCg==
#!/bin/bash
cat >> /var/tmp/user-data-testing <<EOF
this is test line added at $(date)
EOF

Cependant, je ne vois que les métadonnées de l'instance a mes données d'utilisateur au format base64:

$ curl -L http://169.254.169.254/latest/user-data/
IyEvYmluL2Jhc2gKY2F0ID4+IC92YXIvdG1wL3VzZXItZGF0YS10ZXN0aW5nIDw8RU9GCnRoaXMgaXMgdGVzdCBsaW5lIGFkZGVkIGF0ICQoZGF0ZSkKRU9GCg==

Donc, ce que je fais mal en utilisant base64 l'utilisateur des données blob?

Mon exemple de méta-données est conscient de cela, mais semble comme c'est pas vraiment être exécuté (ou décodé et exécuté) au moment de l'instance de lancement.

Mise à JOUR:

Si je passe de la même base64 blob via la Console AWS lors du démarrage de l'instance, Il fonctionne. Semble comme quelque chose qui cloche dans la façon dont je l'utilise avec AWS-CLI.

Mise à JOUR:

J'ai juste essayé la même base64 blob avec mon code ruby comme ci-dessous et cela a fonctionné ainsi:

ec2 = Aws::EC2.new
resp = ec2.run_instances(
    min_count: 1,
    max_count: 1,
    image_id: 'ami-8635a9b6',
    instance_type: 't1.micro',
    placement: {
      availability_zone: 'us-west-2a'
    },
    security_groups: ['quicklaunch-1'],
    key_name: 'devops',
    user_data: 'IyEvYmluL2Jhc2gKY2F0ID4+IC92YXIvdG1wL3VzZXItZGF0YS10ZXN0aW5nIDw8RU9GCnRoaXMgaXMgdGVzdCBsaW5lIGFkZGVkIGF0ICQoZGF0ZSkKRU9GCg=='
)

De la sorte, alors WTF est mal de ma mise en œuvre de AWS-CLI ?

  • Pour mon information personnelle, comment avez-vous encoder votre fichier bash? Comme un fichier entier ou juste le texte?