EC2Launch v2への移行スクリプトを試してみた

2020.07.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

しばたです。
7月7日は弊社の創立記念日ということで勢いに任せて本日二本目のブログを書いております。

既存のEC2 Windows Server環境ではEC2ConfigおよびEC2Launch v1が提供されいますが、この環境でEC2Launch v2を利用するには専用の移行スクリプトを実行するか、またはSSM Run Command(AWSEC2Launch-RunMigration)を使用する必要があります。

本記事ではこの移行スクリプトの使い方を解説します。

EC2Launch v2へ移行すべきケース

そもそも論になってしまうのですが、EC2ConfigおよびEC2LaunchはEC2 Windows Serverの初期設定のためのツールです。
初期設定を終え実環境で運用されているEC2インスタンスにおいては率直に言ってEC2Launch v2にアップグレードするメリットは少ないでしょう。

前の記事で紹介しましたが、EC2Launch v2ではユーザー独自のプログラムやスクリプトを起動時の処理として容易に仕込めますので、この機能を使いたい場合はアップグレードするメリットがあると思います。

また、現時点ではEC2Launch v2がプリインストールされているAMIイメージが正式に提供されていませんので(英語版Windows向けプレビューイメージのみの提供)、たとえば日本語Windows環境で新規にEC2Launch v2を試したい場合は必然的にアップグレードする必要があります。

試してみた

本記事では、「日本語Windows Server環境でEC2Launch v2を試すため」というシナリオでEC2ConfigおよびEC2Launch v1からEC2Launch v2に移行するシナリオを試していきます。
処理の解説のために移行スクリプトを手動で実行する手順をメインに紹介し、補足としてSSM Run Commandでの手順を紹介します。

移行スクリプトについて

移行スクリプトは以下のS3バケットにZipファイルに固められて配布されています。

このZipファイルを解凍すると、README.mdと移行スクリプトであるInstall.ps1などが展開されます。

EC2ConfigからEC2Launch v2への移行、EC2Launch v1からEC2Launch v2への移行両方ともこのスクリプトで可能となっており、手順としては

cd "スクリプトのあるフォルダ"
./Install.ps1

で実行できます。
Dry Runにも対応しており、

cd "スクリプトのあるフォルダ"

# -DryRun パラメーターを付けて事前検証することも可能
./Install.ps1 -DryRun

とするとスクリプトの事前検証をすることができます。

EC2Launch v1からEC2Launch v2への移行

ここからは実際に移行スクリプトを試してみます。
最初は日本語Windows Server 2019環境でEC2Launch v1からEC2Launch v2への移行をしていきます。
使用したAMIは以下。(東京リージョン)

  • ami-06f39b98503ed7f4e (Windows_Server-2019-Japanese-Full-Base-2020.06.10)

移行手順

READMEによると移行スクリプトでは以下の手順を実行するそうです。

Migration process for EC2Launch v1
 
0. Back up EC2Launch v1 files in %ProgramData
1. Install EC2Launch v2
2. Copy EC2Launch v2 config file to data folder
3. Migrate EC2Launch v1 settings to EC2Launch v2
4. Remove EC2Launch v1 files
5. Deregister EC2Launch v1 Scheduled task/User data Scheduled task

基本的にはEC2Launch v1をバックアップしてからEC2Launch v2の展開を行う形となっています。
EC2Launch v1はPowerShellモジュールとして提供されていることもあり、手順としてはシンプルですね。

移行スクリプトの実行

今回はC:\Temp\EC2LaunchMigrationToolにスクリプトを展開し実行してみました。
結果としては下図の様に各プロセスの内容がコンソールに出力されます。

エラー無くスクリプトが完了すれば移行完了です。

EC2ConfigからEC2Launch v2への移行

続けて日本語Windows Server 2012 R2環境でEC2ConfigからEC2Launch v2への移行をしていきます。
使用したAMIは以下。(東京リージョン)

  • ami-037662ea98ebcd669 (Windows_Server-2012-R2_RTM-Japanese-64Bit-Base-2020.06.10)

移行手順

READMEによると移行スクリプトでは以下の手順を実行するそうです。

Migration process for EC2Config
 
0. Back up EC2Config files in %ProgramFiles and %ProgramData
1. Install EC2Launch v2
2. Copy EC2Launch v2 config file to data folder
3. Migrate EC2Config settings to EC2Launch v2
4. Uninstall SSMAgent
  Note: This will error out if you have a newer version of SSM Agent than MigrationTool,
    Specify -Force flag if you want to migrate anyway
5. Install stable version of SSMAgent
6. Uninstall EC2ConfigService
7. Remove EC2Config files

基本的にはEC2Configの設定をバックアップしてからEC2Launch v2の展開を行う形となりつつも、同時にSSM Agentを最新バージョンに更新する処理およびEC2Configサービスのアンインストール処理が含まれています。
Windowsサービスの切り替えが発生するためEC2Launch v1からの移行に比べると若干複雑になっています。

移行スクリプトの実行

今回はC:\Temp\EC2LaunchMigrationToolにスクリプトを展開し実行してみました。
結果としては下図の様に各プロセスの内容がコンソールに出力されます。

EC2Launch v1からの移行より手順や設定項目の移送が多いことが見て取れます。
こちらもエラー無くスクリプトが完了すれば移行完了です。

ちなみに、EC2Launch v2では壁紙の画像にEC2Launch v2に同梱されているものを使うため、再起動すると壁紙が以下の様に変わってしまいます。

Windows Server 2012 R2なのにWindows Server 2016以降の壁紙が使われる形となりちょっと違和感が出てしまいますね。
気になる人は移行と同時に壁紙フィアルC:\ProgramData\Amazon\EC2Launch\wallpaper\Ec2Wallpaper.jpgの内容を差し替えておくと良いでしょう。

AWSEC2Launch-RunMigrationの使用

最後にSSM Run Commandによる移行を試してみます。

移行のためのドキュメントAWSEC2Launch-RunMigrationも実装としてはこれまでのEC2LaunchMigrationTool.zipのスクリプトを自動実行しているだけですのでEC2ConfigからEC2Launch v2への移行、EC2Launch v1からEC2Launch v2への移行両方とも可能となっています。

今回は日本語Windows Server 2019のイメージ(ami-037662ea98ebcd669)をSSM Run Command実行可能にした状態で試していきます。
SSM Run Command実行可能にするまでのIAMロールの設定手順については割愛します。

また、このコマンドではS3からEC2LaunchMigrationTool.zipをダウンロードしますので、S3へのアクセス経路が確保されている環境で実施する必要があります。

Run Commandの実行

AWS Systems ManagerマネジメントコンソールからRun Commandを選択し実行ドキュメントにAWSEC2Launch-RunMigrationを選択してください。

選択できるパラメーターは強制実行のためのForceとDryRunのためのDry Runのみ選択可能となっています。
通常はデフォルト値のまま両方ともFalseで構いません。

あとは対象インスタンスを選んで実行するだけです。
エラー無く完了すれば成功です。

スクリプトを手動実行した時と同様のログが出力されます。(当然ですが...)

最後に

以上となります。
長々と解説しましたが手順自体は非常にシンプルですので機会があれば是非試してみてください。