2017-04-08 106 views
2

我遇到了,我需要得到一个特定区域的最新亚马逊ECS优化图像的EC2 AMI ID的需求的AMI-ID。是否有任何可用于选择ami-id的脚本或API,它们在创建新集群时提供?脚本或API提供最新的亚马逊ECS-优化的图像

Create Cluster page in AWS Console

所以,一旦他们用最新的AMI控制台,我不需要更新我的脚本。

回答

1

我们可以使用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 
1

我有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 

我还使用基本名称匹配的情况下,该业主增添了更多的图像类型。

0

用它们的元数据和日期打印出所有的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 
0

一个更纯粹使用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