Versione nuova e migliorata.
# 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
Praticamente prende i dati grezzi usati per la pagina di ricerca di Ubuntu e usa jq per analizzare la riga che voglio quindi un grep per estrarre il valore. Molto più veloce della vecchia versione.
-- versione originale
Ecco un altro esempio. Ho appena scritto questo per recuperare l'ultimo fidato ID AMI. Utilizza lo strumento aws cli per interrogare l'API, usando il fatto che i nomi si ordinano in ordine di data per ottenere l'ultimo.
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 '",')
Funziona in 2 parti. La prima parte ottiene tutte le AMI per Ubuntu fidate che soddisfano i vari criteri (ebs, x86_64 e lo schema dei nomi). Estrae il Nome e lo ordina. I nomi sono formattati in modo tale da ordinarli in base alla data, quindi l'ultimo sarà il più recente. Questo nome viene quindi assegnato alla variabile 'name'.
La seconda parte utilizza quel nome per richiedere l'ID AMI per l'AMI con quel nome. Analizza solo l'id e lo assegna a 'ami_id'.