我遇到了,我需要得到一个特定区域的最新亚马逊ECS优化图像的EC2 AMI ID的需求的AMI-ID。是否有任何可用于选择ami-id的脚本或API,它们在创建新集群时提供?脚本或API提供最新的亚马逊ECS-优化的图像
所以,一旦他们用最新的AMI控制台,我不需要更新我的脚本。
我遇到了,我需要得到一个特定区域的最新亚马逊ECS优化图像的EC2 AMI ID的需求的AMI-ID。是否有任何可用于选择ami-id的脚本或API,它们在创建新集群时提供?脚本或API提供最新的亚马逊ECS-优化的图像
所以,一旦他们用最新的AMI控制台,我不需要更新我的脚本。
我们可以使用AWS命令行界面(CLI)获取ami-id。 api describe-images
描述可供您使用的图像。发现amazon-ecs优化图像的所有者ID是591542846629
。
下面的脚本返回该地区ap-northeast-1
最新的亚马逊ECS优化的图片ID。
name=$(aws --region ap-northeast-1 ec2 describe-images \
--owners 591542846629| awk -F ': ' '/"Name"/ { print $2 | "sort" }' \
| tr -d '",' | grep -v rc |tail -1)
ami_id=$(aws --region ap-northeast-1 ec2 describe-images --owners 591542846629 \
--filters Name=name,Values="$name" \
| awk -F ': ' '/"ImageId"/ { print $2 }' | tr -d '",')
echo $ami_id
我有jq制作安装搜索和排序更简单,更可靠:
aws --region ap-northeast-1 ec2 describe-images \
--owners 591542846629 | \
jq '.Images[] | {Name, ImageId} | select(.Name | contains("amazon-ecs-optimized"))' | \
jq -s 'sort_by(.Name) | reverse | .[0].ImageId' -r
我还使用基本名称匹配的情况下,该业主增添了更多的图像类型。
用它们的元数据和日期打印出所有的AMIs,然后选择它会更安全。 AWS CLI会限制返回的AMI数量。
这里是我的,这是与上述类似,但也有一些过滤器,也是我互换替代几个选项。
# Owners
owners=amazon
owners=aws-marketplace
owners=591542846629 # AMZN ECS
owners=microsoft
# AMI Regions
region=us-west-2
region=eu-central-1
# Amazon AMI - ECS
owners=591542846629
type="amazon-ecs-optimized"
aws ec2 describe-images \
--region ${region} \
--filters "Name=virtualization-type,Values=hvm" "Name=root-device-type,Values=ebs" \
--owners "${owners}" | jq -r '.Images[] | "\(.CreationDate) \(.Name) \(.ImageId)"' | grep "${type}" | sort -r | head
一个更纯粹使用AWS CLI,因为所有前面的例子依靠JQ和/或管道。很大程度上取自Jason Haines的评论here。
aws ec2 describe-images --owner amazon --filters 'Name=name,Values=amzn-ami-????.??.?-amazon-ecs-optimized' 'Name=state,Values=available' --query 'sort_by(Images, &CreationDate) | [-1].ImageId' --output text