Comment déclencher des instances EC2 et télécharger / exécuter un script de démarrage sur chacun d’eux?

Je veux automatiser le lancement d’un ensemble d’instances Linux EC2.

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

  • Instancier N occurrences d’une AMI donnée de la mienne.
  • Pour chaque instance démarrée, il téléchargerait un script personnalisé et laisserait le script s’exécuter dans l’instance.

En utilisant VMWare, je le ferais généralement en utilisant vmrun ou le SDK Vix.

Quelles sont les options dans Amazon AWS / EC2?

La réponse dépend un peu de ce que vous exécutez sur AMI, car les fonctionnalités fournies dépendent entièrement de l’AMI.

Amazon AMIS Linux et les AMI officielles Ubuntu ont le package cloud-init installé. Il existe plusieurs façons de déclencher des actions de démarrage, mais celle qui correspond le mieux à votre demande (et mon préféré parce que je l’ai inventé) est le concept d’un script de données utilisateur .

Vous pouvez simplement passer 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 lors du 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: Téléchargement d’une clé d’hôte ssh connue dans le script de données utilisateur EC2

Vous souhaitiez également exécuter plusieurs instances EC2 avec le même script. La commande ec2-run-instances et les API et la console Web associées vous permettent de spécifier le nombre d’instances à 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:

  • Passez à une AMI sur laquelle cloud-init est installé ou

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

  • Ecrivez un script d’encapsulage plus compliqué qui enregistre tous les identifiants d’instance après leur lancement, attend que toutes les instances passent à l’état d’exécution, attend que sshd accepte les connexions, télécharge votre script de démarrage sur chaque instance et exécute le script de démarrage sur chaque instance.

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

  • exécuter les scripts lorsque vous démarrez l’EC2

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

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