Amazon Elastic Compute Cloud
Linux 实例用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

Amazon Linux

Amazon Linux 由 Amazon Web Services (AWS) 提供。它旨在为 Amazon EC2 上运行的应用程序提供稳定、安全和高性能的执行环境。此外,它还包括让您能够与 AWS 轻松集成的软件包,包括启动配置工具和许多常见的 AWS 库及工具。AWS 为运行 Amazon Linux 的所有实例提供持续的安全性和维护更新。

注意

对 Amazon Linux AMI 存储库结构进行了配置以提供不间断的更新,可让您从一个版本的 Amazon Linux AMI 更新到下一版本。要将现有实例锁定到当前版本,请参阅 存储库配置

要启动 Amazon Linux 实例,请使用 Amazon Linux AMI。AWS 向 Amazon EC2 用户提供 Amazon Linux AMI,无需额外费用。

查找 Amazon Linux AMI

有关最新 Amazon Linux AMI 的列表,请参阅 Amazon Linux AMI

订阅 Amazon Linux AMI 通知

如果您希望在新 Amazon Linux AMI 发布时接收相关通知,可以使用 Amazon SNS 订阅这些通知。

订阅 Amazon Linux AMI 通知

  1. 通过以下网址打开 Amazon SNS 控制台:https://console.amazonaws.cn/sns/v2/home

  2. 在导航栏中,将区域更改为 美国东部(弗吉尼亚北部) (如果需要)。您必须选择此区域,因为您订阅的 SNS 通知是在此区域中创建的。

  3. 在导航窗格中,选择 Subscriptions

  4. 选择 Create subscription

  5. 对于 Create subscription 对话框,执行以下操作:

    1. 对于 Topic ARN,复制并粘贴以下 Amazon 资源名称 (ARN):arn:aws:sns:us-east-1:137112412989:amazon-linux-ami-updates

    2. 对于 Protocol,选择 Email

    3. 对于 Endpoint,键入可用于接收通知的电子邮件地址。

    4. 选择 Create subscription

  6. 您将收到一封包含主题行 AWS Notification - Subscription Confirmation 的确认电子邮件。打开电子邮件,然后单击 Confirm subscription 以完成订阅。

每当发布新的 Amazon Linux AMI 时,我们都会向订阅 amazon-linux-ami-updates 主题的用户发送通知。如果您不希望再收到这些通知,请通过以下步骤取消订阅。

取消订阅 Amazon Linux AMI 通知

  1. 通过以下网址打开 Amazon SNS 控制台:https://console.amazonaws.cn/sns/v2/home

  2. 在导航栏中,将区域更改为 美国东部(弗吉尼亚北部) (如果需要)。由于 SNS 通知在此区域中创建,您必须使用此区域。

  3. 在导航窗格中,选择 Subscriptions

  4. 选择订阅,然后选择 ActionsDelete subscriptions,在提示确认时,选择 Delete

启动并连接到 Amazon Linux 实例

找到您需要的 AMI 后,记下 AMI ID。您可以使用 AMI ID 来启动,然后连接到您的实例。

默认情况下,Amazon Linux 不支持远程根 SSH。此外,密码验证已禁用,以防止强力 (brute-force) 密码攻击。要在 Amazon Linux 实例上启用 SSH 登录,您必须在实例启动时为其提供密钥对。您还必须设置用于启动实例的安全组以允许 SSH 访问。默认情况下,唯一可以使用 SSH 进行远程登录的账户是 ec2-user;此账户还拥有 sudo 特权。如果您希望启动远程根登录,请注意,其安全性不及依赖密钥对和二级用户。

有关启动和使用 Amazon Linux 实例的信息,请参阅启动实例。有关连接到 Amazon Linux 实例的更多信息,请参阅连接到 Linux 实例

识别 Amazon Linux AMI 映像

每个映像都包含唯一的 /etc/image-id,用于识别 AMI。此文件包含有关映像的信息。

以下是 /etc/image-id 文件的示例:

[ec2-user ~]$ cat /etc/image-id image_name="amzn-ami-hvm" image_version="2017.09" image_arch="x86_64" image_file="amzn-ami-hvm-2017.09.0.20170930-x86_64.ext4.gpt" image_stamp="2cb1-42fd" image_date="20171001085438" recipe_name="amzn ami" recipe_id="2eae227c-4a8b-749a-6eb1-0ec0-2ca0-c60d-5ca6b2ab"

image_nameimage_versionimage_arch 项目来自 Amazon 用于构建映像的构建配方。image_stamp 只是映像创建期间随机生成的唯一十六进制值。image_date 项目的格式为 YYYYMMDDhhmmss,是映像创建时的 UTC 时间。recipe_namerecipe_id 是 Amazon 用于构建映像的构建配方的名称和 ID,用于识别当前运行的 Amazon Linux 的版本。当您从 yum 存储库安装更新时,此文件不会更改。

