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?
Vous devez vous connecter pour publier un commentaire.
Il semble que awscli ne l'encodage base64 pour vous, alors vous devriez passer en clair texte --les données utilisateur.
Apparemment, la documentation n'est pas très clair sur ce point. Cochez cette lien.
Cette syntaxe devrait alors être:
ou
user-data
doit être unbase64
codé blob.Eu le même problème, très frustrant pour traquer le problème, a finalement obtenu ce travail.
n'a pas base64 encode a mis le script dans le fichier.
placer semble être importante travaillé pour moi que quand
--user-data file://chemin d'accès
est placé à la fin
Ce format travaillé évidemment changer de certaines données à la vôtre
Selon les docs http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html, le base64 est uniquement pour les appels de l'API et de ne pas la CLI