在 on 上使用云初始化 AL2 - Amazon Linux 2
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

在 on 上使用云初始化 AL2

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

有关更多信息,请参阅 cloud-init 文档

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.smallc1.medium 实例类型)。

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

      #cloud-config mounts: - [ ephemeral0 ]

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

    • 在实例启动时,不会格式化支持 TRIM 的实例存储卷,因此,您必须先对这些卷进行分区和格式化,然后才能装载它们。有关更多信息,请参阅实例存储卷TRIM支持。您可以在启动时使用 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

    • 此内容是一个包含文件。该文件包含一个列表 URLs,每行一个。每一个都 URLs 被读取,它们的内容都要经过同样的规则集。从 URL 读取的内容可以是 gzip 压缩的 MIME-multi-part,也可以是纯文本。

  • 云配置数据

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

    • 此内容是云配置数据。

  • Upstart 作业(不支持) AL2

    • 开头为 #upstart-jobContent-Type: text/upstart-job

    • 这些内容存储在中的文件中/etc/init,新贵会像处理其他暴发户一样消耗这些内容。

  • Cloud boothook

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

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

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