Amazon Linux 包含 /etc/system-release 文件,用于指定当前已安装的版本。此文件通过 yum 进行更新,是 system-release RPM 的一部分。

以下是 /etc/system-release 文件的示例:

[ec2-user ~]$ cat /etc/system-release Amazon Linux AMI release 2017.09

Amazon Linux 还包含在 /etc/system-release 中找到的 /etc/system-release-cpe 文件的机器可读版本,并且遵循 MITRE 的 CPE 规范 (CPE)。

包含的 AWS 命令行工具

以下常用 AWS 集成命令行工具及使用方法已包含在 Amazon Linux 或默认存储库中:

  • aws-amitools-ec2

  • aws-apitools-as

  • aws-apitools-cfn

  • aws-apitools-ec2

  • aws-apitools-elb

  • aws-apitools-iam

  • aws-apitools-mon

  • aws-apitools-rds

  • aws-cfn-bootstrap

  • aws-cli

  • aws-scripts-ses

最低版本 Amazon Linux (amzn-ami-minimal-*) 不包含以上包;但您可以在默认 yum 存储库中找到它们并使用以下命令安装:

[ec2-user ~]$ sudo yum install -y package_name

对于使用 IAM 角色启动的实例,提供了一个简单脚本,用于在安装证书文件后准备 AWS_CREDENTIAL_FILEJAVA_HOMEAWS_PATHPATH 和产品特定的环境变量,以简化这些工具的配置。

此外,为了支持您安装多个版本的 API 和 AMI 工具,我们还在 /opt/aws 中提供了指向所需工具版本的符号链接,如下所述:

/opt/aws/bin

指向每个已安装工具目录中的 /bin 目录的符号链接。

/opt/aws/{apitools|amitools}

产品安装在形式为 name--version 的目录中,符号链接 name 附加到最近安装的版本。

/opt/aws/{apitools|amitools}/name/environment.sh

/etc/profile.d/aws-apitools-common.sh 用于设置产品特定的环境变量,如 EC2_HOME

cloud-init

cloud-init 软件包是由 Canonical 构建的开源应用程序,用于在云计算环境 (例如 Amazon EC2) 中引导启动 Linux 映像。Amazon Linux 包含自定义版 cloud-init。它使您能够指定实例启动时应执行的操作。启动实例时,您可以通过用户数据字段将需要的操作传递到 cloud-init。这意味着,您可以在许多用例中使用普通 AMI,并在启动时进行动态配置。Amazon Linux 还使用 cloud-init 来执行 ec2-user 账户的初始配置。

有关 cloud-init 的更多信息,请参阅 http://cloudinit.readthedocs.org/en/latest/

Amazon Linux 使用 /etc/cloud/cloud.cfg.d/etc/cloud/cloud.cfg 中的 cloud-init 操作。您可以在 /etc/cloud/cloud.cfg.d 中创建自己的 cloud-init 操作文件。此目录中的所有文件由 cloud-init 读取。它们是按词典顺序进行读取的,并且文件随后将覆盖之前文件中的值。

cloud-init 程序包将在启动时对实例执行这些 (以及其他) 常见配置任务:

  • 设置默认区域设置

  • 设置主机名

  • 解析并处理用户数据

  • 生成主机私有 SSH 密钥

  • 将用户的公有 SSH 密钥添加到 .ssh/authorized_keys,以便于登录和管理

  • 准备 yum 存储库以进行程序包管理

  • 处理用户数据中定义的软件包操作

  • 执行在用户数据中找到的用户脚本

  • 装载实例存储卷 (如果适用)

    • 默认情况下,ephemeral0 实例存储卷装载在 /media/ephemeral0 (如果它存在且包含有效的文件系统;否则将不会安装)。

    • 默认情况下,将装载与实例关联的所有交换卷 (仅适用于 m1.smallc1.medium 实例类型)。

    • 您可以使用以下 cloud-init 指令覆盖默认实例存储卷装载:

      #cloud-config mounts: - [ ephemeral0 ]

      有关对装载的更多控制,请参阅 cloud-init 文档中的安装

    • 在实例启动时,不会格式化支持 TRIM 的实例存储卷,因此,您必须先对这些卷进行分区和格式化,然后才能装载它们。有关更多信息,请参阅 实例存储卷 TRIM 支持。您可以在启动时使用 cloud-init disk_setup 模块对您的实例存储卷进行分区和格式化。有关更多信息,请参阅 cloud-init 文档中的磁盘设置

支持的用户数据格式

