脚本或 api 以提供最新的 amazon-ecs-optimized 图像的 ami-id
Script or api to provide the ami-id of the latest amazon-ecs-optimized image
我 运行 进入一个要求,我需要获取特定区域的最新 amazon-ecs-optimized 图像的 EC2 ami id。是否有任何脚本或 api 可用于选择他们在创建新集群时提供的 ami-id?
这样一旦他们用最新的 ami 更新了控制台,我就不需要更新我的脚本了。
我们可以使用 AWS 命令行界面 (CLI) 来获取 ami-id。 api describe-images
描述了您可以使用的图像。发现amazon-ecs-optimized镜像的owner id是591542846629
。
以下脚本returns 区域ap-northeast-1
中最新的amazon-ecs-optimized 图像id。
name=$(aws --region ap-northeast-1 ec2 describe-images \
--owners 591542846629| awk -F ': ' '/"Name"/ { print | "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 }' | 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
我也在使用基本名称匹配,以防该所有者添加更多图像类型。
打印出所有 AMI 及其元数据和日期,然后进行选择会更安全。 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 and/or 管道。大部分摘自 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
现在可以通过 SSM Parameter Store 完成此操作 API
例如:
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux/recommended
结合@romaninsh 和@Derek 的回答
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux/recommended | \
jq -r .Parameters[].Value | jq -r .image_id
这是使用 boto3 可以完成的方法
from operator import itemgetter
# ECS Optimized AMI to use, different per region. ID changes when an updated AMI is released.
# https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html
AMI_NAME = 'amzn-ami-????.??.?-amazon-ecs-optimized'
session = boto3.Session()
ec2_client = self.session.client('ec2', region_name='ca-central-1')
ecs_amis = ec2_client.describe_images(
Filters=[
{'Name': 'name', 'Values': [AMI_NAME, ]},
{'Name': 'state', 'Values': ['available', ]}
]
)
ecs_amis = ecs_amis.get('Images')
ecs_amis = sorted(ecs_amis, key=itemgetter('CreationDate'), reverse=True)
ami_id = ecs_amis[0]['ImageId']
并且 ami_id
现在包含根据 CreationDate 的最新 ami。干杯!
仅获取要在脚本中使用的 AMI ID 的衬里:
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux/recommended/image_id --region us-east-1 --query 'Parameters[0].Value'
这一行仅打印出指定区域的最新 ECS 优化 AMI ID。
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux/recommended --query "Parameters[].Value" --output text --region us-west-1 | jq -r '.image_id'
我 运行 进入一个要求,我需要获取特定区域的最新 amazon-ecs-optimized 图像的 EC2 ami id。是否有任何脚本或 api 可用于选择他们在创建新集群时提供的 ami-id?
这样一旦他们用最新的 ami 更新了控制台,我就不需要更新我的脚本了。
我们可以使用 AWS 命令行界面 (CLI) 来获取 ami-id。 api describe-images
描述了您可以使用的图像。发现amazon-ecs-optimized镜像的owner id是591542846629
。
以下脚本returns 区域ap-northeast-1
中最新的amazon-ecs-optimized 图像id。
name=$(aws --region ap-northeast-1 ec2 describe-images \
--owners 591542846629| awk -F ': ' '/"Name"/ { print | "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 }' | 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
我也在使用基本名称匹配,以防该所有者添加更多图像类型。
打印出所有 AMI 及其元数据和日期,然后进行选择会更安全。 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 and/or 管道。大部分摘自 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
现在可以通过 SSM Parameter Store 完成此操作 API
例如:
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux/recommended
结合@romaninsh 和@Derek 的回答
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux/recommended | \
jq -r .Parameters[].Value | jq -r .image_id
这是使用 boto3 可以完成的方法
from operator import itemgetter
# ECS Optimized AMI to use, different per region. ID changes when an updated AMI is released.
# https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html
AMI_NAME = 'amzn-ami-????.??.?-amazon-ecs-optimized'
session = boto3.Session()
ec2_client = self.session.client('ec2', region_name='ca-central-1')
ecs_amis = ec2_client.describe_images(
Filters=[
{'Name': 'name', 'Values': [AMI_NAME, ]},
{'Name': 'state', 'Values': ['available', ]}
]
)
ecs_amis = ecs_amis.get('Images')
ecs_amis = sorted(ecs_amis, key=itemgetter('CreationDate'), reverse=True)
ami_id = ecs_amis[0]['ImageId']
并且 ami_id
现在包含根据 CreationDate 的最新 ami。干杯!
仅获取要在脚本中使用的 AMI ID 的衬里:
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux/recommended/image_id --region us-east-1 --query 'Parameters[0].Value'
这一行仅打印出指定区域的最新 ECS 优化 AMI ID。
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux/recommended --query "Parameters[].Value" --output text --region us-west-1 | jq -r '.image_id'