

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 on 上使用云初始化 AL2
<a name="amazon-linux-cloud-init"></a>

cloud-init 程序包是由 Canonical 构建的开源应用程序，用于在云计算环境（例如 Amazon EC2）中引导 Linux 映像。Amazon Linux 包含 cloud-init 的自定义版本。这允许您指定实例在启动时应执行的操作。启动实例时，您可以通过用户数据字段将需要的操作传递到 cloud-init。这意味着您可以在许多 AMIs 用例中使用 common，并在启动时动态配置它们。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`，以便于登录和管理。
+ 准备存储库以进行程序包管理。
+ 处理用户数据中定义的软件包操作。
+ 运行在用户数据中找到的用户脚本。
+ 装载实例存储卷 (如果适用)。
  + 默认情况下，`ephemeral0` 实例存储卷装载在 `/media/ephemeral0` (如果它存在且包含有效的文件系统；否则将不会安装)。
  + 默认情况下，将装载与实例关联的所有交换卷 (仅适用于 `m1.small` 和 `c1.medium` 实例类型)。
  + 您可以使用以下 cloud-init 指令覆盖默认实例存储卷安装：

    ```
    #cloud-config
    mounts:
    - [ ephemeral0 ]
    ```

    有关对安装的更多控制，请参阅 cloud-init 文档中的[安装](http://cloudinit.readthedocs.io/en/latest/topics/modules.html#mounts)。
  + 在实例启动时，不会格式化支持 TRIM 的实例存储卷，因此，您必须先对这些卷进行分区和格式化，然后才能装载它们。有关更多信息，请参阅[实例存储卷TRIM支持](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ssd-instance-store.html#InstanceStoreTrimSupport)。您可以在启动时使用 `disk_setup` 模块对您的实例存储卷进行分区和格式化。有关更多信息，请参阅 cloud-init 文档中的[磁盘设置](http://cloudinit.readthedocs.io/en/latest/topics/modules.html#disk-setup)。

## 支持的用户数据格式
<a name="supported-user-data-formats"></a>

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` 在首轮启动过程中运行。此操作会在启动过程的后期发生 (即执行初始配置操作后)。
+ 包含文件
  + 开头为 `#include` 或 `Content-Type: text/x-include-url`。
  + 此内容是一个包含文件。该文件包含一个列表 URLs，每行一个。每一个都 URLs 被读取，它们的内容都要经过同样的规则集。从 URL 读取的内容可以是 gzip 压缩或纯文本。 MIME-multi-part
+ 云配置数据
  + 开头为 `#cloud-config` 或 `Content-Type: text/cloud-config`。
  + 此内容是云配置数据。
+ Upstart 作业（不支持） AL2
  + 开头为 `#upstart-job` 或 `Content-Type: text/upstart-job`。
  + 这些内容存储在中的文件中`/etc/init`，新贵会像处理其他暴发户一样消耗这些内容。
+ Cloud boothook
  + 开头为 `#cloud-boothook` 或 `Content-Type: text/cloud-boothook`。
  + 此内容为 boothook 数据。它存储在 `/var/lib/cloud` 下的一个文件中并会立即运行。
  +  这是最早可用的 *hook*。尚无仅供运行一次的机制。boothook 必须自行解决此问题。它的环境变量 `INSTANCE_ID` 中包含实例 ID。使用此变量提供一 once-per-instance组 boothook 数据。