本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建映像配方的新版本
本节向您介绍如何创建图像配方或现有食谱的新版本。映像配方定义了基本 AMI、构建组件和配置。使用此配方使用映像生成器创建亚马逊系统映像 (AMI)。您可以通过图像生成器控制台或使用创建图像配方 AWS CLI。
通过控制台创建新的映像配方版本
当您创建新的配方版本时,它与创建新配方的操作几乎相同。不同之处在于,在大多数情况下,为匹配基础配方,某些详细信息都是预先选择的。以下列表描述创建新配方和创建现有配方的新版本之间的区别。
新版本中的基础配方详细信息
-
名称 - 不可编辑。
-
版本 - 必填。输入要创建的版本号,格式为 <major>.<minor>.<patch>。Image Builder 支持配方版本自动递增,允许您在配方版本中使用通配符模式。当您使用通配符版本(例如)创建配方时
1.0.x,Image Builder 会自动递增版本号(例如1.0.11.0.2、1.0.3、、等)。这样就无需手动跟踪和增加配方版本。 -
选择图像选项 — Pre-selected,但您可以对其进行编辑。如果您更改对基础映像来源的选择,则可能会丢失其他详细信息,这些详细信息取决于您选择的原始选项。
要查看与您的基础映像选择相关的详细信息,请选择与您的选择相匹配的选项卡。
-
实例配置 - 设置是预先选择的,但您可以对其进行编辑。
-
Systems Manager 代理 – 您可以选中或清除此复选框来控制在新映像上安装 Systems Manager 代理。默认情况下,此复选框保持清除,映像生成器会将系统管理器代理保留在您的最终 AMI 中。要从最终映像中删除 Systems Manager 代理,请选中该复选框。
-
用户数据 – 当您启动构建实例时,可以使用此区域以提供要运行的命令或命令脚本。但是,此值会替换 Image Builder 可能添加的任何命令,以确保安装 Systems Manager。这些命令包括 Image Builder 通常在创建新映像之前为 Linux 映像运行的清理脚本。
当 Image Builder 启动实例时,用户数据脚本将在云初始化阶段,即组件开始执行之前运行。此步骤将记录到实例上的以下文件中:
var/log/cloud-init.log。注意
-
如果您要输入用户数据,请确保在您的基础映像上预先安装 Systems Manager 代理,或者将安装的内容包含在您的用户数据中。
-
对于 Linux 映像,请通过创建一条在用户数据脚本中命名为
perform_cleanup的空文件的命令,以确保运行清理步骤。Image Builder 会检测到此文件,并在创建新映像之前运行清理脚本。有关更多信息和示例脚本,请参阅 Image Builder 的安全最佳实践。
-
-
-
工作目录 — Pre-selected,但您可以对其进行编辑。
-
组件 - 已包含在配方中的组件显示在每个组件列表(构建和测试)末尾的选定组件部分中。您可以移除所选组件或对其重新排序,以满足您的需要。
CIS 加固组件未遵循 Image Builder 配方中的标准组件排序规则。CIS 强化组件始终最后运行,以确保基准测试针对您的输出映像运行。
注意
构建和测试组件列表根据组件所有者类型显示可用组件。要添加组件,请选择添加编译组件,然后选择适用的所有权筛选条件。例如,要添加与 AWS Marketplace 产品关联的构建组件,请选择
AWS Marketplace。这将在控制台界面右侧打开一个列出 AWS Marketplace 组件的选择面板。对于 CIS 组件,选择
Third party managed。您可以为自己的所选组件配置以下设置:
-
版本控制选项 — Pre-selected,但您可以对其进行更改。我们建议您选择使用最新的可用组件版本选项,以确保您的映像版本始终使用最新版本的组件。如果您需要在配方中使用特定的组件版本,则可以选择指定组件版本,然后在出现的组件版本框中输入版本。
-
输入参数 - 显示组件接受的输入参数。该值预先填充了配方先前版本中的值。如果您在此配方中首次使用此组件,并且已为该输入参数定义了默认值,则默认值以灰色文本显示在值框中。如果未输入其他值,Image Builder 将使用默认值。
如果需要输入参数,但组件中未定义默认值,则必须提供一个值。如果缺少任何必需的参数且未定义默认值,Image Builder 将不会创建配方版本。
重要
组件参数是纯文本值,并且已记录在 AWS CloudTrail中。我们建议您使用 AWS Secrets Manager 或 AWS Systems Manager 参数存储来存储您的密钥。有关 Secrets Manager 的更多信息,请参阅AWS Secrets Manager 用户指南中的什么是 Secrets Manager?。有关 AWS Systems Manager Parameter Store 的更多信息,请参阅《AWS Systems Manager 用户指南》中的AWS Systems Manager Parameter Store。
要展开版本控制选项或输入参数的设置,可以选择设置名称旁边的箭头。要展开所有选定组件的所有设置,可以关闭和打开全部展开开关。
-
-
存储(卷) - 已预先填好。根卷设备名称、快照和 IOPS 选项不可编辑。但是,您可以更改所有其余设置,例如大小。您还可以添加新卷以及加密新卷或现有卷。
要在源区域(运行构建的地方)为 Image Builder 在您的账户下创建的映像进行加密,您必须在映像配方中使用存储卷加密。在该构建的分配阶段运行的加密仅适用于分配给其他账户或地区的映像。
注意
如果您对卷使用加密,则必须分别为每个卷选择密钥,即使该密钥与用于根卷的密钥相同也是如此。
注意
如果您没有现有配方,请使用图像生成器管道向导,或者从导航窗格中选择图像配方,然后选择创建图像配方。本节中描述的字段适用于新配方和新版本。
创建新的映像配方版本:
-
在配方详细信息页面顶部,选择创建新版本。这将打开 “创建图像配方” 页面。
-
要创建新版本,请进行更改,然后选择Create recipe(创建配方)。
您的最终图片最多可以包含来自 AWS Marketplace 图片产品和组件的九个商品代码。如果您的基础图像和组件超过此限制,Image Builder 将在配方创建过程中返回错误。
在创建图像配方之前,请查看以下限制:
-
您的最终图片最多可以包含九个 AWS Marketplace 商品代码,这些代码由基础图片和组件组合而成。产品代码是 AWS Marketplace 附加到付费或支持的 AMI 上的标识符,用于计费和许可。
-
您最多可以包含 20 个组件(编译和测试相结合)。这是默认限制,您可以请求提高该限额 AWS Support。
-
同一个成分在配方中不能出现多次。
-
所有组件必须与基础映像的平台(Linux、Windows 或 macOS)相匹配。当元数据可用时,组件还必须支持操作系统版本。
有关步骤 2:选择配方在创建图像管道时创建图像配方的更多信息,请参阅本指南的 “入门” 部分。
使用创建图像配方 AWS CLI
要使用中的图像生成器create-image-recipe命令创建图像配方 AWS CLI,请执行以下步骤:
先决条件
在运行本节中的图像生成器命令从中创建图像配方之前 AWS CLI,您可以选择创建配方使用的组件。以下步骤中的映像配方示例引用了在本指南 从中创建自定义组件 AWS CLI 部分中创建的示例组件。
如果您想在配方中加入成分,请记下要包含的 ARN。您还可以创建不含任何组件的配方,用于测试现有 AMI 或仅限分发的工作流程。
-
创建 CLI 输入 JSON 文件
您可以使用内联命令参数为 create-image-recipe 命令提供所有输入。但是,生成的命令可能会很长。为了简化命令,您可以改为提供包含所有配方设置的 JSON 文件。
注意
JSON 文件中数据值的命名约定遵循为映像生成器 API 操作请求参数指定的模式。要查看 API 操作请求参数,请参阅 EC2 映像生成器 API 参考中的CreateImageRecipe命令。
要将数据值作为命令行参数提供,请参阅《AWS CLI 命令引用》中指定的参数名称。
以下是这些示例指定的参数的摘要:
-
名称(字符串,必填项) - 映像配方的名称。
-
描述(字符串)- 映像配方的描述。
-
parentImage (字符串,必填项)- 映像配方用作自定义映像基础的映像。您可以使用以下选项之一指定父图像:
-
AMI ID — 当您有要自定义的特定 AMI(例如
ami-1234567890abcdef1)时使用。由于 AMI ID 是静态的,因此当您希望配方自动获取更新的基础映像时,我们建议改为使用映像生成器映像 ARN 或 SSM 参数。 -
映像生成器图像资源 ARN — 当您想在映像生成器映像之上进行构建时使用。这包括 Amazon-managed 映像生成器为最常用的操作系统提供的映像,以及您之前创建的映像。使用语义版本指定图像 ARN,或使用版本通配符始终获取最新版本。
-
AWS Systems Manager (SSM) 参数存储参数 -当您希望配方在不创建新的配方版本的情况下自动获取新的 AMI ID 时使用。在参数前面加上前缀
ssm:,然后是参数名称或 ARN。对于应始终使用最新的亚马逊 Linux 或 Windows 基础映像的管道来说,这是理想的选择。 -
AWS Marketplace 产品 ID — 当您在中订阅 AMI 产品 AWS Marketplace 并想要进一步对其进行自定义时使用。
注意
-
当您使用 AMI ID 或解析为 AMI 的 SSM 参数时,您必须有权访问账户中的该 AMI。AMI 还必须存在于映像生成器运行构建的同一区域中。
-
Linux 和 macOS 示例指定了 AMI ID,而 Windows 示例使用映像生成器映像 ARN。
-
-
<major>SemanticVersion(字符串,必填)-以该格式输入要创建的版本号。<minor>。<patch>。Image Builder 支持配方版本自动递增,允许您在配方版本中使用通配符模式。当您使用通配符版本(例如)创建配方时
1.0.x,Image Builder 会自动递增版本号(例如1.0.11.0.2、1.0.3、、等)。这样就无需手动跟踪和增加配方版本。要了解有关 Image Builder 资源的语义版本控制的更多信息,请参阅Image Builder 中的语义版本控制。 -
组件(数组,可选)-包含
ComponentConfiguration对象数组。组件是可选的-您可以为测试或分发工作流程创建不带任何组件的配方:注意
Image Builder 按照您在配方中指定的顺序安装组件。但是,CIS 强化组件始终最后运行,以确保基准测试针对您的输出映像运行。
-
componentARN(字符串,必填)– 组件 ARN。
提示
要使用其中一个示例创建自己的映像配方,必须将示例 ARN 替换为用于配方的组件的 ARN。
-
参数(对象数组)- 包含
ComponentParameter对象数组。如果需要输入参数,但组件中未定义默认值,则必须提供一个值。如果缺少任何必需的参数且未定义默认值,Image Builder 将不会创建配方版本。重要
组件参数是纯文本值,并且已记录在 AWS CloudTrail中。我们建议您使用 AWS Secrets Manager 或 AWS Systems Manager 参数存储来存储您的密钥。有关 Secrets Manager 的更多信息,请参阅AWS Secrets Manager 用户指南中的什么是 Secrets Manager?。有关 AWS Systems Manager Parameter Store 的更多信息,请参阅《AWS Systems Manager 用户指南》中的AWS Systems Manager Parameter Store。
-
名称(字符串,必填)- 要设置的组件参数的名称。
-
值(字符串数组,必填)- 包含用于设置指定组件参数值的字符串数组。如果为组件定义了默认值且未提供其他值,则 AWSTOE 使用该默认值。
-
-
-
amiWatermarks(字符串数组,可选)— 要附加到根据此配方生成的输出 AMI 的水印名称列表。水印是谱系标记,可帮助您追踪图像的历史。指定 1 到 5 个名称。每个名称必须为 3 到 128 个字符,可以包含字母、数字、空格和以下特殊字符:
( ) [ ] . / - ' @ _。有关更多信息,请参阅 使用水印追踪 AMI 血统。 -
附加 InstanceConfiguration(对象)-为您的构建实例指定其他设置和启动脚本。
-
系统 ManagerAgent(对象)-包含构建实例上系统管理器代理的设置。
注意
Windows 食谱不支持该
systemsManagerAgent配置。如果您将其包含在 Windows 父映像中,则请求会失败。-
卸载 AfterBuild(布尔值)— 控制在创建新 AMI 之前是否将系统管理器代理从您的最终构建映像中移除。如果将此选项设置为
true,则从最终映像中移除该代理。如果将此选项设置为false,则保留该代理,以便将它包含在新 AMI 中。默认值为false。注意
如果 JSON 文件中未包含该
uninstallAfterBuild属性,并且满足以下条件,则 Image Builder 会从最终映像中移除 Systems Manager 代理,使其在 AMI 中不可用:-
userDataOverride为空或已从 JSON 文件中省略。 -
对于未在基础映像上预装代理的操作系统,Image Builder 会自动在构建实例上安装 Systems Manager 代理。
-
-
-
用户 DataOverride(字符串)-提供启动构建实例时要运行的命令或命令脚本。
注意
用户数据始终采用 base 64 编码。例如,以下命令被编码为
IyEvYmluL2Jhc2gKbWtkaXIgLXAgL3Zhci9iYi8KdG91Y2ggL3Zhcg==:#!/bin/bash mkdir -p /var/bb/ touch /varLinux 示例使用此编码值。
-
示例:不含成分的食谱
您可以创建没有任何组件的配方,用于测试现有 AMI 或仅限分发的工作流程。以下示例显示了使用现有 AMI 而不应用任何其他组件的配方:
{ "name": "Test Distribution Recipe", "description": "Recipe for testing and distributing existing AMI without modifications.", "parentImage": "ami-1234567890abcdef1", "semanticVersion": "1.0.0", "additionalInstanceConfiguration": { "systemsManagerAgent": { "uninstallAfterBuild": true } } } -
-
创建配方
使用以下命令以创建配方。在
--cli-input-json参数中提供您在上一步中创建的 JSON 文件的名称:aws imagebuilder create-image-recipe --cli-input-json file://create-image-recipe.json注意
-
JSON 文件路径开头必须包含
file://符号。 -
JSON 文件的路径应遵循运行命令的基本操作系统的相应约定。例如,Windows 使用反斜杠 (\) 引用目录路径,而 Linux 和 macOS 使用正斜杠 (/)。
您的最终图片最多可以包含来自 AWS Marketplace 图片产品和组件的九个商品代码。如果运行
create-image-recipe命令时您的基础映像和组件超过此限制,则映像生成器在创建配方时会返回错误。该命令返回新图像配方的 ARN,如以下示例输出所示。
{ "requestId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "clientToken": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "imageRecipeArn": "arn:aws:imagebuilder:us-west-2:123456789012:image-recipe/my-recipe/1.0.1" } -
-
验证你的食谱
要确认 Image Builder 是否按预期创建了您的配方,请使用上一步返回的 ARN 运行get-image-recipe命令。
aws imagebuilder get-image-recipe --image-recipe-arn arn:aws:imagebuilder:us-west-2:123456789012:image-recipe/my-recipe/1.0.1
工作目录
工作目录指定 Image Builder 运行构建和测试操作的构建实例上的文件系统路径。映像生成器将此路径 AWS Systems Manager 作为执行命令的工作目录传递给。
如果您未指定工作目录,Image Builder 将使用以下默认值:
-
Linux:
/tmp -
macOS:
/tmp -
Windows:
C:/
对于 Windows,路径不能包含双引号 (") 字符。
提示
当组件在安装期间需要的临时磁盘空间超过默认目录所提供的空间时,将工作目录设置为更大的附加卷上的路径。
AMI 标签
在映像分发之前,您可以将标签应用于映像生成器在构建阶段创建的 AMI。映像生成器将这些标签应用于 AMI,与配方本身的资源标签分开。在 JSON 输入文件中使用amiTags参数指定 AMI 标签。
注意
您不能使用保留的标签密钥CreatedBy或Ec2ImageBuilderArn。映像生成器会自动管理这些密钥。
{ "name": "tagged-recipe", "semanticVersion": "1.0.0", "parentImage": "arn:aws:imagebuilder:us-west-2:aws:image/amazon-linux-2023-x86/x.x.x", "components": [ { "componentArn": "arn:aws:imagebuilder:us-west-2:aws:component/update-linux/x.x.x" } ], "amiTags": { "Environment": "Production", "Team": "Platform", "CostCenter": "12345" } }
常见错误和故障排除
下表列出了您在创建图像配方时可能遇到的常见错误以及如何解决这些错误。
| 错误 | 原因 | 解决方案 |
|---|---|---|
| “一个组件最多可以在图像配方中指定一次” | 重复的组件(即使是不同的版本)。 | 删除重复项。仅使用每个组件的一个版本。 |
| “组件 ARN 与父映像平台不匹配” | 平台不匹配。 | 验证您的基础映像平台。在 Linux AMI 中使用 Linux 组件,依此类推。 |
| “组件 ARN 不支持父映像操作系统版本” | 操作系统版本不兼容。 | 检查组件支持的操作系统版本。使用兼容的组件版本。 |
| “映像生成器不支持在 Windows 上配置 SSM 代理” | 您systemsManagerAgent使用了 Windows 父映像指定。 |
移除方additionalInstanceConfiguration.systemsManagerAgent块。 |
| “你已经超过了 25 KB 的最大累积组件大小” | 参数太多或太大。 | 减少参数数或缩短参数值。 |
| “食谱最多可以包含 9 种商城商品” | AWS Marketplace 产品代码太多。 | 减少 AWS Marketplace 组件数量,或使用具有较少产品代码的基础映像。 |
| “提供的语义版本不符合要求的格式” | 版本字符串无效。 | 使用 major .minor.patch 格式和一个可选的通配符。x |
| “组件 ARN... 已过时且无法包含在新配方中”(或 “已禁用”) | 引用的组件的DISABLED状态为DEPRECATED或。 |
更新到当前的组件版本。 |
在控制台中导入虚拟机 (VM) 作为基础映像
本节向您介绍如何导入虚拟机 (VM) 作为映像配方的基础映像。它不包括在此处创建食谱或食谱版本所涉及的其他步骤。有关在 Image Builder 控制台中使用管道创建向导创建新映像配方的其他步骤,请参阅 管道向导:创建 AMI。有关创建新映像配方或配方版本的其他步骤,请参阅 创建映像配方的新版本。
要在 Image Builder 控制台中导入虚拟机 (VM) 作为映像配方的基础映像,请按照以下步骤以及任何其他必需的步骤来创建您的配方或配方版本。
-
在基础映像的选择映像部分中,选择导入基础映像选项。
-
像往常一样选择映像操作系统 (OS)和操作系统 (OS) 版本。
虚拟机导入配置
当您从虚拟化环境中导出虚拟机时,该过程会创建一个或多个磁盘容器文件,这些文件充当虚拟机环境、设置和数据的快照。您可以使用这些文件导入虚拟机作为映像配方的基本映像。有关在 Image Builder 中导入虚拟机的详细信息,请参阅 导入和导出 VM 映像
要指定导入源的位置,请执行以下步骤:
导入源
在磁盘容器 1 部分中指定要导入的第一个虚拟机映像磁盘容器或快照的来源。
-
源 – 可以是 S3 存储桶或 EBS 快照。
-
选择磁盘的 S3 位置 – 输入 Amazon S3 中存储磁盘映像的位置。要浏览位置,请选择浏览 S3。
-
要添加磁盘容器,请选择添加磁盘容器。
IAM 角色
要将 IAM 角色与您的虚拟机导入配置相关联,请从 IAM 角色下拉列表中选择该角色,或者选择创建新角色来创建一个新角色。如果您创建了新角色,IAM 角色控制台页面将在单独的标签页中打开。
高级设置 — optional
以下设置可选:使用这些设置,您可以为导入创建的基本映像配置加密、许可、标签等。
General
-
为基本映像指定一个唯一的名称。如果不输入任何值,则基础映像将继承该配方名称。
-
指定基础映像的版本。采用以下格式:
<major>.<minor>.<patch>。如果不输入任何值,则基础映像将继承该配方版本。 -
您也可以为基础映像输入描述。
基础映像架构
要指定虚拟机导入源的架构,请从架构列表中选择一个值。
加密
如果您的虚拟机磁盘映像已加密,则必须提供用于导入过程的密钥。要 AWS KMS key 为导入指定,请从加密(KMS 密钥)列表中选择一个值。该列表包含您的账户在当前区域中有权访问的 KMS 密钥。
许可证管理
导入虚拟机时,导入过程会自动检测虚拟机操作系统并将相应的许可证应用于基本映像。根据您的操作系统平台,许可证类型如下:
-
包含许可证 — 适用于您的平台的相应 AWS 许可证将应用于您的基本映像。
-
自带许可(BYOL) - 保留源自虚拟机的许可证(如果适用)。
要将使用创建的许可证配置附加 AWS License Manager 到您的基础映像,请从许可证配置名称列表中选择。有关许可证管理器的更多信息,请参阅《许可证管理器用户指南》中的使用许可证配置。
注意
-
许可证配置包含基于您的企业协议条款的许可规则。
-
Linux 仅支持 BYOL 许可证。
标签(基本映像)
标签使用键值对为您的 Image Builder 资源分配可搜索的文本。要为导入的基础映像指定标签,请使用键和值框输入键值对。
要添加标签,请选择 Add tag(添加标签)。要删除标签,请选择 Remove tag(删除标签)。