我想在为自动缩放架构创建ec2实例时获取AWS Linux计算机的最新AMI ID。
我尝试使用aws
cli获取图像类型,但是如果使用describe-images
命令,它将打印出很多信息。
我的要求是仅获取映像ID,以便可以使用它来创建启动配置或使用最新的ami-id启动实例。
答案 0 :(得分:8)
最近鲜为人知的功能是Query for the latest Amazon Linux AMI IDs using AWS Systems Manager Parameter Store | AWS Compute Blog的功能。
名称空间由两部分组成:
/aws/service/ami-amazon-linux-latest/
这些:
aws ec2 describe-images --owners amazon --filters "Name=name,Values=amzn*" --query 'sort_by(Images, &CreationDate)[].Name'
Get-EC2ImageByName -Name amzn* | Sort-Object CreationDate | Select-Object Name
可以更改为:
aws ssm get-parameters --names /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 --region us-east-1
Get-SSMParameter -Name /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 -region us-east-1
此外,它可以在 CloudFormation模板中使用:
# Use public Systems Manager Parameter
Parameters :
LatestAmiId :
Type : 'AWS::SSM::Parameter::Value'
Default: ‘/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2’
Resources :
Instance :
Type : 'AWS::EC2::Instance'
Properties :
ImageId : !Ref LatestAmiId
答案 1 :(得分:3)
一种过滤输出并仅获得所需属性的方法是使用过滤器的组合,以下是对aws describe-images
命令的查询:
aws ec2 describe-images \
--owners 'amazon' \
--filters 'Name=description,Values=Amazon Linux AMI*' \
--query 'sort_by(Images, &CreationDate)[-1].[ImageId]' \
--output 'text'
命令说明:
您可以使用以下python脚本执行相同操作:
import boto3
from operator import itemgetter
client = boto3.client('ec2')
response = client.describe_images(
Filters=[
{
'Name': 'description',
'Values': [
'Amazon Linux AMI*',
]
},
],
Owners=[
'amazon'
]
)
# Sort on Creation date Desc
image_details = sorted(response['Images'],key=itemgetter('CreationDate'),reverse=True)
ami_id = image_details[0]['ImageId']
更新:
您可以使用细粒度过滤器来获得更快的响应。 @Jack的答案中提到的过滤器。
filters = [ {
'Name': 'name',
'Values': ['amzn-ami-hvm-*']
},{
'Name': 'description',
'Values': ['Amazon Linux AMI*']
},{
'Name': 'architecture',
'Values': ['x86_64']
},{
'Name': 'owner-alias',
'Values': ['amazon']
},{
'Name': 'owner-id',
'Values': ['137112412989']
},{
'Name': 'state',
'Values': ['available']
},{
'Name': 'root-device-type',
'Values': ['ebs']
},{
'Name': 'virtualization-type',
'Values': ['hvm']
},{
'Name': 'hypervisor',
'Values': ['xen']
},{
'Name': 'image-type',
'Values': ['machine']
} ]
# Use above filters
response = client.describe_images(
Filters=filters,
Owners=[
'amazon'
]
)
答案 2 :(得分:1)
来自参考:
专门针对 AWS CloudFormation:
# Use public Systems Manager Parameter
Parameters:
LatestAmiId:
Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2'
Resources:
Instance:
Type: 'AWS::EC2::Instance'
Properties:
ImageId: !Ref LatestAmiId
来自 AWS CLI:
aws ssm get-parameters-by-path --path "/aws/service/ami-amazon-linux-latest" --region us-east-1
Powershell:
Get-SSMParametersByPath -Path "/aws/service/ami-amazon-linux-latest" -region us-east-1
答案 3 :(得分:0)