いろいろなシチュエーションでのWindows AMIの選び方について整理してみた
みなさん、こんにちは!
AWS事業本部の青柳@福岡オフィスです。
WindowsのEC2インスタンスを構築する際に
「どのAMIから起動すれば良いんだっけ?」
「AMIは分かったけど、対応するAMI IDを確認するのが面倒」
など、その都度調べるのが手間だったので、備忘録を兼ねて整理してみました。
Windows AMIを検索する
マネジメントコンソールの「EC2」→「AMI」から、Windows AMIの一覧を検索することができます。
使用可能な全てのWindows AMIの一覧を検索するには、「パブリックイメージ」を選択して、フィルター条件を以下のように指定します。
- 所有者: Amazonイメージ
- プラットフォーム: Windows
- AMI名: Windows_Server
ただし、検索結果が数百件もありますので、この中から目的のAMIを探すためには、更なる条件の絞り込みが必要になります。
条件を絞り込むためには、AMIの「名前」(AMI名) の命名規則を理解することがポイントです。
Windows AMIの「AMI名」命名規則
例外もありますが、Windows AMIの「AMI名」は概ね以下の命名規則となっています。
各項目について説明します。
OSの種類
Windows AMIは基本的にWindows_Server
で始まる名前となっています。
なお、「windows」プラットフォームのAMIにはWindows_Server
以外の名前が付いたものも存在します。
例えば、AWS Elastic Beanstalk用のAMIなどが該当しますが、今回は説明を割愛します。
Windowsバージョン
現在、AWSから提供されているAMIは以下のバージョンです。
(2008 R2以前のバージョンは、マイクロソフトのサポート終了に伴い、AMIが提供されなくなりました)
2012-RTM
: Windows Server 20122012-R2_RTM
: Windows Server 2012 R22016
: Windows Server 20162019
: Windows Server 2019
上記のもの以外に1809
、1903
、1909
といったバージョン番号が付いたAMIが存在します。
これらはWindows Serverの「半期チャネル」(SAC) と呼ばれる製品体系のAMIです。
半期チャネルについては、以下のリンク先を参照してください。
Windows Server サービス チャネル: LTSC と SAC | Microsoft Docs
【新機能】Amazon EC2でWindows Server バージョン1809が使えるようになりました #reinvent | Developers.IO
言語
Japanese
、English
などの言語毎のAMIが用意されています。
日本語版のアプリケーションやミドルウェアを動作させる場合、互換性やサポートの対象が日本語Windowsに限定される場合があります。
そのような場合にはJapanese
を選択します。
AMIのバリエーションによっては、用意されている言語が英語版のみである場合もあります。
インストールオプション
Windows Server 2016以降の場合、Full
とCore
の選択肢があります。
Windows Server 2012 R2以前の場合、この項目は64Bit
で固定であり、Full
相当になります。
Full
: GUIを備えた通常のインストールCore
: GUIが省略された「Windows Server Core」インストール
Windows Server Coreインストールオプションは、GUIが無くCLIベースの管理が必要ですが、OSのコンポーネントが必要最低限に絞られているため「軽量」「セキュリティ更新で受ける影響が少ない」などのメリットがあります。
(※ Core
は英語版のみ用意されており、日本語版の場合は必然的にFull
の選択となります)
Windows Server Coreについての詳細は、以下のリンク先を参照してください。
Windows Server の Server Core インストールオプションとは | Microsoft Docs
バリエーション
通常は、基本となるBase
のAMIを選択します。
その他に、利用目的に応じて、コンポーネントが追加されていたり、カスタマイズが施されたりしたAMIのバリエーションが用意されています。
代表的なものとして、Microsoft SQL ServerがインストールされたAMIがあります。
(※ Base
とSQL
以外のバリエーションは原則として英語版のみが用意されています)
個々のバリエーションの詳細については、後ほど説明します。
ビルド日付
Windows AMIは、原則として、マイクロソフトの「セキュリティ更新プログラム (月例)」のリリースに合わせて、最新のセキュリティ更新プログラムが適用されたAMIがAWSによってビルド・公開されます。
過去のビルドが一定期間 (通常は4か月分=4世代分) 履歴として公開されており、期間を過ぎた古いビルドはAMIのリストから削除されます。
通常は最新のビルドを選択すれば問題ありませんが、必要に応じて古いビルドを選択することも可能です。
例えば、2020/4/15時点では以下のビルドが公開されています。(AMIの種類によって若干異なります)
- 2020.04.15
- 2020.03.18 (※ Windows Server 2019のみ)
- 2020.03.11
- 2020.02.12
- 2020.01.15
(Windows Server 2019のAMIは3月に2回更新されているため、例外的に5世代分が公開されている状態となっています)
「Base」以外のAMIのバリエーション
SQL
: Microsoft SQL Serverがインストール済みのAMI
例: Windows_Server-2019-Japanese-Full-SQL_2017_Standard
SQL
の後にはSQL Serverのバージョン・エディションが続きます。
Windowsのバージョンや言語によって組み合わせ可能なSQL Serverのバージョン・エディションが異なることに注意してください。
(後述の「AWS CLIを使ってWindows AMIを検索する」に、SQL Serverインストール済みAMIを検索する例を記載しています)
Tesla
: GPUインスタンス向けAMI
例: Windows_Server-2019-English-Tesla
Windows高速コンピューティングインスタンス (GPUベースインスタンス) のためのドライバーがインストール済みのAMIです。
Windows 高速コンピューティングインスタンス - Amazon Elastic Compute Cloud
Deep-Learning
: Deep Learning向けAMI
例: Windows_Server-2019-English-Deep-Learning
ディープラーニングのフレームワーク (Tensorflow、Caffe、MXNet) が導入済みのAMIです。
AWS Deep Learning AMI とは - Deep Learning AMI
【速報】AWS Deep Learning AMI for Microsoft Windowsがリリースされました #reinvent | Developers.IO
ECS_Optimized
: ECS向けAMI
例: Windows_Server-2019-English-Core-ECS_Optimized
ECSでWindowsコンテナを利用する場合のホストインスタンス用途に最適化されたAMIです。
Windows コンテナ - Amazon Elastic Container Service
EKS_Optimized
: EKS向けAMI
例: Windows_Server-2019-English-Core-EKS_Optimized-1.14
、Windows_Server-2019-English-Core-EKS_Optimized-1.15
EKSでWindowsコンテナを利用する場合のワーカーノード用途に最適化されたAMIです。
Amazon EKS Windows ワーカーノードの起動 - Amazon EKS
[アップデート] EKSでWindowsワーカーノードの実行が正式サポートされました! | Developers.IO
ContainersLatest
: Windows Serverコンテナ導入済みAMI
例: Windows_Server-2019-English-Core-ContainersLatest
、Windows_Server-2019-English-Full-ContainersLatest
「Windows Serverコンテナ」機能、およびDocker (DockerMicrosoftProvider) が導入済みのAMIです。
(ECSやEKSを使わずにDockerを単体で利用する場合は、こちらのAMIとなります)
HyperV
: Hyper-V導入済みAMI
例: Windows_Server-2019-English-Full-HyperV
「Hyper-V」の役割が導入済みのAMIです。
STIG
: STIGsに準拠したAMI
例: Windows_Server-2019-English-STIG-Full
、Windows_Server-2019-English-STIG-Core
「STIGs」とは、アメリカ国防情報システム局が提供するチェックリスト/ベストプラクティス集です。
STIGsに準拠したAMIを利用することで、セキュリティのリスクを低減することが期待できます。
STIGsについての詳細は、以下のリンク先を参照してください。
Security Technical Implementation Guides (STIGs)に準拠したWindows Serverを追加費用無しで利用できるようになりました | Developers.IO
[re:Invent2019] EC2 Image BuilderのWindows STIGコンポーネントを調べてみた #reinvent | Developers.IO
AWS CLIを使ってWindows AMIを検索する
ここまでで説明したAMI名の要素を条件に指定してマネジメントコンソールから検索しても良いのですが、AWS CLIを使うとよりスピーディーに目的のAMIを探すことができます。
例1: Windows Serverの各バージョンにおいて、日本語版で提供されているAMIの一覧を表示
aws ec2 describe-images \ --region ap-northeast-1 \ --owners amazon \ --filters "Name=platform,Values=windows" \ "Name=name,Values=Windows_Server-*-Japanese-*-Base-*" \ --query "sort_by(Images, &Name)[].[ImageId, Name]" \ --output text
ami-0540dc7dc61e196c8 Windows_Server-2012-R2_RTM-Japanese-64Bit-Base-2020.01.15 ami-0d56b8074c6e165c6 Windows_Server-2012-R2_RTM-Japanese-64Bit-Base-2020.02.12 ami-0e1285bf6d715a8d6 Windows_Server-2012-R2_RTM-Japanese-64Bit-Base-2020.03.11 ami-0ad982fce4f5d83a7 Windows_Server-2012-R2_RTM-Japanese-64Bit-Base-2020.04.15 ami-0ce892616bddab3a9 Windows_Server-2012-RTM-Japanese-64Bit-Base-2020.01.15 ami-09d956b6c7faf7526 Windows_Server-2012-RTM-Japanese-64Bit-Base-2020.02.12 ami-0b91b3c756034434c Windows_Server-2012-RTM-Japanese-64Bit-Base-2020.03.11 ami-0b5e36c15ba9654e3 Windows_Server-2012-RTM-Japanese-64Bit-Base-2020.04.15 ami-01e9f9c59f39f1ce6 Windows_Server-2016-Japanese-Full-Base-2020.01.15 ami-08648ecc74e83e435 Windows_Server-2016-Japanese-Full-Base-2020.02.12 ami-0854f81cb0aa924ba Windows_Server-2016-Japanese-Full-Base-2020.03.11 ami-01577fa45c2d60eaf Windows_Server-2016-Japanese-Full-Base-2020.04.15 ami-094418f0b70398775 Windows_Server-2019-Japanese-Full-Base-2020.01.15 ami-086ada1a922a166bd Windows_Server-2019-Japanese-Full-Base-2020.02.12 ami-0e47cca1c10f59db5 Windows_Server-2019-Japanese-Full-Base-2020.03.11 ami-0eaf2cee98a021942 Windows_Server-2019-Japanese-Full-Base-2020.03.18 ami-092bd66a9b5bcf165 Windows_Server-2019-Japanese-Full-Base-2020.04.15
例2: 日本語版のWindows Server 2016と組み合わせ可能なSQL Serverの一覧を表示
aws ec2 describe-images \ --region ap-northeast-1 \ --owners amazon \ --filters "Name=platform,Values=windows" \ "Name=name,Values=Windows_Server-2016-Japanese-*-SQL_*" \ --query "sort_by(Images, &Name)[].[ImageId, Name]" \ --output text
ami-0dba8408ca6a12e12 Windows_Server-2016-Japanese-Full-SQL_2016_SP2_Enterprise-2020.01.15 ami-0e81bc7507bee2d64 Windows_Server-2016-Japanese-Full-SQL_2016_SP2_Enterprise-2020.02.12 ami-04f40635c94f3aee2 Windows_Server-2016-Japanese-Full-SQL_2016_SP2_Enterprise-2020.03.11 ami-034eda9f332550e26 Windows_Server-2016-Japanese-Full-SQL_2016_SP2_Enterprise-2020.04.15 ami-048e9fa096f35082c Windows_Server-2016-Japanese-Full-SQL_2016_SP2_Express-2020.01.15 ami-0a6ffe4beaeb4b750 Windows_Server-2016-Japanese-Full-SQL_2016_SP2_Express-2020.02.12 ami-0d952aeec03c11c72 Windows_Server-2016-Japanese-Full-SQL_2016_SP2_Express-2020.03.11 ami-04912fb6ef6893cc7 Windows_Server-2016-Japanese-Full-SQL_2016_SP2_Express-2020.04.15 ami-04c064d2e72662c7b Windows_Server-2016-Japanese-Full-SQL_2016_SP2_Standard-2020.01.15 ami-0000bf8b99cfbf565 Windows_Server-2016-Japanese-Full-SQL_2016_SP2_Standard-2020.02.12 ami-007fc9dfe417e8183 Windows_Server-2016-Japanese-Full-SQL_2016_SP2_Standard-2020.03.11 ami-047ba237f9f0fa48f Windows_Server-2016-Japanese-Full-SQL_2016_SP2_Standard-2020.04.15 ami-075502341d1c0ea6c Windows_Server-2016-Japanese-Full-SQL_2016_SP2_Web-2020.01.15 ami-08fddcfaefd05a047 Windows_Server-2016-Japanese-Full-SQL_2016_SP2_Web-2020.02.12 ami-0af6eba119c258d94 Windows_Server-2016-Japanese-Full-SQL_2016_SP2_Web-2020.03.11 ami-003d796e504ae947c Windows_Server-2016-Japanese-Full-SQL_2016_SP2_Web-2020.04.15 ami-02737105cf6da1dbc Windows_Server-2016-Japanese-Full-SQL_2017_Enterprise-2020.01.15 ami-0111b96cffa452cbc Windows_Server-2016-Japanese-Full-SQL_2017_Enterprise-2020.02.12 ami-0917e050aad90dc76 Windows_Server-2016-Japanese-Full-SQL_2017_Enterprise-2020.03.11 ami-066cf5cae74a060e9 Windows_Server-2016-Japanese-Full-SQL_2017_Enterprise-2020.04.15 ami-06ffb2c6693099a73 Windows_Server-2016-Japanese-Full-SQL_2017_Standard-2020.01.15 ami-0e46381e0b6a58a58 Windows_Server-2016-Japanese-Full-SQL_2017_Standard-2020.02.12 ami-0736c12ec83822583 Windows_Server-2016-Japanese-Full-SQL_2017_Standard-2020.03.11 ami-0a99a9af0fa7b9a3b Windows_Server-2016-Japanese-Full-SQL_2017_Standard-2020.04.15 ami-0945561d79d1ba382 Windows_Server-2016-Japanese-Full-SQL_2017_Web-2020.01.15 ami-02dfa1cc49889231d Windows_Server-2016-Japanese-Full-SQL_2017_Web-2020.02.12 ami-0850e5601cc276af8 Windows_Server-2016-Japanese-Full-SQL_2017_Web-2020.03.11 ami-0ac24cd9cf87d3bbb Windows_Server-2016-Japanese-Full-SQL_2017_Web-2020.04.15
Systems Managerパラメータストアを使って最新ビルドのAMIを取得する
特定のAMIについて最新ビルドの情報を取得する方法もあります。
完全なAMI名 (ビルド日付を除いた部分) が分かっている必要がありますが、常に最新のAMIを取得することができます。
AMI_NAME_ALIAS=Windows_Server-2019-Japanese-Full-Base aws ssm get-parameters \ --names /aws/service/ami-windows-latest/$AMI_NAME_ALIAS \ --region ap-northeast-1
{ "Parameters": [ { "Name": "/aws/service/ami-windows-latest/Windows_Server-2019-Japanese-Full-Base", "Type": "String", "Value": "ami-092bd66a9b5bcf165", "Version": 21, "LastModifiedDate": 1587165514.066, "ARN": "arn:aws:ssm:ap-northeast-1::parameter/aws/service/ami-windows-latest/Windows_Server-2019-Japanese-Full-Base" } ], "InvalidParameters": [] }
パラメータストアを使った最新AMIの取得については、以下のブログ記事を参照してください。
よく使うOSの最新AMI IDを一撃で取得する | Developers.IO
おわりに
Linux AMIとは異なるWindows AMI特有の「AMI名」命名規則、AMIの種類のバリエーションについて、まとめてみました。
- 初めて使う or あまり使わないAMIを探す時 → AMI名の命名規則の要素を条件にして検索
- AMI名が分かっていて最新ビルドを取得したい時 → Systems Managerパラメータストアを使って取得
と使い分けるのが良いのではないかと思います。