[トップページ] [FAQ 一覧]

対象:ユーザデータ

ユーザデータ内のスクリプトが実行されないときに確認する事項





疑問


Windows EC2インスタンスに設定されたユーザデータ内のスクリプトが実行されない。
<script>〜</script> や <powershell>〜</powershell>内で記載されたスクリプトが実行されない。

EC2インスタンスのユーザデータ



考えられる原因


考えられる原因は以下の通りです。ただし一部は実験結果からの推測であり、今後仕様が変更になる可能性がある。(2018年7月現在)

(1)初回実行
ユーザデータは原則インスタンスの初回(初めて起動)したときしか実行されない。

(2)sysprep を実行していない。
Windows の場合、sysprep が実行されていない。sysprep を実行したAMIからインスタンスを生成しないと実行されなかった。(2019年2月の実験結果)

(3)後から修正
後からユーザデータを修正しても変更されない模様。(実験結果)

(4)後から空に
<persist>true</persist> でインスタンス起動時に毎回実行している場合でも、その後マネージメントコンソールからユーザデータを削除して空にしたら次回から実行されなくなった。よって後から修正でも削除する場合は有効化される模様。(実験結果)

対策




(1)ログ確認
Windowsの場合、ユーザデータのスクリプトの実行結果、<persist>,<script>,<powershell> の認識結果のログは以下に出力されています。
構文誤りも以下のログに出力されます。


C:\ProgramData\Amazon\EC2-Windows\Launch\Log\UserdataExecution.log



Windowsの場合以下にユーザデータのログが記録されています。内容を確認します。


C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2Config.log



あるいは


C:\ProgramData\Amazon\EC2-Windows\Launch\Log\Ec2Launch.log


ただしユーザデータに書式ミスがありスクリプトと認識されなかった場合はログファイルにはエラーは出力されなかった。(実験結果)

(2)スクリプトの確認

正しくユーザデータのスクリプトが認識されているか、あるいはユーザデータからではなくコンソールから実行可能か確認します。
スクリプトはEC2インスタンス側の以下のフォルダに保存されています。


C:\Windows\Temp\UserScript.ps1




(3)AMI作成
今のところ管理コンソールからユーザデータを変更してスクリプトを実行させる方法は見つからなかった。
AMIを新規に作成して新しいインスタンスとして実行するなど。

(4)Sysprep
sysprep 実行後にスナップショットを取得しAMIを生成する。

ユーザデータでのIPアドレスの変更


ユーザデータ内ではホスト名を変更したりWindows AD にログインしたりは可能なようですが、原則としてIPアドレスへ変更できません。
例えば Powershell の New-NetIPAddressで変更すると AWS Management Console では起動時の接続チェックでエラーとなる。

ログファイル


参考まで、初回に正常にスクリプトが実行されるとEc2Config.log や Ec2Launch.log に以下のようなログが記録されている。


2018/05/25 03:39:55Z: Userdata execution begins
2018/05/25 03:39:56Z: Zero or more than one <persist> tag was not provided
2018/05/25 03:39:56Z: Unregistering the persist scheduled task
2018/05/25 03:40:05Z: Zero or more than one <runAsLocalSystem> tag was not provided
2018/05/25 03:40:05Z: Zero or more than one <script> tag was not provided
2018/05/25 03:40:05Z: Zero or more than one <powershellArguments> tag was not provided
2018/05/25 03:40:05Z: <powershell> tag was provided.. running powershell content
2018/05/25 03:42:43Z: Userdata: is currently executing. To end it kill the process with id: 1564
2018/05/25 04:16:34Z: Userdata execution begins
2018/05/25 04:16:34Z: Failed to get metadata: The result from http://169.254.169.254/latest/user-data was empty
2018/05/25 04:16:37Z: Unable to execute userdata: Userdata was not provided
2018/05/25 04:16:37Z: Userdata execution done



【超重要】本ページは2019/02/16に記載されました。情報が古くなっている可能性があります。




[ 一覧に戻る]


【注意事項】本ページの内容は個人的に調査した結果がであり内容が正しいことは保証されません。
またAWSサービスは常に改良、アップデートされており本ページの内容が古く誤った内容になる可能性もあります。変更になっても本ページが正しく更新されるとは限りません。
あくまでも参考程度でご覧ください。内容により発生したいかなる時間的損害、金銭的損害、その他の損害に関しても何人も保証しません。