起動時にEC2ユーザーデータスクリプトを再度実行する方法は?


19

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

回答:


24

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


2
あなたはすぐにそれを理解しました。
c24w

9
@ c24wこれらのタイムスタンプは誤解を招くものです。実際には数時間の調査とテストが必要だったので、考え出したら、次の人が決定的な答えを探すのを助けるためにこの質問を作成しました。
マイク

1
私が渡って来ている。このことから、それが後のウィキ型のQ&Aに励まされたことに気づきませんでした。これを文書化して感謝します!
c24w

1
これがserverfaultで奨励されたことを嬉しく思います。私はそれがSOで何度もダウン投票されたことを見てきました
率直

1
@ flag5 curlメタデータサービスが現在のインスタンスIDを取得すること/var/lib/cloud/instanceは不要です。なぜなら、既に現在のインスタンスへのシンボリックリンクであるためです/var/lib/cloud/instances。:-)
マイク

2

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


/etc/rc.localEC2ユーザーデータとは関係ありません。
マイク

@MikeConigliaroユーザーデータを使用してブートのたびに何かを実行したかったので、ユーザーデータスクリプトを/etc/rc.localに追加しました。
user253751

0

状態ファイルを削除する代わりに、ブートごとに再実行するようにユーザーデータを構成することもできます。cloud_final_modulesuserdataスクリプトを使用して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実行します。これは、マシンを起動するたびに実行する必要があるシェルスクリプトに置き換えます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.