

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

# 自定义 cloud-init
<a name="cloud-init"></a>

cloud-init 软件包是一个开源应用程序，可在云计算环境中引导 Linux 映像。有关更多信息，请参阅 [cloud-init 文档](https://cloudinit.readthedocs.io/en/22.2.2/)。

AL2023 包含自定义版本的 cloud-init。使用 cloud-init，您可以指定在引导时您的实例会发生什么情况。

当您启动实例时，可以使用用户数据字段将操作传递给 cloud-init。这意味着，您可以在许多使用案例中使用通用的 Amazon 机器映像 (AMI)，并在启动实例时动态配置它们。AL2023 还使用 cloud-init 来配置 `ec2-user` 账户。

AL2023 使用 `/etc/cloud/cloud.cfg.d` 和 `/etc/cloud/cloud.cfg` 中的 cloud-init 操作。您可以在 `/etc/cloud/cloud.cfg.d` 目录中创建自己的 cloud-init 操作文件。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 文档中的[装载](https://cloudinit.readthedocs.io/en/22.2.2/topics/modules.html#mounts)。
  + 当一个实例启动时，支持 TRIM 的实例存储卷不会被格式化。要装载实例存储卷，您必须对实例存储卷进行分区和格式化。

    有关更多信息，请参阅*《Amazon EC2 用户指南》*中的[实例存储卷 TRIM 支持](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ssd-instance-store.html#InstanceStoreTrimSupport)。
  +  当您启动实例时，可以使用 `disk_setup` 模块对实例存储卷进行分区和格式化。

    有关更多信息，请参阅 cloud-init 文档中的[磁盘设置](https://cloudinit.readthedocs.io/en/22.2.2/topics/modules.html#disk-setup)。

有关通过 SELinux 使用 cloud-init 的信息，请参阅[使用 cloud-init 启用 `enforcing` 模式](enforcing-mode.md#cloud-init-enforcing)。

有关 cloud-init 用户数据格式的信息，请参阅 cloud-init 文档中的[用户数据格式](https://cloudinit.readthedocs.io/en/22.2.2/topics/format.html#format)。