cloud-init 软件包可处理多种格式的用户数据:

  • Gzip

    • 如果用户数据是经过 gzip 压缩过的,cloud-init 可解压缩数据,并进行适当处理。

  • MIME 多部分内容型

    • 使用 MIME 多部分内容型文件,您可以指定多种数据类型。例如,您可以指定用户数据脚本和云配置类型。如果分段文件是受支持的格式,则 cloud-init 可以处理其每个段。

  • Base64 解码

    • 如果用户数据使用 base64 编码,cloud-init 可确定它能否将解码后的数据理解为一种受支持的类型。如果它能理解解码后的数据,则会解码数据,并进行适当处理。如果不能,它将完整地返回 base64 数据。

  • 用户数据脚本

    • 开头为 #!Content-Type: text/x-shellscript

    • 该脚本由 /etc/init.d/cloud-init-user-scripts 在首轮启动过程中执行。此操作会在启动过程的后期发生 (即执行初始配置操作后)。

  • 包含文件

    • 开头为 #includeContent-Type: text/x-include-url

    • 此内容是一个包含文件。该文件包含一个 URL 列表,每行一个 URL。系统会读取每个 URL,其内容会通过此相同规则集验证。从 URL 读取的内容可使用 gzipp 进行压缩、采用 MIME 分段处理或存储为纯文本。

  • 云配置数据

    • 开头为 #cloud-configContent-Type: text/cloud-config

    • 此内容是云配置数据。查看示例以了解受支持配置格式的带有注释的示例。

  • Cloud Boothook

    • 开头为 #cloud-boothookContent-Type: text/cloud-boothook

    • 此内容为 boothook 数据。它存储在 /var/lib/cloud 下的一个文件中并会立即执行。

    • 这是最早可用的 "hook"。请注意,尚无仅供运行一次的机制。boothook 必须自行解决此问题。它的环境变量 INSTANCE_ID 中包含实例 ID。可使用此变量来提供一组一个实例可用一次的 boothook 数据。

存储库配置

从 2011.09 版 Amazon Linux 开始,Amazon Linux AMI 被当作时间快照处理,因此当您运行 yum update -y 时,存储库和更新结构可始终为您提供最新的软件包。

存储库结构进行了配置以提供不间断的更新流,可让您从一个版本的 Amazon Linux 滚动到下一版本。举例来说,如果从较旧版本的 Amazon Linux AMI (如 2017.03 或更低版本) 启动实例并运行 yum update -y,则会得到最新程序包。

您可通过启用 lock-on-launch 功能禁用 Amazon Linux 滚动更新。lock-on-launch 功能会锁定您最近启动的实例,使其仅接收来自指定版本的 AMI 的更新。举例来说,您可以启动 2017.03 AMI,使其仅接收早于 2017.09 AMI 发布的更新,直至您准备好迁移到 2017.09 AMI 为止。要在新实例中启用 lock-on-launch 功能,请使用 Amazon EC2 控制台或带有 cloud-init 标志的 ec2-run-instances 命令启动它,同时将以下用户数据传递到 -f

重要

如果将 AMI 锁定到并非 latest 的存储库版本,则您不会收到任何后续更新。接收 Amazon Linux AMI 的连续更新流的唯一方式是使用最新的 AMI,或持续更新您的旧 AMI,使存储库指向 latest

#cloud-config repo_releasever: 2017.03

将现有实例锁定在当前 AMI 版本

  1. 编辑 /etc/yum.conf.

  2. 评论 releasever=latest

  3. 运行 yum clean all,以清除缓存。

添加软件包

Amazon Linux 可与每个 Amazon EC2 区域中托管的在线软件包存储库结合使用。这些存储库为 Amazon Linux AMI 中的软件包提供持续更新,并可再访问数百个常见的开源服务器应用程序。所有区域都提供这些存储库,可使用 yum 更新工具访问,Amazon Linux AMI 软件包站点 也有提供。通过在每个地区托管存储库,我们可以快速部署更新,不会产生任何数据传输费。通过发出 yum 命令可安装软件包,如下例所示:

[ec2-user ~]$ sudo yum install httpd

系统配置了对 Extra Packages for Enterprise Linux (EPEL) 存储库的访问权限,但默认情况下没有启用。除了 Amazon Linux 存储库中的软件包以外,EPEL 还提供了第三方软件包。AWS 不支持第三方软件包。

如果您发现 Amazon Linux 中没有您需要的应用程序,可以直接在 Amazon Linux 实例上安装该应用程序。Amazon Linux 使用 RPM 和 yum 进行软件包管理,这可能是最简单的新应用程序安装方式。您始终应该首先查看我们的中央 Amazon Linux 存储库,确定其中是否有您需要应用程序,因为许多应用程序在那里都可以找到。您可以轻松地将这些应用程序添加到 Amazon Linux 实例。

