web-dev-qa-db-ja.com

EC2インスタンスの起動後にbashスクリプトを実行する

EC2インスタンスに、別のインスタンスをリモートで起動するスクリプトがあります。

このインスタンスが完全に読み込まれた後(起動が完了した後)、bashスクリプトを自動的に実行したいのですが、これを行うための最良の方法は何ですか?

すべてを完全に開始する必要があります。基本的に、bashスクリプトは画像変換スクリプトを実行します(ImageMagickを使用して、「wget」コマンドを数回実行します)。

現在、スクリプトはここにあります:

/home/root/beginProcess.sh

そして、私はそれを手動で開始することができます

bash beginProcess.sh

RHEL-6.2-Starter-EBS-i386

また、これにEBSボリュームが添付されています。

23
SSH This

ec2-run-instancesser-data オプションを使用することをお勧めします。 VMこれは最初の起動時に実行されます。ubuntuまたはdebianを使用している場合は cloud-init を使用できます。 =、これはプロセスにいくらかの洗練をもたらします。cloud-initを使用する場合、構成ファイルの[runcmd]セクションを使用して、ブート後に実行する任意のコマンドを指定できます。

SFユーザー Eric Hammond に感謝します。彼の site を確認してください。AWSに関する豊富な情報があります。

編集:再度読んだ後、コマンドを最初の起動時に実行するのか、毎回実行するのかは明確ではありません。上記の手順は、初期ブートにのみ適用されます。すべての起動時にコマンドを実行する場合は、いくつかのオプションがあります-@reboot cronディレクティブを介してコマンドを実行するか、スクリプトを/etc/rc.localに追加して実行することができますシステムが起動するたび。

32
EEAA

cloud-initパッケージがインストールされたAMI(Amazon LinuxやUbuntuなど)を使用している場合は、bashスクリプト(#!で始まる)をuser-data-fileとして渡すだけで、自動的に実行されます起動プロセスの最後。

たとえば、次のように簡単にすることができます。

ec2-run-instances                             \
  --user-data-file /home/root/beginProcess.sh \
  --key $USER                                 \
  AMI-XXXXXXXX

ユーザーデータスクリプトの概念を紹介した記事は次のとおりです。AmazonLinuxやUbuntuなどの主要なEC2 AMIで利用可能になりました。 http://alestic.com/2009/06/ec2-user-data-scripts =

残念ながら、RHEL AMIを使用したいようです。私はそのコピーを実行しましたが、初回起動時にcloud-initや実行中のユーザーデータスクリプトへの参照を見つけることができず、同じ作業のテストも行いませんでした。

このためにLinuxディストリビューションを切り替える必要があると言っているのではありませんが、Amazon LinuxはRHELに基づいているため、うまくいく場合があります。

これが私が書いた記事で、最初に機能しない場合にユーザーデータスクリプトをデバッグするのに役立つ可能性があります。 http://alestic.com/2010/12/ec2-user-data-output =

9
Eric Hammond

これは古い質問ですが、これに対する良い答えはどこにも見つかりませんでした。私のユースケースでは、インスタンスがシャットダウンされ、スケジュールに従って再起動されたため、既存のインスタンスでいくつかのコマンドを再実行する必要がありました。

一般的な答えはEC2ユーザーデータを使用することですが、これは私にはうまくいかないようです。これは、ユーザーデータが新しく作成されたインスタンス(スケーリング用にインスタンスをブートストラップするなど)でコマンドを実行するためだけであるか、ドキュメントが古くなっているためです。どちらかわからないが、私は何かをうまく動かすことができなかった。 existingインスタンスが起動するたびにコマンドを実行するためのいくつかの方法が明らかにここに示されています: 起動時にEC2ユーザーデータスクリプトを再度実行する方法? ですが、これは私にはまったく機能しません。何も起こりません。

しばらくぶらついた後、私は暗闇の中でショットを取り、EC2インスタンスの.bashrcファイルを変更しました。見たところ、期待どおりに機能し、インスタンスの起動時にコマンドを実行します。これはほとんど明白ですが、どこかで言及されていないことは少し注目に値します。

0
adammtlx

EC2 UserDataを使用してスクリプトを実行する方法の信頼できるソースインスタンスが起動するのは here です。つまり、インスタンスにスクリプトを作成し(必ず実行可能にする)、次のuserdataスクリプトを使用します。

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

/path/to/script.sh
--//

最後から2行目を変更して、スクリプトを指すようにするだけです。

私が見つけた別のトリックは、すでにこれで遊んでいて、インスタンスにotherUserDataスクリプトがあった場合、それはマシンにキャッシュされ、UserDataスクリプトを変更しても更新されません。新しいUserDataスクリプトを実際に使用するように強制するには、インスタンスでcloud-init cleanを実行してUserDataキャッシュをクリアする必要があります。

0
crockeea