InitializeInstance.ps1は何を実施しているのか?AWSでWindowsインスタンスタイプ変更

AWSで、例えばWindowsのインスタンスタイプを変更した時に、実施して欲しいと登場したりする、InitializeInstance.ps1スクリプトは、一体何を実施しているのでしょうか?

参考:インスタンスタイプを変更する - Amazon Elastic Compute Cloud

以前は、インスタンスタイプを変更する時にも、 InitializeInstance.ps1スクリプトを実施して欲しいという案内はありませんでした。
最近は、Windows Server 2016以降のWindowsインスタンスでは InitializeInstance.ps1スクリプトを実行して欲しいとあります。

結論、 InitializeInstance.ps1スクリプト実施してもSysprep等のOS初期化処理は行われない

最も心配だったのは、インスタンスタイプを変更したらSysprep等で元のOSイメージから変更が入ってしまう事でした。

0. Wait for sysprep: to ensure that sysprep process is finished.

# Task must be executed after sysprep is complete.
# WMI object seems to be missing during sysprep.
Wait-Sysprep

上記部分について、「C:\ProgramData\Amazon\EC2-Windows\Launch\Module\Scripts\Wait-Sysprep」を確認すると、Sysprep が実行されたかどうかを取得しているスクリプトで、スクリプト内で新たに Sysprep を実行するような動作はないものでした。
よって、 InitializeInstance.ps1にSysprepといったOSイメージを初期化し変えてしまうようなものは含まれていないことがわかりました。

※一度起動した Windows インスタンスでは、「C:\ProgramData\Amazon\EC2-Windows\Launch\Config\LaunchConfig.json」にて、「adminPasswordType」を「Specify」に指定しているか、明示的にSysprepを実行しない限り。

では、何故 InitializeInstance.ps1を実行するのか?

AWSに問い合わせたところ、

  • InitializeInstance.ps1 を実行せずにインスタンスタイプを変更していただく事も可能
  • ただし、Windows Server 2016 を使った環境において、InitializeInstance.ps1 を実行しないインスタンスタイプの変更によって、ネットワークに関する問題が発生している事をご報告あり

と言うことで、AWSとしてはWindows Server 2016以降では InitializeInstance.ps1 の実施を推奨しているとのことでした。

InitializeInstance.ps1の中身

0. Wait for sysprep: to ensure that sysprep process is finished.
1. Add routes: to connect to instance metadata service and KMS service.
2. Wait for metadata: to ensure that metadata is available to retrieve.
3. Rename computer: to rename computer based on instance ip address.
4. Display instance info: to inform user about your instance/AMI.
5. Extend boot volume: to extend boot volume with unallocated spaces.
6. Set password: to set password, so you can get password from console
7. Windows is Ready: to display "Message: Windows is Ready to use" to console.
8. Execute userdata: to execute userdata retrieved from metadata
9. Register disabled scheduledTask: to keep the script as scheduledTask for future use.

0は、前述に説明したとおり Sysprep が実行されたかどうかを取得しているスクリプト。
1,2 は、EC2 を利用する上で必要なメタデータサービスへのアクセスを可能にするためのルート情報の追加に関する項目。
3 は、既にコンピュータ名を変更している場合はコンピュータ名は変更されません。(※コンピュータ名を変更していない場合は注意)
6 は、パスワードは DoNothing に設定していただく事で変更されません。
そのほかの項目については、インスタンスの設定情報(インスタンスタイプなど)の更新や、ブートボリュームサイズを変更した際の動作、メッセージの表示、ユーザーデータ(起動時に設定できるユーザーデータスクリプト)の実行などになり、これらは、必要な変更の為実行されるが、OS の設定に大きく影響することは無いものです。

実際試してみましたが、コンピュータ名、プライベート IP アドレス、パスワードに関する変更の有無はありませんでした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です