我如何知道要在EC2上启动的Ubuntu AMI?


Answers:


26

Ubuntu作为平台的成功以及Ubuntu对刷新AMI的承诺意味着,在Amazon EC2上确实有成千上万个带有“ ubuntu”名称的图像。加上“快速入门”菜单上缺少Ubuntu,这使得选择正确的AMI变得不容易。

一些一般的Ubuntu信息

您可能已经知道这些项目,但是我想为刚开始使用Ubuntu或EC2的用户指出这些项目。

  • Ubuntu每6个月发布一次。每个发行版都有一个版本号和一个代号。这里要注意的最重要的事情是每两年发布一次LTS(长期支持)。如果需要5年的稳定性和支持,请选择LTS版本。如果需要最新软件包,请选择最新版本。有关更多信息,请参见Wikipedia条目。
  • 在撰写本文时,Amazon EC2中有5个“区域”。每个区域代表一个地理位置。每个区域都有其自己的AMI ID。每个区域内有2种体系结构(x86_64,i386)和2种“根存储”类型(EBS或实例)。这意味着对于Ubuntu发行版的每个版本,我们都会生成20个ami id。

最简单:从Web浏览器中查找AMI

您可以选择用于选择图像的界面。转到任一:

  • http://cloud.ubuntu.com/ami

    在此页面的底部,您可以选择区域,版本,拱形或根存储。您仅在此处显示最新版本。做出选择后,您可以复制并粘贴AMI编号,或直接单击它以转到该AMI的EC2控制台启动页面。

要么

  • https://cloud-images.ubuntu.com/server/releases/
    • 按编号或代号选择您的发行
    • 选择'release /':我们保留历史版本以进行调试,但是'release /'目录将始终是最新的。
    • 从表中选择您的AMI,然后单击以在控制台中启动或复制并粘贴命令行。

通过Amazon EC2控制台搜索

EC2控制台是通过图形方式对AMI进行排序并选择要启动的AMI。要在此处启动官方Ubuntu映像,请按照以下步骤操作。

  • 在“导航”下的左上角选择所需的区域。示例:“美国东部(弗吉尼亚州)”
  • 点击“AMI的”待办事项单击“启动实例” [见下文附注]
  • 对于“查看”,选择“所有图像”
  • 通过输入ubuntu-images /将结果限制为Ubuntu稳定发行版映像

    您应将“ AMI名称”字段扩展为尽可能宽的范围(也许缩小其他范围)。

  • 通过添加“。*”将结果限制为特定版本。

    例如:ubuntu-images /.* 10.04

  • 通过附加'。* i386'或'。* amd64'将结果限制为给定的拱门

    注意:如果要运行m1.small或c1.medium,则需要“ i386”。如果要运行t1.micro,则需要选择“ ebs”图像。

  • 按AMI名称对结果进行排序并进行选择

    通过按AMI名称排序,您可以更轻松地查看给定集合的最新AMI。每个AMI以YYYYMMDD格式(年,月,日)结尾。您需要最新的。

  • 验证所有者是099720109477!

    任何用户都可以使用任何名称注册AMI。没有什么可以阻止恶意用户注册与上面的搜索匹配的AMI。因此,为了安全起见,您需要验证ami的所有者是“ 099720109477 ”。

  • 如果“所有者”不适合您,请单击右上角的“显示/隐藏”,然后选择“所有者”以显示。
  • 单击AMI名称,然后单击“启动”

笔记

  • HTTPS访问:在以上选项中,目前https://cloud-images.ubuntu.com/server/releases/是唯一通过https提供数据的选项。如果您在查找AMI ID时担心潜在的“中间人”攻击,这对您可能很重要。我已请求Ahmed [irc中的kim0]支持对https://cloud.ubuntu.com/ami的 https访问。

  • Web控制台“启动实例”对话框:在“启动实例”对话框中看不到所有者ID。因为如果这样,我建议不要使用该对话框来查找“社区AMI”。根本无法从控制台中可靠地知道映像的所有者是谁。对于高级用户,我将在不久的将来写博客,以编程方式找到AMI [提示]。

资源


请问您hvm-instance和之间的区别是否正确hvm-ssd?恐怕“实例”的意思是“准虚拟”,但不确定,也找不到有关它的信息。此外,它可以是有用的注意,https://cloud-images.ubuntu.com/locator/优惠过滤器......在页面的底部
Balmipour

11

新的和改进的版本。

# needed as json list returned by ubuntu site is mal-formed
remove_last_comma() { sed '
        $x;$G;/\(.*\),/!H;//!{$!d
    };  $!x;$s//\1/;s/^\n//'
}

curl -s "https://cloud-images.ubuntu.com/locator/ec2/releasesTable" \
    | remove_last_comma \
    | jq -c '.aaData[] | select(contains(["16.04", "us-west-2", "hvm:ebs"]))' \
    | grep -o 'ami-[a-z0-9]\+' | head -1

基本上是获取用于ubuntu的ami查找页面的原始数据,并使用jq解析出我想要的行,然后使用grep提取值。比旧版本快得多。


-原始版本

这是另一个例子。我只是写这个来获取最新的可信赖的AMI id。它使用aws cli工具查询API,使用名称按日期顺序排序以获取最新信息的事实。

name=$(\
    aws --region us-west-2 ec2 describe-images --owners 099720109477 \
        --filters Name=root-device-type,Values=ebs \
            Name=architecture,Values=x86_64 \
            Name=name,Values='*hvm-ssd/ubuntu-trusty-14.04*' \
    | awk -F ': ' '/"Name"/ { print $2 | "sort" }' \
    | tr -d '",' | tail -1)

