Neue und verbesserte Version.
# 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
Grundsätzlich werden Rohdaten für Ubuntus Ami-Findingseite erfasst und mit jq die Zeile analysiert, die ich verwenden möchte. Anschließend wird der Wert mit einem Grep-Befehl abgerufen. Viel schneller als die alte Version.
-- Originalfassung
Hier ist ein weiteres Beispiel. Ich habe dies gerade geschrieben, um die neueste vertrauenswürdige AMI-ID abzurufen. Es verwendet das Tool aws cli, um die API abzufragen, wobei die Namen nach Datum sortiert werden, um die neuesten zu erhalten.
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 '",')
Es funktioniert in 2 Teilen. Im ersten Teil werden alle AMIs für Ubuntu Trusty abgerufen, die die verschiedenen Kriterien erfüllen (ebs, x86_64 und das Namensmuster). Es holt den Namen heraus und sortiert danach. Die Namen sind so formatiert, dass sie nach Datum sortiert werden, sodass der letzte Name der neueste ist. Dieser Name wird dann der Variablen 'name' zugewiesen.
Der zweite Teil verwendet diesen Namen, um die AMI-ID für das AMI mit diesem Namen anzufordern. Es analysiert nur die ID und weist sie 'ami_id' zu.