Home > 11月 22nd, 2013

2013.11.22

Instanceから作成したAMIの中で最新のAMI IDを取得してみた

タイトルの通りです。

使うときは一番最初のechoで出力するインスタンスIDを検索したいIDに書き換えて使います。

$ echo [インスタンスID] | xargs -i aws --output text ec2 describe-instances --instance-ids {} | awk 'BEGIN{FS="\t"} {if($1=="INSTANCES") {rootdev=0;vol="";dev=$17;} if($1=="BLOCKDEVICEMAPPINGS") {if($2==dev) rootdev=1; else rootdev=0;} if($1=="EBS" && rootdev==1) vol=$5;} END{print vol}' | xargs -i aws --output text ec2 describe-snapshots --filters Name=volume-id,Values={} | sort -t$'\t' -k 6 -r | head -n 1 | cut -f5 | xargs echo | sed 's/ /,/g' |  xargs -i aws --output text ec2 describe-images --filters Name=block-device-mapping.snapshot-id,Values={} | awk 'BEGIN{FS="\t"} {if($1=="IMAGES") print $5;}'

ちなみに指定したInstanceから作成したAMI IDの一覧を出力するには

$ echo [インスタンスID] | xargs -i aws --output text ec2 describe-instances --instance-ids {} | awk 'BEGIN{FS="\t"} {if($1=="INSTANCES") {rootdev=0;vol="";dev=$17;} if($1=="BLOCKDEVICEMAPPINGS") {if($2==dev) rootdev=1; else rootdev=0;} if($1=="EBS" && rootdev==1) vol=$5;} END{print vol}' | xargs -i aws --output text ec2 describe-snapshots --filters Name=volume-id,Values={} | cut -f5 | xargs echo | sed 's/ /,/g' |  xargs -i aws --output text ec2 describe-images --filters Name=block-device-mapping.snapshot-id,Values={} | awk 'BEGIN{FS="\t"} {if($1=="IMAGES") print $5;}'

さすがにこれはscriptで書いた方がもっと出力工夫できた
と思いつつも後悔はしていない。