Amazon EC2 インスタンスを再起動するたびに、ユーザーデータを使用してて自動的にスクリプトを実行する方法を教えてください。

最終更新日: 2020 年 4 月 16 日

Amazon Elastic Compute Cloud (Amazon EC2) インスタンスが再起動されるたびに、ユーザーデータを使用してスクリプトを実行したいです。どうすればよいですか。

簡単な説明

デフォルトでは、ユーザーデータスクリプトと cloud-init ディレクティブは、EC2 インスタンスが起動される最初の起動サイクルでのみ実行されます。ただし、MIME マルチパートファイルを使えば、ユーザーデータスクリプトと cloud-init ディレクティブを設定できます。MIME マルチパートファイルを使用して、cloud-init パッケージでユーザーデータが実行される頻度をスクリプトで変更できます。次に、このファイルで、ユーザースクリプトを実行します。 MIME マルチパートファイルの詳細については、cloud-init ウェブサイトの MIME マルチパートアーカイブ を参照してください。

解決方法

警告: この手順を開始する前に、次の点にご注意ください。

1.    cloud-init の最新バージョンが EC2 インスタンスにインストールさ れ、正常に動作することを確認します。

2.    セキュリティ上の理由から、IAM ポリシーを作成して、ユーザーデータを追加または削除するユーザーModifyInstanceAttribute API を使って制限します。

3.    Amazon EC2 コンソールを開きます。

4.    インスタンスを停止します。

5.    [Action] 、[インスタンス設定]、[表示/ユーザーデータの変更] を順に選択します。

6.    ユーザースクリプトを ユーザーデータの表示 / 変更 ダイアログボックスにコピーして、 保存 を選択します。

次の例では、シェルスクリプトとして testfile.txt ファイル (/tmp ディレクトリ) に「Hello World」を書き込みます。

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 モジュールによって実行される実際のユーザースクリプトを提供します。この例では、実行する行は 1 つだけです。それは /bin/echo「Hello World.」>>/tmp/testfile.txtです。

: /bin/echo "Hello World." >> /tmp/testfile.txt の行を、インスタンス起動時に実行するシェルスクリプトの行と置き換えます。

7.    EC2 インスタンスを再度起動し、スクリプトが正しく実行されていることを検証します。


この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合