Version nouvelle et améliorée.
# 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
Saisit essentiellement les données brutes utilisées pour la page de recherche d'amis d'ubuntu et utilise jq pour analyser la ligne que je veux, puis un grep pour extraire la valeur. Beaucoup plus rapide que l'ancienne version.
-- version originale
Voici un autre exemple. Je viens d'écrire ceci pour récupérer le dernier identifiant AMI fiable. Il utilise l'outil aws cli pour interroger l'API, en utilisant le fait que les noms sont triés par date pour obtenir la dernière.
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 '",')
Il fonctionne en 2 parties. La première partie obtient toutes les AMI pour ubuntu trusty qui répondent aux différents critères (ebs, x86_64 et le modèle de nom). Il extrait le nom et le trie. Les noms sont formatés de façon à ce que leur tri soit trié par date afin que le dernier soit le plus récent. Ce nom est ensuite attribué à la variable «nom».
La deuxième partie utilise ce nom pour demander l'ID AMI pour l'AMI avec ce nom. Il analyse uniquement l'ID et l'assigne à 'ami_id'.