ami_id=$(\
    aws --region us-west-2 ec2 describe-images --owners 099720109477 \
        --filters Name=name,Values="$name" \
    | awk -F ': ' '/"ImageId"/ { print $2 }' | tr -d '",')

它分为两个部分。第一部分获得满足各种标准(ebs,x86_64和名称模式)的所有适用于ubuntu trusty的AMI。它拉出名称并按其排序。名称经过格式化,以便按日期对它们进行排序,因此最后一个将是最新的。然后将此名称分配给“名称”变量。

第二部分使用该名称为具有该名称的AMI请求AMI ID。它仅解析id并将其分配给'ami_id'。


您能解释一下这是什么吗?
卡兹·沃尔夫

在答案中添加了解释。
John Eikenberry 2014年

4
这应该可以完成类似的工作,但是要使用JMESPath查询表达式:aws --region us-west-2 ec2 describe-images --owners 099720109477 --filters Name=root-device-type,Values=ebs Name=architecture,Values=x86_64 Name=name,Values='*hvm-ssd/ubuntu-trusty-14.04*' --query 'sort_by(Images, &Name)[-1].ImageId'
dnlbrky 2015年

4

使用ruby aws-sdk,您可以以编程方式发现最新的Ubuntu AMI,例如

    ec2 = AWS::EC2.new

    root_device_type = "ebs"
    ami_owner = '099720109477'
    ami_name = "*ubuntu/images/#{root_device_type}/ubuntu-precise-12.04*"  # hardcoded to ubuntu 12.04. You can apply your own criteria here.

    AWS.memoize do
      linux_ami = ec2.images.with_owner(ami_owner).
        filter("root-device-type", root_device_type).
        filter("architecture", "x86_64").        # use 'i386' for 32 bit and 'x86_64' for 64 bit
        filter("name", ami_name)
        # this only makes one request due to memoization
      begin
        return linux_ami.to_a.sort_by(&:name).last
      rescue
        abort red "Error discovering latest AMI. Terminating."
      end
    end



1

我认为通过使用ec2_ami_find模块来演示如何与Ansible一起使用来进行此操作将很有用。

在撰写本文时(2017-06-07),在ap-southeast-2区域中,如果您从控制台手动启动EC2实例,则AWS将建议这些Ubuntu LTS映像:

  • Ubuntu Server 16.04 LTS(HVM),SSD卷类型-AMI-96666FF5
  • Ubuntu Server 14.04 LTS(HVM),SSD卷类型-AMI-807876E3

这与他们有关使用HVM虚拟化和EBS支持的SSD卷的建议相一致。

为了获得最佳性能,我们建议您在启动实例时使用当前代实例类型和HVM AMI。

要获得与AWS建议相同的AMI,您可以使用以下任务:

- name: Find the most recent xenial AMI
  ec2_ami_find:
    aws_access_key: "{{ vault_aws_access_key }}"
    aws_secret_key: "{{ vault_aws_secret_key }}"
    region: "{{ config_region }}"
    name: "ubuntu/images/hvm-ssd/ubuntu-xenial-16.04-amd64-server-*"
    owner: 099720109477 # canonical ownerid
    virtualization_type: hvm
    sort: name
    sort_order: descending
    sort_end: 2
  register: ami_find_xenial

- name: Newest Xenial AMI
  debug:
    msg: "{{ ami_find_xenial.results[0].ami_id }}"

- name: AWS recommend Xenial AMI
  debug:
    msg: "{{ ami_find_xenial.results[1].ami_id }}"

- name: Find the most recent trusty AMI
  ec2_ami_find:
    aws_access_key: "{{ vault_aws_access_key }}"
    aws_secret_key: "{{ vault_aws_secret_key }}"
    region: "{{ config_region }}"
    name: "ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-*"
    owner: 099720109477 # canonical ownerid
    virtualization_type: hvm
    architecture: x86_64
    sort: name
    sort_order: descending
    sort_end: 3
  register: ami_find_trusty

- name: Newest Trusty AMI
  debug:
    msg: "{{ ami_find_trusty.results[0].ami_id }}"

- name: AWS recommend Trusty AMI
  debug:
    msg: "{{ ami_find_trusty.results[2].ami_id }}"

给出以下输出:

TASK [Load secrets from Vault] *****************************************************************************************************************************************************************************
ok: [localhost]

TASK [Find the most recent xenial AMI] *********************************************************************************************************************************************************************
ok: [localhost]

TASK [Newest Xenial AMI] ***********************************************************************************************************************************************************************************
ok: [localhost] => {
    "changed": false, 
    "msg": "ami-1e01147d"
}

TASK [AWS recommended Xenial AMI] **************************************************************************************************************************************************************************
ok: [localhost] => {
    "changed": false, 
    "msg": "ami-96666ff5"
}

TASK [Find the most recent trusty AMI] *********************************************************************************************************************************************************************
ok: [localhost]

TASK [Newest Trusty AMI] ***********************************************************************************************************************************************************************************
ok: [localhost] => {
    "changed": false, 
    "msg": "ami-993e2bfa"
}

TASK [AWS recommended Trusty AMI] **************************************************************************************************************************************************************************
ok: [localhost] => {
    "changed": false, 
    "msg": "ami-807876e3"
}

如果您比较剧本返回的AMI ID,则可以看到AWS不推荐最新的可用映像,而是推荐第二或第三最新的映像。我不知道他们在这里使用什么标准/启发式方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.