[アップデート] EC2Launch v2がリリースされました

2020.07.06

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

しばたです。
Windows Server 2016以降のEC2インスタンスの初期設定を行うツールであるEC2LaunchにメジャーバージョンアップとなるEC2Launch v2が登場しました。

AWSからの案内は以下になります。

EC2Launchの登場とEC2Launch v2に至るまでのはなし

従来EC2 Windows Serverの初期設定を行うツールとしてはEC2Configが提供されており、これは.NET Framework製のWindowsサービスとして実装されていました。
Windows Server 2016から初期設定を行うツールがPowerShellモジュールのEC2Launchに切り替わり今に至っています。

この経緯についてはユーザーガイド

.NET Framework から .NET Core への変更に対応するため、EC2Config サービスは Windows Server 2016 AMI では廃止され、EC2Launch に置き換えられました。EC2Launch は、EC2Config サービスが実行する作業の多くを実行する Windows PowerShell スクリプトのバンドルです。

と記載されている様に.NET Coreの登場を見据えての変更でした。

.NET Core 1.0がリリースされたのが2016年6月末、Windows Server 2016がリリースされたのが2016年9月末であり、当時は.NET Coreは単純に.NET Frameworkのサブセットとして提供されており、GUI関連等のプラットフォーム固有の機能は除外されていてそのサポート方針も見えない状況でした。
そのため.NET FrameworkアプリケーションからPowerShellモジュールへの変更は当時としては妥当な判断だったと思います。

そして時を経て2020年現在、.NET Coreは今年11月リリース予定の.NET 5で.NET Frameworkとの統合を図り、従来の.NET FrameworkはVer.4.8で最終リリースになるというロードマップが公開されている状況です。

今日に至るまでの状況の変化を踏まえてEC2Launch v2で再度ツールの見直しが図られた形となっています。

EC2Launch v2の実装

EC2Launch v2の機能に触れる前に軽く実装について触れておきます。

.NET Frameworkから.NET Coreへの変化がある中でEC2Launchが誕生した経緯があったため、私としてはEC2Launch v2はEC2Configを.NET Core化させていくのかと予想していたのですが、実際に調べてみるとEC2Launch v2本体はGo言語によるWindowsサービスとして実装されており、設定画面のGUIが.NET FrameworkのWPFで実装される形になっていました。

私としては予想外でしたが、SSM AgentなどのいくつかのAgentプロセスはGo言語で実装されておりAWSの方針としてはこちらの方が真っ当なんだろうなと思います。

サポート対象OS

EC2Launch v2のサポート対象OSは

  • Windows Server 2008
  • Windows Server 2008 R2
  • Windows Server 2012
  • Windows Server 2012 R2
  • Windows Server 2016
  • Windows Server 2019 (LTSC and SAC)

となっており、従来EC2Configが対象とするOS(およびMicrosoftのサポートが切れているOS)も含まれています。

前節の内容も踏まえて、EC2Launch v2は単純なバージョンアップではなく、EC2Config、EC2Launch v1を統合した新しいツールを目指していることが見て取れます。

EC2Launch v2の主な機能

EC2Launch v2は機能的にはEC2Configの機能を踏襲+拡張したものとなっており、EC2Config→EC2Launch v1への変更時にサポートしきれなかった機能を復活させている形となっています。
新機能としては、

  • 設定ファイルがXMLファイルからYAMLファイルに変更
  • Administratorユーザー名の変更機能が追加
  • YAMLファイルに初期処理(Local user data)を記述可能になった
  • 壁紙の画像ファイルを任意指定可能になった

などが増えています。
これらの詳細については別途試していこうと思います。

EC2Config、EC2Launch v1とEC2Launch v2の違い

EC2Config、EC2Launch v1とEC2Launch v2の違いについてはドキュメントによると以下の通りとなっています。

Windows Server EC2インスタンスを別サブネットに移行する際に注意すべきこと、の解消

ちなみに、以前書いたこちらの記事についてですが、EC2Launch v2は実装がWindowsサービスに戻ったことによりインスタンスメタデータに対するルート変更のタイミングもEC2Configと同様にアクティブルートを都度更新する形に戻っています。
このためEC2Launch v1で起きていたサブネット移動時の問題も解消されています。

インストール方法および移行方法

EC2Launch v2を新規にインストールする際の手順はこちらのドキュメントに記載されています。
64Bit版および32Bit版のMSIインストーラーが提供されているますのでそれをインストールする形になっています。

また、既存のEC2インスタンス(EC2Launch v1およびEC2Configがインストールされている環境)からの移行については以下のページで専用の移行スクリプトがZipファイルに固められて提供されています。

インストール手順やその詳細はZipファイルの中にありますのでそちらをご覧ください。
ちなみにEC2ConfigからEC2Launch v2に移行する場合はSSM Agentを最新バージョンに再インストールしますのでSSM Agentのバージョンが上がると困る場合は気をつけてください。

試してみた

現時点ではまだプレビュー扱いですが、EC2Launch v2がプリインストールされたAMIイメージがEC2LaunchV2_Preview-Windows_Server-ほげほげという名前で提供されていますので今回はこのイメージを試してみることにします。
(※このイメージは名前の通りまだ本番環境での利用はサポートされてませんのでご注意ください)

本日時点の東京リージョンでは以下のイメージが利用可能となっています。

# AWS Tools for PowerShellで検索
$Filter = (
    @{ Name = 'platform'; Values = 'windows'},
    @{ Name = 'name'; Values = 'EC2LaunchV2_Preview-Windows_Server-*'}
)
Get-EC2Image -Owner amazon -Filter $Filter |
    Sort-Object CreationDate -Descending | Select-Object ImageId, Name, Description

本記事ではEC2LaunchV2_Preview-Windows_Server-2019-English-Full-Base-2020.06.30 (ami-0fa7db4fe0ca5fe07)を使います。
このAMIからEC2インスタンスを作成しログインすると以下の様な感じです。

壁紙に表示される内容はこれまでとだいたい同じですが、「Total Memory」「Netork」に関する情報が増えているのと描画のフォントが微妙に異なっています。
(なお、壁紙の背景が設定可能になったためWindows Server 2012 R2以前のOSでもこの壁紙が表示されてしまいます。他OS標準の壁紙を別OSに持って行くのはあまり行儀が良くないですね...)

EC2Launch v2の実体はC:\Program Files\Amazon\EC2Launch\EC2Launch.exeになり、こいつがWindowsサービスとして動作しています。

EC2Configとは異なりサービス起動後必要なタスクを実行すると停止する様です。

次に設定画面のGUIはこんな感じです。

EC2Configの画面に近いですが「DNS suffix」や「Wallpaper」といった新しいタブが増えています。
ちなみに設定ファイルの実体はC:\ProgramData\Amazon\EC2Launch\配下にあります。

EC2Configとは異なりよりWindowsの作法に合わせた形に更新されています。
最後にEC2のシステムログもご覧の通りこれまで通り取得可能です。

終わりに

ざっくりですがまずはこんな感じです。
機能の詳細については引き続きブログを書いてきますのでよろしくお願いします。