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で書いた方がもっと出力工夫できた
と思いつつも後悔はしていない。