我怎么知道要在 EC2 上启动什么 Ubuntu AMI?

smo*_*ser 32 cloud amazon-ec2

当我想在 EC2 上启动 Ubuntu 实例时,如何找到合适的实例?有数以千计的公共映像名称中带有“Ubuntu”。我只对运行官方 Ubuntu 映像感兴趣。我现在如何确定哪个 AMI 是正确的?

smo*_*ser 26

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 映像,请按照以下步骤操作。

  • 在左上角的“导航”下选择您想要的区域 示例:“美国东部(弗吉尼亚州)”
  • 点击“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 [kim0 in irc] 支持 https 访问https://cloud.ubuntu.com/ami

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

来源


Joh*_*rry 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
Run Code Online (Sandbox Code Playgroud)

基本上是获取用于 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 '",')
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这应该完成类似的事情,但使用 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'` (4认同)

Mar*_*ppi 1

Ubuntu 云门户上有可用官方 AMI 的完整列表。您可以在 Ubuntu 帮助中找到有关 Canonical 官方 EC2 AMI 版本的其他资源:EC2 启动指南以及 Canonical 在Ubuntu EC2 映像中发布的所有 AMI 的原始目录