2012-04-12 12 views
52

Chcę zautomatyzować uruchamianie zestawu instancji systemu Linux EC2.Jak uruchamiać instancje EC2 i wysyłać/uruchamiać skrypt startowy na każdym z nich?

Zasadniczo chcę napisać skrypt/program, który:

  • instancję n wystąpień danego AMI kopalni.
  • Na każdy rozpoczęty instancji, to przesłać niestandardowy skrypt i niech skrypt napotkasz instancji.

Korzystanie VMWare, chciałbym zazwyczaj zrobić za pomocą vmrun lub Vix SDK.

Jakie są opcje w Amazon AWS/EC2?

Odpowiedz

80

Odpowiedź zależy trochę na co AMI używasz jako funkcje przewidziane są całkowicie zależne od AMI.

Amazon Linux AMIS i oficjalne Ubuntu Amis mieć zainstalowany pakiet cloud-init. Ma to wiele sposobów uruchamiania akcji startowych, ale ta, która najbardziej pasuje do Twojej prośby (i moja ulubiona, ponieważ ją wymyśliłem) jest pojęciem user-data script.

Możesz po prostu przekazać dowolny skrypt (zaczynając od dwóch znaków #!) Jako dane użytkownika podczas uruchamiania instancji EC2. Zostanie uruchomiony jako root przy pierwszym uruchomieniu instancji.

Na konkretnym przykładzie, jak to działa, używam dokładnie tę technikę w moim ostatnim artykule: Uploading Known ssh Host Key in EC2 user-data Script

też chciał uruchomić więcej niż jednej instancji EC2 z tego samego skryptu. Komenda ec2-run-instances oraz powiązane interfejsy API i konsola internetowa umożliwiają określenie dowolnej liczby instancji do uruchomienia z tymi samymi danymi użytkownika. Na przykład:

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

Jeśli obecnie prowadzenie AMI, który nie ma cloud-init, zainstalowany, można wykonać jedną z:

  • przełączyć się na AMI, który ma cloud-init, lub

  • Budowa niestandardową wersję swojej AMI, który ma zainstalowany cloud-init, lub

  • Napisz bardziej skomplikowany skrypt otoki, która sprawia, Reco rd wszystkich identyfikatorów instancji po ich uruchomieniu, czeka na wszystkie wystąpienia, aby przejść do stanu działania, czeka, aż sshd zaakceptuje połączenia, prześle skrypt startowy do każdej instancji i uruchomi skrypt startowy przy każdym wystąpieniu .

+20

Jedną z pozytywnych rzeczy jest to, że zanim zaczniesz szukać wskazówek, facet, którego nazwisko pojawia się we wszystkich zapytaniach google, odpowiedział na twoje pytanie osobiście. Awesome :-) –

+0

Unikałbym opcji 3 powyższej odpowiedzi. Z takim podejściem natrafiłem na dwie różne pułapki. 1) Wystąpienie ma poprzednio widziany adres IP, a wpis known_hosts nie jest zgodny. 2) Urządzenie ładuje i kontroluje wszystkie instancje i skrypty startowe zostaje przeładowane, a przerwy w plikach. – Nate

+9

Najlepszy cytat z SO: "i mój ulubiony, ponieważ go wymyśliłem" –

1

mam a tutorial to run the script in the "cloud-init", który działa za każdym razem AWS EC2 jest rozruch.

  • ustawić plik konfiguracyjny (AWS CentOS6) i

  • uruchamiania skryptów po starcie EC2

Aby ustawić plik konfiguracyjny na Linuksie można odnieść configure cloud-init on AWS Linux .

Osobiście używam AWS VPC/EBS, który był oparty na Linux AMI, nie dotknąłem niczego na pliku konfiguracyjnym /etc/cloud/cloud.cfg, ale mój boot script in the cloud-init działa dobrze.

Powiązane problemy