2012-04-12 43 views
52

私は、Linux EC2インスタンスのセットの起動を自動化したいと考えています。私の与えられたAMIのEC2インスタンスを起動し、起動スクリプトをアップロード/実行する方法は?

  • インスタンス化Nの出現:

    は基本的に、私は希望スクリプト/プログラムを書きたいです。

  • 開始されたインスタンスごとに、カスタマイズされたスクリプトをアップロードし、スクリプトをインスタンスに実行させます。使用VMware

、私は一般的にVMRUNやVIX SDKを使用していることだろう。

Amazon AWS/EC2のオプションは何ですか?

答えて

80

答えは、提供される機能が完全にAMIに依存するため、実行しているAMIに少し依存します。

Amazon Linux AMISおよび公式のUbuntu AMIには、cloud-initパッケージがインストールされています。これには起動アクションをトリガできる方法がいくつかありますが、私が考案したので私のお気に入りであるあなたの要求に最も近いものはuser-data scriptのコンセプトです。

EC2インスタンスを起動するときに、任意のスクリプト(2文字の#!で始まる)をユーザーデータとして渡すことができます。インスタンスの最初の起動時にrootとして実行されます。これがどのように動作するかの具体的な例

は、私は私の最近の記事で、この正確なテクニックを使用します。 Uploading Known ssh Host Key in EC2 user-data Script

ます。また、同じスクリプトで複数のEC2インスタンスを実行したかったです。 ec2-run-instancesコマンド、関連するAPIとWebコンソールでは、同じユーザーデータで開始する任意の数のインスタンスを指定できます。たとえば、次のように

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

あなたは現在、クラウド-initがインストールされていないこと、あなたがのいずれかの操作を実行できAMIを実行している場合:クラウド-initをインストールしたAMIへ

  • スイッチを、または

  • クラウド-initがインストールされているあなたのAMIのカスタムバージョンをビルド、または

  • はRECOになり、より複雑なラッパースクリプトを書きますすべてのインスタンスが実行状態に移行するのを待ち、sshdが接続を受け付けるのを待って、起動スクリプトを各インスタンスにアップロードし、各インスタンスで起動スクリプトを実行します。

+20

SOの良い点の1つは、あなたがいくつかのポインタを見つけ始める頃に、あなたのすべてのGoogleクエリに名前が表示され始める人があなたの質問に個人的に答えたということです。素晴らしい:-) –

+0

私は上記の答えのオプション3を避けるだろう。私はこのアプローチで2つの異なる落とし穴に遭遇しました。 1)インスタンスに以前に見たIPアドレスがあり、known_hostsエントリが一致しません。 2)すべてのインスタンスと起動スクリプトをアップロードして制御するマシンが過負荷になり、不具合が発生する – Nate

+9

SOのベストクォート:「私が発明したために私のお気に入り」 –

1

AWS EC2が起動するたびに実行されるa tutorial to run the script in the "cloud-init"があります。あなたがLinux上で設定ファイルを設定するにはEC2に

を起動するときにconfigure cloud-init on AWS Linuxを参照してスクリプトを実行コンフィギュレーションファイル(AWS CentOS6)と

  • を設定する

    • 私は個人的にLinuxのAMIに基づいて設定したAWS VPC/EBSを使用し、私はよく、構成ファイル/etc/cloud/cloud.cfgが、私のboot script in the cloud-initの実行には何も触れていません。

  • 関連する問題