Versão nova e melhorada.
# needed as json list returned by ubuntu site is mal-formed
remove_last_comma() { sed '
$x;$G;/\(.*\),/!H;//!{$!d
}; $!x;$s//\1/;s/^\n//'
}
curl -s "https://cloud-images.ubuntu.com/locator/ec2/releasesTable" \
| remove_last_comma \
| jq -c '.aaData[] | select(contains(["16.04", "us-west-2", "hvm:ebs"]))' \
| grep -o 'ami-[a-z0-9]\+' | head -1
Basicamente, agarra dados brutos usados para a página de localização ami do ubuntu e usa jq para analisar a linha que eu quero, em seguida, um grep para extrair o valor. Muito mais rápido que a versão antiga.
-- versão original
Aqui está outro exemplo. Eu acabei de escrever isso para buscar a última identificação confiável de AMI. Ele usa a ferramenta aws cli para consultar a API, usando o fato de que os nomes são classificados em ordem de data para obter as últimas.
name=$(\
aws --region us-west-2 ec2 describe-images --owners 099720109477 \
--filters Name=root-device-type,Values=ebs \
Name=architecture,Values=x86_64 \
Name=name,Values='*hvm-ssd/ubuntu-trusty-14.04*' \
| awk -F ': ' '/"Name"/ { print $2 | "sort" }' \
| tr -d '",' | tail -1)
ami_id=$(\
aws --region us-west-2 ec2 describe-images --owners 099720109477 \
--filters Name=name,Values="$name" \
| awk -F ': ' '/"ImageId"/ { print $2 }' | tr -d '",')
Funciona em 2 partes. A primeira parte obtém todas as AMIs do ubuntu confiáveis que atendem aos vários critérios (ebs, x86_64 e o padrão de nome). Ele pega o nome e classifica por ele. Os nomes são formatados para ordená-los por data, para que o último seja o mais novo. Este nome é então atribuído à variável 'name'.
A segunda parte usa esse nome para solicitar o ID da AMI com a AMI com esse nome. Ele analisa apenas o ID e o atribui a 'ami_id'.