2012-04-12 16 views
52

Desidero automatizzare il lancio di una serie di istanze di Linux EC2.Come attivare istanze EC2 e caricare/eseguire uno script di avvio su ciascuno di essi?

Fondamentalmente, voglio scrivere uno script/programma che:

  • Instantiate N occorrenze di un dato AMI di mine.
  • Per ogni istanza avviata, caricare uno script personalizzato e lasciare che lo script venga eseguito nell'istanza.

Usando VMWare, lo farei di solito farlo utilizzando vmrun o il Vix SDK.

Quali sono le opzioni in Amazon AWS/EC2?

risposta

80

La risposta dipende un po 'dall'AMI in esecuzione, poiché le funzioni fornite sono interamente dipendenti da AMI.

Amazon AMIS di Linux e AMI di Ubuntu ufficiali hanno installato il pacchetto cloud-init. Questo ha un certo numero di modi in cui puoi attivare le azioni di avvio, ma quello che soddisfa la tua richiesta più da vicino (e il mio preferito perché l'ho inventato) è il concetto di user-data script.

È sufficiente passare qualsiasi script (che inizia con i due caratteri #!) Come dati utente all'avvio delle istanze EC2. Verrà eseguito come root al primo avvio dell'istanza.

Per un esempio specifico di come funziona, io uso questa tecnica esatta nel mio recente articolo: Uploading Known ssh Host Key in EC2 user-data Script

È inoltre voleva correre più di un'istanza EC2 con lo stesso copione. Il comando ec2-run-instances e le relative API e console Web consentono di specificare un numero qualsiasi di istanze da avviare con gli stessi dati utente. Per esempio:

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

Se è attualmente in esecuzione di un AMI che non ha cloud-init installata, si potrebbe fare una delle:

  • Passare a un AMI che ha cloud-init installata, o

  • compilare una versione personalizzata del vostro AMI in cui è installato il cloud-init, o

  • Scrivi uno script wrapper più complicato che fa un reco di tutti gli ID di istanza dopo che sono stati avviati, attende che tutte le istanze passino allo stato di esecuzione, attende che sshd accetti le connessioni, carica lo script di avvio su ogni istanza ed esegue lo script di avvio su ogni istanza .

+20

Una delle cose carine di SO è che quando inizi a trovare alcuni suggerimenti, il ragazzo il cui nome inizia ad apparire in tutte le tue query su Google risponde alla tua domanda personalmente. Impressionante :-) –

+0

Eviterei l'opzione 3 della risposta di cui sopra. Ho incontrato due diverse insidie ​​con questo approccio. 1) Un'istanza ha un indirizzo IP che hai già visto e la voce known_hosts non corrisponde. 2) La macchina che carica e controlla tutte le istanze e gli script di avvio viene sovraccaricata e le cose si rompono – Nate

+9

La migliore citazione di SO: "e la mia preferita perché l'ho inventata" –

1

Ho a tutorial to run the script in the "cloud-init" eseguito ogni volta che AWS EC2 è avviato.

  • per impostare il file di configurazione (AWS CentOS6) e

  • eseguire gli script quando si startup l'EC2

Per impostare file di configurazione su Linux si può fare riferimento configure cloud-init on AWS Linux .

Io personalmente uso AWS VPC/EBS che è stato configurato in base a AMI Linux, non ho toccato nulla sul file di configurazione /etc/cloud/cloud.cfg ma il mio boot script in the cloud-init funziona bene.

Problemi correlati