我怎么知道在EC2上推出什么Ubuntu AMI?

当我想在EC2上启动Ubuntu实例时,我该如何找到合适的实例? 有成千上万的公共图像在其名称中有“Ubuntu”。 我只对运行官方Ubuntu图像感兴趣。 我现在如何选择合适的AMI?

Ubuntu作为平台的成功和Ubuntu对刷新AMI的承诺意味着Amazon EC2上有数千个图像,其名称中包含“ubuntu”。 结合“快速启动”菜单上缺少Ubuntu,使得选择正确的AMI成为一件非常重要的任务。

一些Ubuntu通用信息

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

  • Ubuntu每6个月发布一次。 每个版本都有一个版本号和一个代号。 这里要注意的最重要的事情是每2年发布一次LTS(长期支持)版本。 如果您想要稳定性和支持5年,请选择LTS版本。 如果您需要最新的软件包,请选择最新版本。 有关更多信息,请参阅维基百科条目。
  • 在撰写本文时,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进行排序并选择一个进行启动。 要在此处启动官方Ubuntu映像,请按照以下步骤操作。

  • 在左侧的“导航”下选择您想要的区域示例:“Us East(Virginia)”
  • 点击“AMI”不要点击“启动实例”[见下面的注释]
  • 对于“观看”,选择“所有图像”
  • 通过输入ubuntu-images /将结果限制为Ubuntu Stable Release图像

    您应该尽可能扩大“AMI名称”字段(可能缩小其他字段)。

  • 通过附加’。*’将结果限制为特定版本。

    例如:ubuntu-images /.* 10.04

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

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

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

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

  • validation所有者是099720109477!

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

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

笔记

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

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

资源

新版和改进版。

 # 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可信赖的所有AMI。 它拉出名称并按其排序。 这些名称的格式是按日期排序,因此最后一个将是最新的。 然后将此名称分配给“name”变量。

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

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

您可以使用https://cloud-images.ubuntu.com/locator/ec2/ ,根据版本,发布日期等提供全面的比较。

搜索所需的版本,区域并根据发布日期排序以获取最新版本。

我认为使用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不建议使用最新的可用图像,而是推荐最新的第二个或第三个。 我不知道他们在这里使用什么标准/启发式。

Ubuntu Cloud Portal上提供了可用的官方AMI的完整列表 。 您可以在Ubuntu帮助中找到有关Canonical官方EC2 AMI版本的其他资源:EC2入门指南和Canonical在Ubuntu EC2映像中发布的所有AMI的原始目录