[アップデート] AWS Systems Managerの高速セットアップでEC2起動エージェントの自動更新がサポートされました

2023.06.21

しばたです。

先日AWSから以下のアナウンスがあり、AWS Systems Manager(以後SSM)の高速セットアップでEC2インスタンスの各種起動エージェントプログラムの自動更新ができる様になったとのことです。

こちらアナウンスだけだと少しわかりにくいので本記事で解説していきます。

どういうことか?

SSMの高速セットアップのうち「Host Management」に新しいオプションが増え、EC2インスタンスの各種起動エージェントを30日毎に自動更新する設定が追加可能になりました。
ここで言う「起動エージェント」は各OS毎にある

  • EC2Launch v2 : Windows Server 2022
  • EC2Launch v1 : Windows Server 2016 - Windows Server 2019
  • EC2Config : Windows Server 2012 R2以前
  • cloud-init : Linuxディストリビューション
    • ただしSSMで非サポートのディストリビューションおよびAmazon Linux 2023はまだ対象外
  • EC2 macOS Init : macOS

を指します。

具体的な実装としては、高速セットアップによりSSMドキュメントAWSEC2-UpdateLaunchAgentを実行する関連付け(ステートマネージャー)が作成され30日毎に処理が実行されるスケジュールが組まれます。

また、このほかに高速セットアップのDistributorによるEC2Launch v2の自動更新にも対応したとのことです。
こちらについては弊社園部の記事をご覧ください。

試してみた

ここからは実際に試してみるのが手っ取り早いでしょう。
私の検証用AWSアカウントの東京リージョンで試していきます。

SSMのマネジメントコンソールから「高速セットアップ」を選び、設定タイプから「Host Management」の作成を行います。

すると設定オプションに「Amazon EC2 Launch Agent」の欄が増えていることが見て取ます。

今回は下図の様にインベントリ収集関連のオプションを除外した上で「Update the EC2 launch agent once every 30 days.」のチェックを付けて作成を行いました。

その他設定は環境に応じてとなりますが、今回は特定のタグにマッチするインスタンスを対象としました。

(タグベースでインスタンスを選んでますが、本記事ではこれ以上この設定に関連する内容はありません)

今回の場合4つの関連付けが作成され、その内訳は以下の様になりました。

このうち「AWS-QuickSetup-SSMHostMgmt-UpdateEC2LaunchAgent」が新機能のものです。
関連付けの詳細は以下の様にAWSEC2-UpdateLaunchAgentドキュメントを実行する様になっています。

これで30日おきにこのドキュメントが実行され各種起動エージェントが更新されます。

AWSEC2-UpdateLaunchAgent ドキュメント

流石に30日待つことはできませんので、今回はRun Commandで直接AWSEC2-UpdateLaunchAgentドキュメントを実行しどの様な挙動を示すのか解説していきます。

ドキュメント概要

はじめにこのドキュメントは3つのステップから成り各OS毎の処理を実行します。

  • ステップ1 (Windows) : UpdateEC2WindowsLaunchAgents
    • EC2Launch v2, EC2Launch v1, EC2Configの更新を行うPowerShellスクリプト
  • ステップ2 (Linux) : UpdateEC2CloudInit
    • cloud-initの更新を行うシェルスクリプト(Shebang指定無し)
  • ステップ3 (macOS) : UpdateEC2MacOSInit
    • EC2 macOS Initの更新を行うシェルスクリプト(Shebang指定無し)

ドキュメントの引数は無く、OSにインストールされている各エージェントのバージョンより新しいバージョンが存在すれば常に最新バージョンに更新する様になっています。
特定バージョンにアップデートするといったことはできません。

Windows環境ではEC2Launch v2→EC2Launch v1→EC2Configの順でインストールされているエージェントを探索し最初に見つけたエージェントのバージョンを更新します。
「EC2Launch v1からv2へのアップグレード」といった事はしません。

各エージェントの詳細については以下のドキュメントを参照してください。

Windows Server 2022 (EC2Launch v2) の場合

ここからは各OS毎でRun Commandした結果を共有します。

はじめにWindows Server 2022(EC2Launch v2)のインスタンスに対してAWSEC2-UpdateLaunchAgentドキュメントを実行します。

AMIは少し前のami-0eef1af2b403b66bc(Windows_Server-2022-Japanese-Full-Base-2023.03.15)を選んでおり、今回はVer.2.0.1303.0に更新されました。

出力メッセージはこんな感じです。

Telemetry is enabled.

Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName

------- ------ ----- ----- ------ -- -- -----------

36 4 516 2320 0.02 3360 0 msiexec

