【AWSCLI】古いAmazon Machine Image(AMI)を探したい

AWSのCLIを用いて、業務上古いAMIを探す必要がありましたので、残しておきます。

使うコマンド

いきなり結論から。使うコマンドは以下です。

aws ec2 describe-images \
--owners amazon \
--filters "Name=name,Values=Windows_Server-2016-En*" \
--query 'reverse(sort_by(Images, &Name))[].[Name,ImageId,CreationDate]' \
--output table

コマンド解説

マニュアルはこちらです:
AWS CLI 1.2 Command Reference
https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html

コマンドをバラバラにして考えてみます。

  • aws ec2 describe-images
    これは基本部分です。AMIの記述を行います。
  • --owners amazon
    誰が所有するイメージなのかを指定します。self | amazon | aws-marketplace の値が使用できます。正直マーケットプレイスには尖った用途のイメージも多いので、"amazon"を指定してノイズを減らす使い方が多いと思われます。
    なお、selfでは自環境で取得したバックアップイメージなども含まれます。
  • --filters "Name=name,Values=Windows_Server-2016-En*"
    探したいイメージを検索します。ここでは正規表現が使えます。
    例えば、Windows Server 2022の日本語イメージを探す場合は、"Windows_Server-2022-Ja*"とします。 ※日本語がそもそもないイメージもあります
  • --query 'reverse(sort_by(Images, &Name))[].[Name,ImageId,CreationDate]'
    結果をソートしています。特にこだわりがなければこのままで良いです。
  • --output table
    アウトプットするファイル形式です。 text | json | table の値が使用できますが、個人的にはtableが見やすいと思います。(一部コンソールでは文字化けを起こしますが・・)

欲しいイメージが見つからない?

オーナー(所有者)がamazonとなっているAMIは、どうやら時間経過により消えてしまうみたいです。確認したところ3ヶ月前くらいのパッチは残ってそうでしたが、それ以前はありませんでした。。。

WindowsやAmazon Linux, RHEL, CentOSなどは、特に指定しなければ最新のセキュリティパッチが当たった状態で提供されるため、基本的にはそれで問題ないでしょう。

ただ、そのアップデートに不具合があった場合は、上記手段を使って古いイメージを展開することも検討してみてください。
ちなみに、古いイメージが無い場合は、別環境でisoから作成し、VM Import/Exportを用いて展開する力技もあります。