AWS Tools for PowerShellのVersion 3系がいつの間にかサポート終了してました

2022.02.20

しばたです。

ちょっと確認したいことがありAWS CLIおよびAWS Tools for PowerShellの更新履歴を調査している際に以下のドキュメントを見つけました。

このドキュメント自体は2020年ごろから各種SDKやCLIツールのサポートポリシー等をまとめはじめたものの様です。
で、このサポートマトリクスにAWS Tools for PowerShellも記載されており、よくみるとVersion 3系が既にサポート終了している旨が記載されています。

(AWS Tools for PowerShell Version 3は既にEnd-of-Support。なお、図にある日付は一般提供開始日)

現行バージョンであるAWS Tools for PowerShell Version 4は2019年11月から一般提供され既に2年以上経っているのでVersion 3系がサポート終了していても何もおかしくはありません。

ただ、Version 3系サポート終了のアナウンスを一度たりとも見聞きした覚えが無かったのと「EC2にバンドルされているバージョンって確か3系だった、ような。」という記憶があり調べてみることにしました。

Version 3系はいつサポート終了したのか?

いろいろ調べてみましたが結局わかりませんでした...

こちらのドキュメントの各種SDKの基本的なメンテナンスポリシーが記載されているも、実際にどの様なポリシーを採用するかは各種SDK次第であり、AWS Tools for PowerShellについては一切情報がありませんでした。

既に2022年になっており、正直、サポート終了になった日付自体には大した意味は無いと思うのでこれ以上深追いするのは止めることにしました。

現在のWindows Server EC2にバンドルされているバージョン

実際に問題になるのは「EC2にバンドルされているバージョンって確か3系だった、ような。」の方で、現在利用可能なEC2で採用されているバージョンがVersion 3系のままだと改めてサポートポリシーを調査する必要があります。

Windows Server AMIの更新履歴は以下のドキュメントにまとめられています。

こちらにAWS Tools for PowerShellの更新履歴も載っていはいるのですが、

AWS Tools for Windows PowerShell version 3.15.xxxx

という謎バージョン *1の記載しかありませんでした...

残念ながら全くアテになりません。
仕方ないので現在最新の日本語版Windows Serverのインスタンスを作成して実際にインストールされているバージョンを確認することにしました。

今回は以下の5 AMIを調査しました。
Windows Server 2012 ~ 2022までの各OSを対象としています。

  • ami-0fb8cbf9f995b361f ( Windows_Server-2022-Japanese-Full-Base-2022.02.10 )
  • ami-00c6ac4d74a75d670 ( Windows_Server-2019-Japanese-Full-Base-2022.02.10 )
  • ami-029f4784244ce7b5b ( Windows_Server-2016-Japanese-Full-Base-2022.02.10 )
  • ami-0b90a3a8e774f2541 ( Windows_Server-2012-R2_RTM-Japanese-64Bit-Base-2022.02.10 )
  • ami-0e3b3744517e134ec ( Windows_Server-2012-RTM-Japanese-64Bit-Base-2022.02.10 )

結果は以下の通りとなり、全てのOSで Ver.4.1.18.0 がインストール済みでした。
一応本日時点で取得できる最古(2021年11月)のAMIではVer.4.1.15.0がインストール済みであり、新しいAMIを使う分にはAWS Tools for PowerShellのバージョンを気にする必要が無いことがわかりました。

Windows Server 2022

# OSバージョンの確認
PS C:\> Get-ComputerInfo | Select-Object OSName

OsName
------
Microsoft Windows Server 2022 Datacenter

# AWS Tools for PowerShellバージョンの確認
PS C:\> Import-Module AWSPowerShell
PS C:\> Get-Module -Name AWSPowerShell | Select-Object Name, Version, Path

Name          Version  Path
----          -------  ----
AWSPowerShell 4.1.18.0 C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell\AWSPowerShell.dll

Windows Server 2019

# OSバージョンの確認
PS C:\> Get-ComputerInfo | Select-Object OSName

OsName
------
Microsoft Windows Server 2019 Datacenter

# AWS Tools for PowerShellバージョンの確認
PS C:\> Import-Module AWSPowerShell
PS C:\> Get-Module -Name AWSPowerShell | Select-Object Name, Version, Path

Name          Version  Path
----          -------  ----
AWSPowerShell 4.1.18.0 C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell\AWSPowerShell.dll

Windows Server 2016

# OSバージョンの確認
PS C:\> Get-ComputerInfo | Select-Object OSName

OsName
------
Microsoft Windows Server 2016 Datacenter

# AWS Tools for PowerShellバージョンの確認
PS C:\> Import-Module AWSPowerShell
PS C:\> Get-Module -Name AWSPowerShell | Select-Object Name, Version, Path