要将应用程序上传到正在运行的 Amazon Linux 实例,请使用 scpsftp,然后通过登录实例来配置应用程序。您还可以使用内置 PACKAGE_SETUP 软件包中的 cloud-init 操作,在实例启动期间上传应用程序。有关更多信息,请参阅 cloud-init

重要

如果您的实例在 Virtual Private Cloud (VPC) 中运行,则必须将 Internet 网关附加到 VPC,才能连接您的 yum 存储库。有关更多信息,请参阅 Amazon VPC 用户指南 中的 Internet 网关

访问源软件包获取参考信息

您可以使用 Amazon Linux 中提供的工具,查看您已在实例上安装的软件包的源,获取参考信息。您可以查看 Amazon Linux 和在线软件包存储库中包含的全部软件包的源软件包。只需确定您要安装的源软件包的名称,并使用 yumdownloader --source 命令在您正在运行的实例中查看源。例如:

[ec2-user ~]$ yumdownloader --source -p bash

以下为示例响应:

Requested package: bash Found package from local RPM database: bash-4.2.46-28.37.amzn1.x86_64 Corresponding source RPM to found package : bash-4.2.46-28.37.amzn1.src.rpm Are these parameters correct? Please type 'yes' to continue: yes Source RPM downloaded to: /usr/src/srpm/debug/bash-4.2.46-28.37.amzn1.src.rpm

源 RPM 位于实例的 /usr/src/srpm/debug 目录中。您可以在那里进行解压缩,并可以使用标准 RPM 工具查看源树进行参考。完成调试之后,该软件包可供使用。

重要

如果您的实例在 Virtual Private Cloud (VPC) 中运行,则必须将 Internet 网关附加到 VPC,才能连接您的 yum 存储库。有关更多信息,请参阅 Amazon VPC 用户指南 中的 Internet 网关

开发应用程序

Amazon Linux 的 yum 存储库中提供了一套完整的 Linux 开发工具。要在 Amazon Linux 上开发应用程序,请通过 yum 选择所需的开发工具。另外,许多在 CentOS 和其他类似发行版上开发的应用程序应该可以在 Amazon Linux 上运行。

实例存储访问

实例存储硬盘 ephemeral0 只能装载在由 Amazon 实例存储支持的 AMI 上的 /media/ephemeral0 中。这与在 /mnt 下装载实例存储硬盘的许多其他映像不同。

产品生命周期

Amazon Linux AMI 定期进行更新,增强了安全性及功能。如果您不需要在 Amazon Linux 实例上保留数据或自定义项,只需用最新 Amazon Linux AMI 重新启动新实例即可。如果您需要保留 Amazon Linux 实例的数据或自定义项,可以通过 Amazon Linux yum 存储库维护这些实例。yum 存储库包含所有已更新软件包。您可以选择将这些更新应用到正在运行的实例中。

即使新版本发布后,旧版的 AMI 和更新软件包仍继续可用。在某些情况下,如果您需要针对旧版 Amazon Linux 的支持,则通过 AWS Support,作为支持流程的一部分,我们可能会要求您迁移到较新的版本。

安全更新

安全更新通过 Amazon Linux AMI yum 存储库及更新的 Amazon Linux AMI 提供。Amazon Linux AMI 安全中心会发布安全警报。有关 AWS 安全策略的更多信息,或要报告安全问题,请访问 AWS 安全中心

Amazon Linux AMI 已配置为在启动时下载和安装安全更新。此操作是通过名为 cloud-initrepo_upgrade 设置控制的。以下 cloud-init 配置片段显示如何修改传递到实例初始化的用户数据文本中的设置:

#cloud-config repo_upgrade: security

repo_upgrade 设置可能会有以下值:

security

应用 Amazon 标记为安全更新的重要更新。

bugfix

应用 Amazon 标记为缺陷修正的更新。缺陷修正是一组较大的更新,其中包括安全更新和针对各种其他小漏洞的修正更新。

all

应用全部适用更新 (不论类别)。

none

实例启动时不应用任何更新。

repo_upgrade 的默认设置是安全的。也就是说,如果您不在用户数据中指定其他值,默认情况下,Amazon Linux AMI 在启动时执行适用于当时所有已安装软件包的安全升级。Amazon Linux AMI 还会在您使用 /etc/motd 文件登录时,通过列出可用更新的数量,通知您已安装程序包的所有更新。要安装这些更新,您需要在实例上运行 sudo yum upgrade

重要

如果您的实例在 Virtual Private Cloud (VPC) 中运行,则必须将 Internet 网关附加到 VPC,才能连接您的 yum 存储库。有关更多信息,请参阅 Amazon VPC 用户指南 中的 Internet 网关

支持

AWS Support 订阅包含对安装和使用基础 Amazon Linux AMI 的支持。有关更多信息,请参阅 AWS Support

建议您将有关 Amazon Linux 的任何问题发布到 Amazon EC2 forum