cloud-initがEC2インスタンスの最初のブートでユーザーデータスクリプトを実行した後、状態ファイルが書き込まれ、その後の再起動でcloud-initが再度スクリプトを実行しないようにします。ユーザーデータスクリプトが再度実行されるように、この状態ファイルを削除したい場合があります。それはどこにある?
cloud-initがEC2インスタンスの最初のブートでユーザーデータスクリプトを実行した後、状態ファイルが書き込まれ、その後の再起動でcloud-initが再度スクリプトを実行しないようにします。ユーザーデータスクリプトが再度実行されるように、この状態ファイルを削除したい場合があります。それはどこにある?
回答:
rm /var/lib/cloud/instances/*/sem/config_scripts_user
作業確認済み:
完全を期すために、このAMI [親AMIが...を所有していた]がすべてcloud-init
ユーザーデータを実行したという事実/可能性を追跡したい場合は、現在のセマフォのみを削除できます。
rm /var/lib/cloud/instance/sem/config_scripts_user
curl
メタデータサービスが現在のインスタンスIDを取得すること/var/lib/cloud/instance
は不要です。なぜなら、既に現在のインスタンスへのシンボリックリンクであるためです/var/lib/cloud/instances
。:-)
スクリプトを/etc/rc.localに配置すると、再起動するたびにスクリプトが実行されます。
/etc/rc.local
EC2ユーザーデータとは関係ありません。
状態ファイルを削除する代わりに、ブートごとに再実行するようにユーザーデータを構成することもできます。cloud_final_modules
userdataスクリプトを使用してuserdataスクリプトを再実行する必要があります。そのためには、userdataに複数のファイルが含まれるようにuderdataをカスタマイズする必要があります。ユーザーデータファイルの例は次のようになります。
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/userdata-test.txt
--//
これにより、すべてのブートプロセスの最後のステップでユーザーデータスクリプトが実行されます。ここでは1行だけをbin/echo "Hello World" >> /tmp/userdata-test.txt
実行します。これは、マシンを起動するたびに実行する必要があるシェルスクリプトに置き換えます。