EC2Launch を使用した Windows インスタンスの設定
EC2Launch は Windows Server 2016 以降の AMI で EC2Config サービスを置き換える Windows PowerShell スクリプトのセットです。
コンテンツ
EC2Launch タスク
EC2Launch は最初のインスタンスの起動中に、デフォルトで以下のタスクを実行します。
-
インスタンスに関する情報をレンダリングする新しい壁紙を設定します
-
コンピュータ名を設定します。
-
Amazon EC2 コンソールにインスタンス情報を送信します。
-
EC2 コンソールに RDP 証明書のサムプリントを送信します。
-
管理者アカウントに、ランダムなパスワードを設定します。
-
DNS サフィックスを追加します。
-
オペレーティングシステムパーティションを動的に拡張して、未使用の領域が含まれるようにします。
-
ユーザーデータを実行します (指定された場合)。ユーザーデータを指定する方法については、「インスタンスユーザーデータの使用」を参照してください。
-
メタデータサービスと KMS サーバーに到達するために永続的な静的ルートを設定します。
重要
このインスタンスからカスタム AMI を作成している場合、これらのルートは OS 設定の一部としてキャプチャされます。また、AMI から起動された新しいインスタンスは、サブネットの位置に関係なく、同じルートを保持します。ルートを更新するには、「カスタム AMI の起動時に Server 2016 以降のメタデータ/KMS ルートを更新する」を参照してください。
以下のタスクは、EC2Config サービスとの下位互換性を維持するために役立ちます。また、起動中にこれらのタスクを実行するように EC2Launch を設定することもできます。
-
セカンダリ EBS ボリュームを初期化します。
-
EC2 コンソールのログに Windows イベントログを送信します。
-
Windows の使用準備ができている旨のメッセージを EC2 コンソールに送信します。
Windows Server 2019 の詳細については、Microsoft.com にある「Compare Features in Windows Server Versions (Windows Server 各バージョンの機能の比較)」を参照してください。
EC2Launch のバージョンを確認します。
インストールされている EC2Launch のバージョンを確認するには、次の Windows PowerShell コマンドを使用します。
PS C:\>
Test-ModuleManifest -Path "C:\ProgramData\Amazon\EC2-Windows\Launch\Module\Ec2Launch.psd1" | Select Version
EC2Launch のディレクトリ構造
EC2Launch はデフォルトでは、Windows Server 2016 以降の AMI のルートディレクトリ C:\ProgramData\Amazon\EC2-Windows\Launch
にインストールされます。
注記
Windows では、デフォルトで C:\ProgramData
以下のファイルとフォルダは非表示になります。EC2Launch のディレクトリとファイルを表示するには、Windows エクスプローラーにパスを入力するか、フォルダのプロパティを変更して、非表示のファイルとフォルダを表示する必要があります。
Launch
ディレクトリには以下のサブディレクトリがあります。
-
Scripts
— EC2Launch を構成する PowerShell スクリプトが格納されます。 -
Module
— Amazon EC2 関連するスクリプトを構築するためのモジュールが格納されます。 -
Config
— カスタマイズ可能なスクリプト設定ファイルが格納されます。 -
Sysprep
— Sysprep リソースが格納されます。 -
Settings
— Sysprep グラフィカルユーザーインターフェイスのアプリケーションが格納されます。 -
Logs
— スクリプトによって生成されたログファイルが格納されます。
EC2Launch の設定
インスタンスが最初に初期化された後で、EC2Launch を再実行し、別の起動タスクを実行するよう EC2Launch を設定できます。
タスク
初期化タスクの設定
次の初期化タスクを有効または無効にするには、LaunchConfig.json
ファイルで設定を指定します。
-
コンピュータ名を設定します。
-
新しい壁紙を設定します。
-
DNS サフィックス一覧を追加します。
-
ブートボリュームサイズを拡大します。
-
管理者パスワードを設定します。
初期設定を行うには
-
設定するインスタンスで、
C:\ProgramData\Amazon\EC2-Windows\Launch\Config\LaunchConfig.json
ファイルをテキストエディタで開きます。 -
必要に応じて次の設定を更新し、変更を保存します。
adminPassword
がadminPasswordtype
である場合のみ、Specify
にパスワードを入力します。{ "setComputerName":
false
, "setWallpaper":true
, "addDnsSuffixList":true
, "extendBootVolumeSize":true
, "handleUserData":true
, "adminPasswordType": "Random | Specify | DoNothing
", "adminPassword": "password that adheres to your security policy (optional)
" }パスワードの種類は次のとおりです。
Random
-
EC2Launch は、ユーザーのキーを使用してパスワードを生成し、暗号化します。この設定はインスタンス起動後に無効になるため、インスタンスを再起動したり、停止して起動した場合でもパスワードは保持されます。
Specify
-
EC2Launch は、
adminPassword
で指定したパスワードを使用します。指定したパスワードがシステム要件を満たさない場合は、代わりに EC2Launch によってランダムなパスワードが生成されます。このパスワードはクリアテキストとしてLaunchConfig.json
に保存され、Sysprep で管理者パスワードが設定されると削除されます。EC2Launch は、ユーザーのキーを使用してパスワードを暗号化します。 DoNothing
-
EC2Launch は、
unattend.xml
ファイルで指定したパスワードを使用します。unattend.xml
でパスワードを指定しない場合、管理者アカウントは無効になります。
-
Windows PowerShell で次のコマンドを実行し、Windows のスケジュールされたタスクとしてスクリプトの実行をスケジュールします。スクリプトは次回の起動時に 1 回のみ実行され、以降、これらのタスクは再実行されなくなります。
PS C:\>
C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -Schedule
EC2Launch が起動ごとに実行されるようスケジュールします
最初の起動だけでなく、起動ごとに実行されるように EC2Launch をスケジュールすることができます。
EC2Launch を起動ごとに実行するには。
-
Windows PowerShell を開き、次のコマンドを実行します。
PS C:\>
C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -SchedulePerBoot -
または、次のコマンドを使用して、実行可能ファイルを実行します。
PS C:\>
C:\ProgramData\Amazon\EC2-Windows\Launch\Settings\Ec2LaunchSettings.exe次に、
Run EC2Launch on every boot
を選択します。You can specify that your EC2 インスタンスをShutdown without Sysprep
またはShutdown with Sysprep
に指定できます。
注記
起動ごとに EC2Launch が実行されるように設定すると、次回 EC2Launch が実行されたときに LaunchConfig.json
に次の変更が加えられます。
-
AdminPasswordType
は、起動時にパスワードが変更されないようにDoNothing
に設定されます。 -
ユーザーデータの
persist
がtrue
に設定されていない限り、HandleUserData
はfalse
に設定されます。ユーザーデータのスクリプトの詳細については、『Amazon EC2 ユーザーガイド』の「ユーザーデータスクリプト」を参照してください。
同様に、次の起動時にパスワードをリセットしない場合は、再起動する前に AdminPasswordType
を DoNothing
に設定する必要があります。
ドライブの初期化とドライブ文字のマッピング
ドライブ文字を EC2 インスタンスのボリュームにマッピングするには、DriveLetterMappingConfig.json
ファイルで設定を指定します。スクリプトは、ドライブがすでに初期化およびパーティション化されていない場合、このオペレーションを実行します。
ドライブ文字をボリュームにマッピングするには
-
テキストエディタで
C:\ProgramData\Amazon\EC2-Windows\Launch\Config\DriveLetterMappingConfig.json
ファイルを開きます。 -
次のボリューム設定を指定し、変更を保存します。
{ "driveLetterMapping": [ { "volumeName": "
sample volume
", "driveLetter": "H
" } ] } -
Windows PowerShell を開き、次のコマンドを使用して、ディスクを初期化する EC2Launch スクリプトを実行します。
PS C:\>
C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeDisks.ps1インスタンスが起動するたびにディスクを初期化するには、
-Schedule
フラグを次のように追加します。PS C:\>
C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeDisks.ps1 -Schedule
EC2 コンソールへの Windows イベントログの送信
EC2 コンソールログに Windows イベントログを送信するには、EventLogConfig.json
ファイルで設定を指定します。
Windows イベントログを送信するよう設定を指定するには
-
インスタンスで、
C:\ProgramData\Amazon\EC2-Windows\Launch\Config\EventLogConfig.json
ファイルをテキストエディタで開きます。 -
次のログ設定を行い、変更を保存します。
{ "events": [ { "logName": "
System
", "source": "An event source (optional)
", "level": "Error | Warning | Information
", "numEntries":3
} ] } -
Windows PowerShell で次のコマンドを実行し、Windows のスケジュールされたタスクとして、インスタンスが起動されるたびにスクリプトの実行がスケジュールされるようにします。
PS C:\>
C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\SendEventLogs.ps1 -Scheduleログが EC2 コンソールログに表示されるまでには、3 分以上かかる場合があります。
正常に起動した後の Windows の準備が完了した旨のメッセージの送信
EC2Config サービスは、起動するたびに、Windows の準備が完了した旨のメッセージを EC2 コンソールに送信しました。EC2Launch は最初の起動後に、このメッセージを送信します。EC2Config サービスとの下位互換性のため、毎回の起動後にこのメッセージを送信するよう EC2Launch をスケジュールできます。インスタンスで Windows PowerShell を開き、次のコマンドを実行します。システムは、Windows のスケジュールされたタスクとして実行するようスクリプトをスケジュールします。
PS C:\>
C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\SendWindowsIsReady.ps1 -Schedule
Sysprep と EC2Launch の使用
Sysprep は Windows Server 2016 以降のカスタマイズされたインストールの複製プロセスを簡素化します。EC2Launch は AMI でイメージ準備プロセスを自動化し、保護する
Sysprep 用のデフォルトの応答ファイルとバッチファイルを提供します。これらのファイルの変更はオプションです。デフォルトでは、これらのファイルは C:\ProgramData\Amazon\EC2-Windows\Launch\Sysprep
ディレクトリにあります。
重要
Sysprep を使用してインスタンスのバックアップを作成しないでください。Sysprep はシステム固有の情報を削除します。この情報を削除すると、インスタンスバックアップで意図しない結果が生じる可能性があります。
Sysprep の EC2Launch 応答ファイルとバッチファイルには以下のものが含まれます。
Unattend.xml
-
これがデフォルトの応答ファイルです。
SysprepInstance.ps1
を実行するか、ユーザーインターフェイスで ShutdownWithSysprep を選択すると、このファイルから設定が読み取られます。 BeforeSysprep.cmd
-
このバッチファイルをカスタマイズし、EC2Launch が Sysprep を実行する前にコマンドを実行します。
SysprepSpecialize.cmd
-
このバッチファイルをカスタマイズして、Sysprep の特定化ステップ中にコマンドを実行します。
Sysprep と EC2Launch の実行
Windows Server 2016 以降の完全インストール (デスクトップ体験を含む) では、EC2Launch を使用して Sysprep を手動で実行するか、[EC2 Launch Settings (EC2 起動設定)] アプリケーションを使用できます。
EC2Launch Settings アプリケーションを使用して Sysprep を実行するには
-
Amazon EC2 コンソールで、Windows Server 2016 以降の AMI を見つけるか作成します。
-
AMI から Windows インスタンスを起動します。
-
Windows インスタンスに接続し、カスタマイズします。
-
[EC2LaunchSettings] アプリケーションを検索して実行します。このアプリケーションは、デフォルトでは
C:\ProgramData\Amazon\EC2-Windows\Launch\Settings
ディレクトリにあります。 -
必要に応じて、オプションを選択または選択解除します。これらの設定は
LaunchConfig.json
ファイルに保存されます。 -
[Administrator Password] で、以下のいずれかを行います。
-
[Random] を選択します。EC2Launch は、ユーザーのキーを使用してパスワードを生成し、暗号化します。この設定はインスタンス起動後に無効になるため、インスタンスを再起動したり、停止して起動した場合でもパスワードは保持されます。
-
[Specify] を選択し、システム要件を満たすパスワードを入力します。このパスワードはクリアテキストとして
LaunchConfig.json
に保存され、Sysprep で管理者パスワードが設定されると削除されます。ここでシャットダウンした場合、パスワードはすぐに設定されます。EC2Launch は、ユーザーのキーを使用してパスワードを暗号化します。 -
[DoNothing] を選択して、
unattend.xml
ファイルでパスワードを指定します。unattend.xml
でパスワードを指定しない場合、管理者アカウントは無効になります。
-
-
[Shutdown with Sysprep (Sysprep を使用してシャットダウン)] を選択します。
EC2Launch を使用して手動で Sysprep を実行するには
-
Amazon EC2 コンソールで、複製する Windows Server 2016 以降の Datacenter エディション AMI を見つけるか作成します。
-
Windows インスタンスを起動して接続します。
-
インスタンスをカスタマイズします。
-
LaunchConfig.json
ファイルで設定を指定します。デフォルトでは、このファイルはC:\ProgramData\Amazon\EC2-Windows\Launch\Config
ディレクトリにあります。adminPasswordType
で、次のいずれかの値を指定します。Random
-
EC2Launch は、ユーザーのキーを使用してパスワードを生成し、暗号化します。この設定はインスタンス起動後に無効になるため、インスタンスを再起動したり、停止して起動した場合でもパスワードは保持されます。
Specify
-
EC2Launch は、
adminPassword
で指定したパスワードを使用します。指定したパスワードがシステム要件を満たさない場合は、代わりに EC2Launch によってランダムなパスワードが生成されます。このパスワードはクリアテキストとしてLaunchConfig.json
に保存され、Sysprep で管理者パスワードが設定されると削除されます。EC2Launch は、ユーザーのキーを使用してパスワードを暗号化します。 DoNothing
-
EC2Launch は、
unattend.xml
ファイルで指定したパスワードを使用します。unattend.xml
でパスワードを指定しない場合、管理者アカウントは無効になります。
-
(オプション) 必要に応じて、
unattend.xml
およびその他の設定ファイルで設定を指定します。手動のインストールを計画している場合は、これらのファイルに変更を加える必要はありません。デフォルトでは、このファイルはC:\ProgramData\Amazon\EC2-Windows\Launch\Sysprep
ディレクトリにあります。 -
Windows PowerShell で、
./InitializeInstance.ps1 -Schedule
を実行します。デフォルトでは、このスクリプトはC:\ProgramData\Amazon\EC2-Windows\Launch\Scripts
ディレクトリにあります。このスクリプトは、次の起動中に初期化するようインスタンスをスケジュールします。次のステップでSysprepInstance.ps1
スクリプトを実行する前に、このスクリプトを実行する必要があります。 -
Windows PowerShell で、
./SysprepInstance.ps1
を実行します。デフォルトでは、このスクリプトはC:\ProgramData\Amazon\EC2-Windows\Launch\Scripts
ディレクトリにあります。
ユーザーは自動的にログオフさせられ、インスタンスがシャットダウンします。Amazon EC2 コンソールの [Instances (インスタンス)] ページを見ると、インスタンスの状態が running
から stopping
に、そして stopped
へ変わるのがわかります。この状態になれば、インスタンスから AMI を安全に作成できます。
カスタム AMI の起動時に Server 2016 以降のメタデータ/KMS ルートを更新する
カスタム AMI の起動時に Server 2016 以降のメタデータ/KMS ルートを更新するには
-
EC2LaunchSettings GUI (C:\ProgramData\Amazon\EC2-Windows\Launch\Settings\Ec2LaunchSettings.exe) を使用して Sysprep をシャットダウンします。
-
または、AMI を作成する前に Sysprep をシャットダウンします。これにより、次回の起動時に実行される EC2 Launch の初期化タスクが設定され、起動先のサブネットに基づくルートが設定されます。
-
または、PowerShell から AMI を作成する前に、EC2 Launch の初期化タスクを手動で再スケジュールします。
重要
タスクを再スケジュールする前に、デフォルトのパスワードリセット動作を書き留めてください。