Phiên bản mới và cải tiến.
# 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
Về cơ bản lấy dữ liệu thô được sử dụng cho trang tìm kiếm ami của Ubuntu và sử dụng jq để phân tích hàng tôi muốn sau đó một grep để lấy giá trị. Nhanh hơn nhiều so với phiên bản cũ.
-- phiên bản gốc
Đây là một ví dụ khác. Tôi chỉ viết cái này để lấy id AMI đáng tin cậy mới nhất. Nó sử dụng công cụ aws cli để truy vấn API, sử dụng thực tế là các tên sắp xếp theo thứ tự ngày để có bản mới nhất.
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 '",')
Nó hoạt động trong 2 phần. Phần đầu tiên nhận được tất cả các AMI cho ubfox đáng tin cậy đáp ứng các tiêu chí khác nhau (ebs, x86_64 và mẫu tên). Nó lấy ra Tên và sắp xếp theo nó. Các tên được định dạng để sắp xếp chúng theo ngày để cái cuối cùng sẽ là cái mới nhất. Tên này sau đó được gán cho biến 'name'.
Phần thứ hai sử dụng tên đó để yêu cầu ID AMI cho AMI với tên đó. Nó phân tích cú pháp chỉ id và gán nó cho 'ami_id'.