AWS CLIで最新のAmazon LinuxのAMI IDを取得する
アニメを消化しつつ、コマンドラインから最新のAMI IDを取得を試して、Amazon Linuxの分はできたのでメモ。
ID取得からインスタンスの作成まで一発でやってしまおうと思ったけど、describe-imagesはAPIのレスポンスが遅かったので、とりあえず、一覧だけ出力するところまで作成。APIのレスポンスが遅いのは、キャッシュファイルを入れて緩和。
最後に載せているスクリプトは、キャッシュファイル対応のために長くなっていますが、本質的なポイントは以下の2つ。
自分とamazonがオーナーになっているAMIのうち、以下に該当するものを取得
aws ec2 describe-images \ --owners self amazon \ --filters \ Name=virtualization-type,Values=hvm \ Name=root-device-type,Values=ebs \ Name=architecture,Values=x86_64 \ Name=block-device-mapping.volume-type,Values=standard
取得したJSONをjqで以下のように整形
- Imageのリストを名前順にソート
- Platformが"windows"となっているものを除外(Platformは値が"windows"のみしかない属性)
- NameとImageId(AMI ID)を文字列結合して出力
jq -r '.Images | sort_by(.Name)| .[] | select(.Platform != "windows") | .Name + ": " + .ImageId'
これらをまとめて一つのスクリプトにしたのが以下。ほかの条件でAMI IDを取得したい場合は、最後に参考文献に載せたドキュメントを見つつ改変してください。
- get-aws-ec2-image.sh
#!/bin/bash set -ue prefix=`basename $0` timestamp_file=/tmp/$prefix.timestamp cache_file=/tmp/$prefix.cache timestamp=`date '+%s'` cache_time=300 describe_images(){ echo $timestamp > $timestamp_file aws ec2 describe-images \ --owners self amazon \ --filters \ Name=virtualization-type,Values=hvm \ Name=root-device-type,Values=ebs \ Name=architecture,Values=x86_64 \ Name=block-device-mapping.volume-type,Values=standard } # 出力を括弧でまとめる ( if [ -e $timestamp_file ];then cache_timestamp=`cat $timestamp_file` ---- # キャッシュファイルが有効期間を過ぎている場合はAWSから読み出してキャッシュファイルにも書く if [ $timestamp -gt `expr $cache_timestamp + $cache_time` ];then describe_images | tee $cache_file else # キャッシュファイルが有効期間内の場合はキャッシュファイルを読み出すだけ cat $cache_file fi # キャッシュファイルがない場合 else describe_images | tee $cache_file fi ) | jq -r '.Images | sort_by(.Name)| .[] | select(.Platform != "windows") | .Name + ": " + .ImageId'
- 実行例
$ bash get-aws-ec2-images.sh | grep amzn-ami-hvm amzn-ami-hvm-2012.09.0.x86_64-ebs: ami-426cd343 amzn-ami-hvm-2012.09.1.x86_64-ebs: ami-fd7ef9fc amzn-ami-hvm-2013.03.0.x86_64-ebs: ami-833ebe82 amzn-ami-hvm-2013.03.1.x86_64-ebs: ami-2db33c2c amzn-ami-hvm-2013.09.0.x86_64-ebs: ami-0961fe08 amzn-ami-hvm-2013.09.1.x86_64-ebs: ami-1b1a7e1a amzn-ami-hvm-2013.09.2.x86_64-ebs: ami-eb0c6fea amzn-ami-hvm-2014.03.0.x86_64-ebs: ami-ebbfc2ea amzn-ami-hvm-2014.03.1.x86_64-ebs: ami-bb562fba amzn-ami-hvm-2014.03.2.x86_64-ebs: ami-29dc9228 amzn-ami-hvm-2014.09.0.x86_64-ebs: ami-35072834
参考リンク
[Amazon EBS ボリュームのみ] gp2(General Purpose (SSD) ボリューム)、standard(マグネティック ボリューム)、または io1(Provisioned IOPS (SSD) ボリューム)のいずれかのボリュームタイプ。デフォルト値は standard(マグネティック ボリューム)
今日はこんなところで。Gのレコンギスタを観たら寝ます。
追記
Ubuntuのイメージ一覧を取りたいこともあるのでメモを追記。Ubuntuの公式イメージを取る場合は、ownerに"099720109477"を指定してください。ソースは以下のURL。
cloud - How do I know what Ubuntu AMI to launch on EC2? - Ask Ubuntu
Verify the Owner is 099720109477!
Any user can register an AMI under any name. Nothing prevents a malicious user from registering an AMI that would match the search above. So, in order to be safe, you need to verify that the owner of the ami is '099720109477'.
GUIから選択する場合は以下から。