最新のECS-optimized AMI IDをParameter Storeから取得できるようになりました(Amazon Linuxもあるよ)
はじめに
中山(順)です
以前、Windows Serverの最新AMI IDを取得する方法をご紹介しました。
同様に、ECS-optimized AMI IDもパブリックパラメーターストアから取得できるようになりました。
Amazon ECS provides ECS-Optimized AMI metadata via SSM Parameters
また、いつアナウンスされたのか全く気がつきませんでしたが、Amazon LinxuについてもAMI IDが取得できるようになっていました。
やってみた
早速、AWS CLIで取得してみたいと思います。
ECS-optimized AMI ID
Value自体がJSONのため、以下のようにして抽出しました。
aws ssm get-parameters \ --names /aws/service/ecs/optimized-ami/amazon-linux/recommended \ --query Parameters[0].Value \ --output text \ | jq -r .image_id
ami-a99d8ad5
Amazon Linux
こちらは種類が多いため、それぞれのImageの違いを確認の上で適切なAMIを選択してください。
aws ssm get-parameters-by-path \ --path "/aws/service/ami-amazon-linux-latest" \ --query "sort_by(Parameters,&Name)[]"
[ { "Version": 1, "Type": "String", "Name": "/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-ebs", "Value": "ami-617c3007" }, { "Version": 1, "Type": "String", "Name": "/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-gp2", "Value": "ami-a77c30c1" }, { "Version": 1, "Type": "String", "Name": "/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-s3", "Value": "ami-b87c30de" }, { "Version": 1, "Type": "String", "Name": "/aws/service/ami-amazon-linux-latest/amzn-ami-minimal-hvm-x86_64-ebs", "Value": "ami-b87935de" }, { "Version": 1, "Type": "String", "Name": "/aws/service/ami-amazon-linux-latest/amzn-ami-minimal-hvm-x86_64-s3", "Value": "ami-df7935b9" }, { "Version": 1, "Type": "String", "Name": "/aws/service/ami-amazon-linux-latest/amzn-ami-minimal-pv-x86_64-ebs", "Value": "ami-b57935d3" }, { "Version": 1, "Type": "String", "Name": "/aws/service/ami-amazon-linux-latest/amzn-ami-minimal-pv-x86_64-s3", "Value": "ami-a37f33c5" }, { "Version": 1, "Type": "String", "Name": "/aws/service/ami-amazon-linux-latest/amzn-ami-pv-x86_64-ebs", "Value": "ami-07793561" }, { "Version": 1, "Type": "String", "Name": "/aws/service/ami-amazon-linux-latest/amzn-ami-pv-x86_64-s3", "Value": "ami-2f793549" }, { "Version": 1, "Type": "String", "Name": "/aws/service/ami-amazon-linux-latest/amzn-ami-vpc-nat-hvm-x86_64-ebs", "Value": "ami-6d7b370b" }, { "Version": 1, "Type": "String", "Name": "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-2017.12.0.20180328.1-x86_64-ebs", "Value": "ami-3dbcb441" }, { "Version": 1, "Type": "String", "Name": "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-2017.12.0.20180328.1-x86_64-gp2", "Value": "ami-8fbab2f3" }, { "Version": 1, "Type": "String", "Name": "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-ebs", "Value": "ami-706f0816" }, { "Version": 1, "Type": "String", "Name": "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2", "Value": "ami-c2680fa4" }, { "Version": 1, "Type": "String", "Name": "/aws/service/ami-amazon-linux-latest/amzn2-ami-minimal-hvm-2017.12.0.20180328.1-x86_64-ebs", "Value": "ami-8bbab2f7" }, { "Version": 1, "Type": "String", "Name": "/aws/service/ami-amazon-linux-latest/amzn2-ami-minimal-hvm-x86_64-ebs", "Value": "ami-43620525" } ]
AMIについては、以下の観点で選択してください。
パッケージ
Amazon EC2では、通常のイメージに加えてパッケージを必要最小限に絞り込んだMinimalなAmazon LinuxのAMIを提供しています。
名称に"minimal"が含まれるものがそれに該当します。
仮想化タイプ
Amazon EC2では、PVおよびHVMの2種類の仮想化タイプを利用できます。
PVは旧世代のインスタンスタイプしかサポートされておらず性能上のアドバンテージもなくなっているため、特別な理由がない限りHVMを利用しましょう。
パラメーター名に"hvm"や"pv"などが含まれています。
ストレージ
RootDeviceTypeおよびVolumeTypeによる違いもあります。
AMI Name | RootDeviceType | VolumeType |
---|---|---|
amzn-ami-hvm-x86_64-ebs | ebs | standard |
amzn-ami-hvm-x86_64-gp2 | ebs | gp2 |
amzn-ami-hvm-x86_64-s3 | instance-store | - |
基本的にはパラメーター名に"gp2"が含まれているものを選べば問題ないかと思います。
NAT
今ではNAT Gatewayがあるので出番が減っていますが、NAT Instance用のAMIも公式に提供されています。
パラメーター名に"nat"と含まれています。
IDだけ抽出
以下のような感じで抽出できます。
aws ssm get-parameters-by-path \ --path "/aws/service/ami-amazon-linux-latest" \ --query Parameters[?Name==\`/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-gp2\`].Value \ --output text
ami-a77c30c1
まとめ
Windows Serverだけでなく、Amazon LinuxやECS-optimized AMIの最新IDを簡単に取得できるようになりました。 AMIの作成を自動化しているような方にはうれしい機能なのではないでしょうか。
AMI作成の自動化については以前記事を書きましたのでこちらもご覧いただけるとうれしいです。
こうやって、かつては頑張らないといけなかったことが頑張らなくてもよくなるって、ほんとによいですね。
もっと楽がしたいです!