web-dev-qa-db-ja.com

EC2インスタンスを起動し、各インスタンスで起動スクリプトをアップロード/実行する方法は?

Linux EC2インスタンスのセットの起動を自動化したい。

基本的に、次のようなスクリプト/プログラムを作成します。

  • 特定のAMIのN個のオカレンスをインスタンス化します。
  • 開始された各インスタンスについて、カスタマイズされたスクリプトをアップロードし、スクリプトをインスタンスで実行します。

VMWareを使用して、通常はvmrunまたはVix SDKを使用します。

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

54
Serge Wautier

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

Amazon Linux AMISおよび公式のUbuntu AMIには cloud-init パッケージがインストールされています。これには、起動アクションをトリガーする方法がいくつかありますが、リクエストに最も近いもの(そして、私が発明したので私のお気に入り)は ser-data script の概念です。

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

これがどのように機能するかの特定の例については、最近の記事で次の正確な手法を使用します: EC2ユーザーデータスクリプトで既知のsshホストキーをアップロードする

また、同じスクリプトで複数のEC2インスタンスを実行したいと考えていました。 ec2-run-instancesコマンドと関連APIおよびWebコンソールを使用すると、同じユーザーデータで開始するインスタンスをいくつでも指定できます。例えば:

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

現在cloud-initがインストールされていないAMIを実行している場合、次のいずれかを実行できます。

  • Cloud-initがインストールされているAMIに切り替える、または

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

  • 起動後にすべてのインスタンスIDの記録を作成し、すべてのインスタンスが実行状態に移行するのを待ち、sshdが接続を受け入れるのを待って、各インスタンスに起動スクリプトをアップロードする、より複雑なラッパースクリプトを記述します、各インスタンスで起動スクリプトを実行します。

84
Eric Hammond

「cloud-init」でスクリプトを実行するチュートリアル AWS EC2が起動するたびに実行されます。

  • 設定ファイル(AWS CentOS6)を設定し、

  • eC2の起動時にスクリプトを実行します

Linuxで設定ファイルを設定するには、 AWS Linuxでcloud-initを設定 を参照します。

私は個人的に AWS VPC/EBS を使用します。これはLinux AMIに基づいてセットアップされたもので、構成ファイルには何も触れませんでした/etc/cloud/cloud.cfgしかし、私の cloud-initのブートスクリプト は正常に実行されます。

1
Chetabahana