EC2Launch v2 was updated to version '2.0.1303.0'.

The latest EC2Launch v2 version is '2.0.1303.0'.

ちなみにEC2Launch v2はSSM Distributerに登録されているためAWS-ConfigureAWSPackageドキュメントからも更新することができるのですが、このドキュメントでは愚直にMSIインストーラーをダウンロードしてサイレントインストールする実装となっています。

Windows Server 2019 (EC2Launch v1)

次にWindows Server 2019(EC2Launch v1)のインスタンスに対してAWSEC2-UpdateLaunchAgentドキュメントを実行しました。
AMIは少し前のami-0b5249d4357dd1dba(Windows_Server-2019-Japanese-Full-Base-2023.03.15)を選んだのですが、残念ながら今回はすでに最新バージョンでした。

# 日本語OSのため一部文字化けしているが実行結果自体に問題は無い
�f�B���N�g��: C:\ProgramData\Amazon\AWSUpdateWindowsInstance\2ccfffae-d28f-41af-b1d8-db9946e0d570\Install-AwsUwiEC2

Launch

Mode LastWriteTime Length Name

---- ------------- ------ ----

d----- 2023/06/21 10:28 temp

Update not required. EC2Launch v1 is already up-to-date with version '1.3.2004052'.

EC2Launch v1の更新については以前にこんな記事を書いているのですが、このドキュメントでは最新バージョンのZipファイルを一度ダウンロードしたうえでローカル環境にインストール済みのバージョンと比較してアップデートの要否を判断しています。
(私個人としてはわざわざダウンロードしたくないからスクレイピングを選んだのですが...公式が思った以上に愚直な手段を使ってきて驚いています)

Windows Server 2012 R2 (EC2Config)

Windows Server 2012 R2(EC2Config)のインスタンスに対してAWSEC2-UpdateLaunchAgentドキュメントを実行しました。
AMIは少し前のami-087cab4883c7ce145(Windows_Server-2012-R2_RTM-Japanese-64Bit-Base-2023.03.15)を選んだのですが、こちらも今回はすでに最新バージョンでした。

EC2Config is up-to-date with version '4.9.5288.0'.

EC2ConfigもEC2Launch v1同様に最新バージョンのインストーラーを都度ダウンロードしてバージョンチェック+サイレントインストールしています。

Amazon Linux (cloud-init)

Amazon Linux 2(cloud-init)のインスタンスに対してAWSEC2-UpdateLaunchAgentドキュメントを実行しました。
AMIは今年年初のami-0ad64728720227ff8(amzn2-ami-hvm-2.0.20230119.1-x86_64-gp2 Amazon Linux 2 AMI 2.0.20230119.1 x86_64 HVM gp2)を選び、Ver.19.3-46.amzn2.0.1に更新されました。

Running yum update.

Loaded plugins: extras_suggestions, langpacks, priorities, update-motd

Resolving Dependencies

--> Running transaction check

---> Package cloud-init.noarch 0:19.3-46.amzn2 will be updated

---> Package cloud-init.noarch 0:19.3-46.amzn2.0.1 will be an update

--> Finished Dependency Resolution

Dependencies Resolved

================================================================================

Package Arch Version Repository Size

================================================================================

Updating:

cloud-init noarch 19.3-46.amzn2.0.1 amzn2-core 927 k

Transaction Summary

================================================================================

Upgrade 1 Package

Total download size: 927 k

Downloading packages:

Delta RPMs disabled because /usr/bin/applydeltarpm not installed.

Running transaction check

Running transaction test

Transaction test succeeded

Running transaction

Updating : cloud-init-19.3-46.amzn2.0.1.noarch 1/2

Cleanup : cloud-init-19.3-46.amzn2.noarch 2/2

Verifying : cloud-init-19.3-46.amzn2.0.1.noarch 1/2

Verifying : cloud-init-19.3-46.amzn2.noarch 2/2

Updated:

cloud-init.noarch 0:19.3-46.amzn2.0.1

Complete!

内部実装としてはyum, apt-get, zypperのいずれかを使い更新する処理になっていました。
これらのパッケージマネージャが使えないディストリビューションでは処理が失敗するはずです。

macOS (EC2 macOS Init)

最後にmacOSについてですが、今回は良い環境が用意できなかったため試せませんでした。

内部実装としてはHomebrewを使いbrew upgrade ec2-macos-initコマンドで更新する処理になっていました。

最後に

以上となります。

機能のメインはAWSEC2-UpdateLaunchAgentドキュメントであり、高速セットアップに限らず様々な場面で使えると思いますのでぜひご活用ください。