Amazon EC2 インスタンスを再起動するたびにユーザーデータを実行して自動的にファイルを作成する方法を教えてください。

最終更新日: 2019 年 4 月 5 日

Amazon Elastic Compute Cloud (Amazon EC2) インスタンスが再起動されるたびにユーザーデータを使用してファイルを作成したいです。どうすればできますか?

簡単な説明

デフォルトでは、ユーザーデータスクリプトと cloud-init ディレクティブは、インスタンスが起動される最初の起動サイクルでのみ実行されます。ところが、MIME マルチパートファイルを使えば、ユーザーデータスクリプトと cloud-init ディレクティブを設定できます。MIME マルチパートファイルで、cloud-init パッケージでユーザーデータが実行される頻度をスクリプトで変更できます。次に、このファイルで、ユーザースクリプトを実行します

解決方法

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

  • インスタンスを停止して再開すると、インスタンスストアボリュームのデータがすべて消去されます。必ず、インスタンスストアボリューム のデータを バックアップしてください。詳細については、「AMI のルートデバイスタイプの判別」をご参照ださい。
  • インスタンスを停止および再起動すると、インスタンスのパブリック IP アドレスが変更されます。インスタンスに外部トラフィックをルーティングするときは、パブリック IP アドレスの代わりに Elastic IP アドレスを使用することをお勧めします。

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 つのコンテンツタイプのみを許可します。ただし、この例は、text/cloud-config text/x-shellscript コンテンツタイプの MIME マルチパートファイルです。

text/cloud-config コンテンツタイプは、SCRIPTS-USER パラメータを ALWAYS に設定することによって、cloud-init パッケージでユーザーデータが実行される頻度をオーバーライドします。

text/x-shellscript コンテンツタイプは、cloud-init cloud_final_modules モジュールによって実行される実際のユーザースクリプトを提供します。この場合、実行される行は1行だけです。これは、 '/bin/echo "Hello World." >> /tmp/testfile.txt' です。この行を、インスタンスの起動中に実行するシェルスクリプトに置き換えます。

7.    EC2 インスタンスを再度起動して、 /tmp/testfile.txt ファイルが作成されることを確認してください。


このページは役に立ちましたか?

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


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