web-dev-qa-db-fra.com

Comment déclencher des instances EC2 et télécharger/exécuter un script de démarrage sur chacune d'elles?

Je souhaite automatiser le lancement d'un ensemble d'instances Linux EC2.

En gros, je veux écrire un script/programme qui:

  • Instanciez N occurrences d’un IAM donné.
  • Pour chaque instance démarrée, il importait un script personnalisé et le laissait s'exécuter dans l'instance.

Avec VMWare, je le ferais généralement avec vmrun ou le SDK Vix.

Quelles sont les options dans Amazon AWS/EC2?

53
Serge Wautier

La réponse dépend un peu de votre AMI, car les fonctionnalités fournies dépendent entièrement de l'AMI.

Amazon Linux AMIS et les AMI officielles Ubuntu ont le package cloud-init installé. Vous pouvez déclencher des actions de démarrage de différentes manières, mais celle qui correspond le mieux à votre requête (et ma préférée parce que je l’ai inventée) est le concept de script de données utilisateur .

Vous pouvez simplement transmettre n'importe quel script (en commençant par les deux caractères #!) En tant que données utilisateur lors du démarrage des instances EC2. Il sera exécuté en tant que root au premier démarrage de l'instance.

Pour un exemple spécifique de la façon dont cela fonctionne, j’utilise cette technique exacte dans mon article récent: Chargement de la clé d’hôte ssh connue dans le script de données utilisateur EC2

Vous vouliez également exécuter plusieurs instances EC2 avec le même script. La commande ec2-run-instances et les API et la console Web connexes vous permettent de spécifier un nombre illimité d'instances pour démarrer avec les mêmes données utilisateur. Par exemple:

ec2-run-instances            \
  --instance-count 10        \
  --user-data-file $MYSCRIPT \
  --key $USER                \
  $SOMEAMI

Si vous exécutez actuellement une AMI sur laquelle cloud-init n'est pas installé, vous pouvez effectuer l'une des opérations suivantes:

  • Basculez vers une AMI sur laquelle cloud-init est installé, ou

  • Construisez une version personnalisée de votre AMI sur laquelle cloud-init est installé, ou

  • Écrivez un script d'encapsulage plus complexe qui enregistre tous les identificateurs d'instance après leur lancement, attend que toutes les instances passent à l'état en cours d'exécution, attend que sshd accepte les connexions, télécharge votre script de démarrage dans chaque instance. et exécute le script de démarrage sur chaque instance.

82
Eric Hammond

J'ai un tutoriel pour exécuter le script dans le "cloud-init" qui s'exécute à chaque démarrage d'AWS EC2. 

  • définir le fichier de configuration (AWS CentOS6) et 

  • lancer les scripts au démarrage de l'EC2

Pour définir le fichier de configuration sous Linux, vous pouvez vous référer configurer cloud-init sur AWS Linux

J'utilise personnellement AWS VPC/EBS qui a été configuré sur l'AMI Linux, je n'ai pas touché au fichier de configuration /etc/cloud/cloud.cfg mais mon script de démarrage dans le cloud-init fonctionne bien.

1
Chetabahana