Amazon Elastic Compute Cloud (Amazon EC2) インスタンスが再起動されるたびに、ユーザーデータを利用してスクリプトを実行したいと考えています。その方法を教えてください。
簡単な説明
デフォルトでは、ユーザーデータスクリプトと cloud-init ディレクティブは、EC2 インスタンスが起動される最初の起動サイクルでのみ実行されます。ただし、MIME マルチパートファイルを使えば、ユーザーデータスクリプトと cloud-init ディレクティブを設定できます。MIME マルチパートファイルを使用すると、cloud-init パッケージでユーザーデータが実行される頻度をスクリプトで変更できます。その後、ファイルは、ユーザースクリプトを実行します。MIME マルチパートファイルの詳細については、cloud-init ウェブサイトの「Mime Multi Part Archive」を参照してください。
注: 次の解決方法に進む前に、インスタンスのスナップショットを作成するのがベストプラクティスです。
解決方法
警告: この手順を開始する前に、次の点にご注意ください。
1. cloud-init の最新バージョンが EC2 インスタンスにインストールされ、正常に動作することを確認します。
2. セキュリティのため、IAM ポリシーを作成して、ModifyInstanceAttribute API を通じてユーザーデータを追加または削除することが許可されているユーザーを制限します。
3. Amazon EC2 コンソールを開きます。
4. インスタンスを停止します。
5. [Actions] (アクション)、[Instance Settings] (インスタンスの設定)、[Edit User Data] (ユーザーデータの編集) の順に選択します。
6. ユーザースクリプトを [Edit user data] (ユーザーデータの編集) ボックスにコピーして、[Save] (保存) を選択します。
次の例は、「Hello World」を /tmp ディレクトリの testfile.txt ファイルに書き込むシェルスクリプトです。
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"
#!/bin/bash
/bin/echo "Hello World" >> /tmp/testfile.txt
--//--
デフォルトでは、cloud-initは ユーザーデータで一度に 1 つのコンテンツタイプのみを許可します。ただし、この例は、MIMEマルチパートファイルのtext/cloud-config と text/x-shellscript の両方のコンテンツタイプを示しています。
text/cloud-config コンテンツタイプは、SCRIPTS-USER パラメータを ALWAYS に設定することによって、cloud-init パッケージでユーザーデータが実行される頻度をオーバーライドします。
text/x-shellscript コンテンツタイプは、cloud-init cloud_final_modules モジュールによって実行される実際のユーザースクリプトを提供します。この例では、実行する行は /bin/echo "Hello World." >> /tmp/testfile.txt の 1 つだけです。
注: /bin/echo "Hello World." >> /tmp/testfile.txt の行を、インスタンス起動時に実行するシェルスクリプトの行と置き換えます。
7. EC2 インスタンスを再度起動し、スクリプトが正しく実行されていることを検証します。
関連情報
起動時に Linux インスタンスでコマンドを実行する
起動時に Windows インスタンスでコマンドを実行する
AWS Systems Manager Automation
User-Data Formats