web-dev-qa-db-ja.com

起動時にEC2ユーザーデータスクリプトを再度実行するにはどうすればよいですか?

Cloud-initがEC2インスタンスの最初の起動時に ser data script を実行した後、cloud-initがその後の再起動時に再度スクリプトを実行しないように、おそらく状態ファイルが書き込まれます。ユーザーデータスクリプトが再度実行されるように、この状態ファイルを削除したい場合があります。それはどこにある?

20
Mike Conigliaro

rm /var/lib/cloud/instances/*/sem/config_scripts_user

作業中の確認済み:

  • CentOS 7.4
  • Ubuntu 14.04
  • Ubuntu 16.04

完全を期すために、このAMI [親AMIがあった...]とそのすべてが実行されたという事実/可能性を追跡したい場合は、cloud-initユーザーデータ。現在のセマフォのみを削除できます。

rm /var/lib/cloud/instance/sem/config_scripts_user

26
Mike Conigliaro

状態ファイルを削除する代わりに、起動ごとに再実行するようにユーザーデータを構成することもできます。 userdataスクリプトでcloud_final_modulesを使用してuserdataスクリプトを再実行する必要があります。そのためには、userdataに複数のファイルを含めるようにuderdataをカスタマイズする必要があります。 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"

#!/bin/bash
/bin/echo "Hello World" >> /tmp/userdata-test.txt
--//

これにより、すべての起動プロセスの最後のステップでuserdataスクリプトが実行されます。ここでは、実行される単一行bin/echo "Hello World" >> /tmp/userdata-test.txtを、マシンを起動するたびに実行する必要があるシェルスクリプトに置き換えます。

1
Hardeep Singh

スクリプトを/etc/rc.localに置くと、再起動するたびにスクリプトが実行されます。

1
Pratik Singhal