获取适用于AWS实例的最新AMI ID

时间:2018-07-31 10:38:26

标签: amazon-web-services amazon-ec2 autoscaling

我想在为自动缩放架构创建ec2实例时获取AWS Linux计算机的最新AMI ID。

我尝试使用aws cli获取图像类型,但是如果使用describe-images命令,它将打印出很多信息。

我的要求是仅获取映像ID,以便可以使用它来创建启动配置或使用最新的ami-id启动实例。

4 个答案:

答案 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/
  • AMI名称别名:(示例) amzn-ami-hvm-x86_64-gp2

这些:

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 CLI

一种过滤输出并仅获得所需属性的方法是使用过滤器的组合,以下是对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'

命令说明

  • 所有者:对于亚马逊的图像,请使用“ amazon”。要查询自己的图像,请使用“自我”
  • filters:您可以使用过滤器列表来过滤出您要查找的实例。我更喜欢 description ,因为我发现某些图像缺少 name 过滤器。 支持通配符。 More on filters
  • query:查询可用于仅过滤输出中需要的内容。您还可以对输出中将出现的字段进行排序。我对图像和创建日期进行了排序,以获取最后创建的图像,并过滤了 ImageId
  • output:根据您打算使用的输出方式,输出可以是 json text

使用Python

您可以使用以下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)

来自参考:

https://aws.amazon.com/blogs/compute/query-for-the-latest-amazon-linux-ami-ids-using-aws-systems-manager-parameter-store/

专门针对 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)

我在这里看到了类似的脚本

https://github.com/bwood/latest-ami/blob/master/latest-ami.py

但是由于某种原因,我在运行时会出错