代码之家  ›  专栏  ›  技术社区  ›  Vaulstein MUGABA

获取AWS实例的最新AMI ID

  •  0
  • Vaulstein MUGABA  · 技术社区  · 6 年前

    我想在为自动缩放体系结构创建ec2实例时获取AWS Linux机器的最新ami id。

    我在尝试 aws cli来获取图像类型,但是如果我使用 describe-images 命令。

    我的要求是只获取映像id,这样我就可以使用它创建一个启动配置或使用最新的ami-id启动一个实例。

    3 回复  |  直到 6 年前
        1
  •  12
  •   John Rotenstein    6 年前

    最近一个鲜为人知的特性是 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 U 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
    

    另外,它可以用于 云形成模板 :

    # 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
    
        2
  •  6
  •   Vaulstein MUGABA    6 年前

    AWS客户端

    过滤输出并获取所需属性的一种方法是在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'
    

    命令解释 :

    • 所有者:对于亚马逊的图片,使用“亚马逊”。要查询自己的图像,请使用“self”
    • 筛选器:可以使用筛选器列表筛选出要查找的实例。我更喜欢 描述 因为我找到了 名称 某些图像缺少筛选器。 价值观 支持通配符。 More on filters
    • 查询:查询只能用于筛选输出中所需的内容。您还可以对输出中出现的字段进行排序。我已经对图像和创建日期进行了排序,以获取最后创建的图像并筛选 图像ID
    • 输出:输出可以是 json格式 文本 根据你的消费计划。

    使用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']
    

    更新:

    您可以使用细粒度过滤器以获得更快的响应。“杰克的答案”中提到的过滤器。

    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'
      ]
    )
    
        3
  •  0
  •   Jack    6 年前

    我在这里看到一个类似的剧本

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

    但是由于某些原因,当运行时,我会得到错误