Name          Version  Path
----          -------  ----
AWSPowerShell 4.1.18.0 C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell\AWSPowerShell.dll

Windows Server 2012 R2

# OSバージョンの確認
PS C:\> Get-WmiObject -Class Win32_OperatingSystem | Select-Object Caption

Caption
-------
Microsoft Windows Server 2012 R2 Standard

# AWS Tools for PowerShellバージョンの確認
PS C:\> Import-Module AWSPowerShell
PS C:\> Get-Module -Name AWSPowerShell | Select-Object Name, Version, Path | Format-List

Name    : AWSPowerShell
Version : 4.1.18.0
Path    : C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell\AWSPowerShell.dll

Windows Server 2012

# OSバージョンの確認
PS C:\> Get-WmiObject -Class Win32_OperatingSystem | Select-Object Caption

Caption
-------
Microsoft Windows Server 2012 Standard

# AWS Tools for PowerShellバージョンの確認
PS C:\> Import-Module AWSPowerShell
PS C:\> Get-Module -Name AWSPowerShell | Select-Object Name, Version, Path | Format-List

Name    : AWSPowerShell
Version : 4.1.18.0
Path    : C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell\AWSPowerShell.dll

Version 3系からの移行方法

とりあえず新しいAMIを使う分には問題ないことがわかりましたが、もし現在運用中の環境でAWS Tools for PowerShellを利用しており、そのバージョンがVersion 3系であればどこかの機会でバージョンアップをしておいた方が良いでしょう。

AWSから提供されている移行に関するドキュメントは

だけであり、すこしだけある破壊的変更に関する説明と、機能別に分割されたAWS.Tools.*なモジュールを使うくらいの説明しかありません。
このため具体的な移行については「環境に応じてよしなにやる」しかありません。

そこで非公式ではありますが「私ならこうする」という移行案をいくつか提示したいと思います。

0. 免責事項

これから説明する移行案はあくまでも「私ならこうする」レベルのものであり、実際の環境での動作を保障するものではありません。
実際の移行においては必ず事前検証を行ってください。

1. 非Windows Server EC2環境の場合

Windows Server EC2環境は構築時点でAWS Tools for PowerShellがバンドル済みのため古いバージョンの扱いが少し面倒です。
このため最初に扱いやすい非Windows Server EC2環境での移行方法を検討してみます。

この環境では古いバージョンのAWS Tools for PowerShellのアンインストールが容易なので、

  1. 古いバージョンのAWS Tools for PowerShellをアンインストール
    • アンインストール方法は環境依存のためここでは触れません
  2. 最新のAWS Tools for PowerShellをインストール

の手順でバージョンアップすれば良いでしょう。
AWS Tools for PowerShellモジュールの種別は基本AWS.Tools.*なモジュールを必要な分だけインストールすればOKです。

2. Windows Server EC2環境の場合

次にEC2環境の場合C:\Program Files (x86)\AWS Tools\PowerShellフォルダに古いバージョンのAWS Tools for PowerShellがバンドル済みであり、PowerShell標準の方法ではこれを削除できません。

EC2ではPSModulePath環境変数 *2をカスタマイズすることでこのフォルダを認識させています。

(PSModulePathC:\Program Files (x86)\AWS Tools\PowerShellが追加されている)

このため

  1. PSModulePath環境変数からC:\Program Files (x86)\AWS Tools\PowerShellを除外
    • これが古いバージョンのアンインストール代わりになる
  2. 最新のAWS Tools for PowerShellをインストール

の手順を踏めば良いでしょう。

もしくはPSModulePath環境変数は変更せず、モジュールの実体があるC:\Program Files (x86)\AWS Tools\PowerShellフォルダの内容を最新バージョンに差し替えてしまうのも良さそうです。
こちらは何らかの理由でAWS.Tools.*なモジュールが使えない場合に検討してみてください。

3. PowerShell 7にしてしまうパターン

最後にちょっと例外的なパターンとなりますが、PowerShell 7を別途インストールし、PowerShell 7環境に最新のAWS Tools for PowerShellをインストールして環境自体を新しくしてしまうのもアリでしょう。

こちらの方法であれば新旧環境を並行稼働することも容易ですし、場合によってはWindowsからLinuxへとOSも変えてライセンスコストを減らすといったことも可能です。

終わりに

以上となります。

AWS Tools for PowerShell自体はかなり互換性を重視してメジャーバージョンアップされているので実際の移行において問題が起きることは少ないと思います。
(流石に全く問題ない、とは言いませんが...)
もし運用中の環境が古いバージョンの場合は移行を検討してみてください。

脚注

  1. Ver.3.15なんて公に公開されていない
  2. PowerShellがモジュールのロケーションを判別するために使う環境変数