web-dev-qa-db-fra.com

Amazon ec2 données-utilisateur, comment ça marche?

Nous démarrons des instances et accédons aux données utilisateur que nous plaçons. Mais est-ce que quelqu'un comprend les éléments internes de cette opération (du côté d'Amazon)? Lorsque nous transmettons les données utilisateur, à quel moment ces données sont-elles transmises au VM (s'agit-il d'une fonctionnalité Xen) et où sont-elles stockées?

J'ai d'abord pensé que cela avait été défini comme étant la variable env USER_DATA, mais nous pouvons également le transmettre sous forme de fichier. Où ce fichier est-il stocké? Est-ce générique à toutes les instances ou varie en fonction de l'AMI?

Ce n'est pas un problème en soi, je voulais juste savoir comment Amazon fait cela.

Capture d'écran des données utilisateur: http://d.pr/GZlY

47
Devrim

Les données utilisateur sont disponibles pour l'instance avec une simple requête HTTP à cette URL:

http://169.254.169.254/latest/user-data

Amazon EC2 ne place pas directement ces données utilisateur sur l'instance, bien que de nombreuses AMI disposent d'un code qui indique à l'instance de télécharger et de traiter automatiquement les données utilisateur.

Voir également:

54
Eric Hammond

Un exemple simple pour la compréhension de tous: Si vous voulez créer le fichier /tmp/testfile.txt au démarrage de la machine, vous pouvez simplement ajouter ces deux lignes dans le champ User data.

#!/bin/bash
touch /tmp/testfile.txt

N'oubliez pas de mettre le #!/bin/bash en haut avant vos commandes.

Lorsque vous exécutez l'instance (AMI Linux), vous pouvez voir le contenu du champ User data à /var/lib/cloud/instance/user-data.txt.

5
Avión

Désolé de poster une question aussi ancienne, mais cela semble être le meilleur endroit pour mettre cette information supplémentaire.

La plupart des documents AWS décrivent les données utilisateur comme une propriété dans laquelle mettre des scripts de démarrage d'instance de cycle de vie d'instance, c'est-à-dire les éléments que vous souhaitez exécuter uniquement lors du premier lancement de l'instance.

C’est généralement le cas, mais au moins une autre personne, à part moi, souhaite effectuer un script différent au redémarrage, par exemple pour réparer une clé cassée ou quelque chose du genre. Et devinez quoi ... vous pouvez le faire en utilisant les données utilisateur.

Voici le code et le lien vers le document AWS ...

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
/bin/echo "Hello World." >> /tmp/sdksdfjsdlf
--//

Je ne trouve aucune documentation sur ce formatage des données utilisateur qui permette que cela se produise. Je l'ai essayé et ça marche. J'ai essayé de voir si cela fonctionne à chaque démarrage, et c'est le cas.

Donc, si vous pensez avoir besoin de le faire, je vous recommande de faire une sauvegarde. Assurez-vous de disposer d'une copie des données utilisateur d'origine et utilisez le code fourni modifié en suite, puis supprimez le code lors de la prochaine interruption de l'instance (pour éviter plusieurs exécutions du script).

2
Les

AWS userdata est l'ensemble des commandes/données que vous pouvez fournir à une instance au moment du lancement. Par exemple, si vous lancez une instance ec2 et souhaitez installer docker sur le nouvel ec2, vous pouvez fournir un ensemble de commandes bash dans le champ userdata de la page de configuration d’aws ec2.

Cas d'utilisation 

Ici est un exemple bien expliqué de données utilisateur AWS avec tutoriel vidéo

1
Ajeet Khan
#!/bin/bash
yum update -y
yum install httpd -y
echo "<html><h1>webpage 1(whatever you want, give the page name here)</h1></html>"
/var/www/html/index.html
service httpd start
chkconfig httpd on
0
mahwir