CentOS7の最新AMI IDをAWS CLIで取得する方法

CentOS7の最新AMI IDを調べようと思っても意外と見つからない、という経験はありませんか?自分はあります。CentOSの最新AMI IDを取得する方法を調べたのでご紹介したいと思います。

最新AMI IDの取得方法

Cloud/AWS - CentOS Wiki

上記が公式のWikiですが、メンテされていないようで最新のAMI IDの記載がありませんでした。しかし、AWS CLIで検索する際にヒントとなる情報がありました。product-codeをfilter条件に入れることで公式のAMIだけを抽出できるようです。各OSのProduct Codeは下記になります。

OS Product Code
CentOS-7 x86_64 aw0evgkw8e5c1q413zgy5pjce
CentOS-6 x86_64 6x5jmcajty9edm3f211pqjfn2

Wikiで紹介されているのが、CentOS7のAMIを検索する方法です。

$ aws --region us-east-1 ec2 describe-images --owners aws-marketplace --filters Name=product-code,Values=aw0evgkw8e5c1q413zgy5pjce

これに条件を加えて最新のAMI IDを取得できるようにします。 コマンドは下記になります。

--filtersproduce-codeを指定し、公式のCentOS7に絞り込みます。そして—queryCreationDateでソートします。ソートは昇順になっているのでreverseで降順にし、1件目だけを表示しています。

・CentOS7の最新AMI IDを取得

$ aws ec2 describe-images \
  --owners aws-marketplace \
  --filters Name=product-code,Values=aw0evgkw8e5c1q413zgy5pjce \
  --region ap-northeast-1 \
  --query 'reverse(sort_by(Images, &CreationDate))[0].[ImageId]' \
  --region ap-northeast-1 \
  --output text

ami-045f38c93733dd48d

AMI IDが1件表示されていますが、それが最新かどうか表示項目と件数を増やして確認してみたいと思います。

・確認コマンド

$ aws ec2 describe-images \
  --owners aws-marketplace \
  --filters Name=product-code,Values=aw0evgkw8e5c1q413zgy5pjce \
  --query 'reverse(sort_by(Images, &CreationDate))[:5].[CreationDate, Description, ImageId]' \
  --region ap-northeast-1 \
  --output text

2019-01-30T23:44:22.000Z    CentOS Linux 7 x86_64 HVM EBS ENA 1901_01   ami-045f38c93733dd48d
2018-06-13T15:58:01.000Z    CentOS Linux 7 x86_64 HVM EBS ENA 1805_01   ami-8e8847f1
2018-05-17T09:05:19.000Z    CentOS Linux 7 x86_64 HVM EBS ENA 1804_2    ami-3185744e
2018-04-04T00:13:11.000Z    CentOS Linux 7 x86_64 HVM EBS ENA 1803_01   ami-91c4d3ed
2017-12-05T14:49:37.000Z    CentOS Linux 7 x86_64 HVM EBS 1708_11.01    ami-4dd5522b

最新AMI IDが取得できていることが検証できました。同じ要領でCentOS6もproduct-codeを変更すれば取得できます。

CentOS7を最新のAMIで起動してみる

先程のコマンドを使用して常に最新のAMI IDからEC2インスタンスを起動してみたいと思います。

$ aws ec2 run-instances \
  --image-id $(aws ec2 describe-images --owners aws-marketplace --filters Name=product-code,Values=aw0evgkw8e5c1q413zgy5pjce --region ap-northeast-1 --query 'reverse(sort_by(Images, &CreationDate))[0].[ImageId]' --region ap-northeast-1 --output text) \
  --instance-type t2.micro

上記のコマンド実行後、マネジメントコンソールから起動できていることが確認できました。また意図したAMIが使用されていることも確認できました。

以上