本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建新版本的容器配方
本节展示了如何创建创建新版本的容器配方。
使用控制台创建新的容器配方版本
创建新版本的容器配方与创建新配方几乎相同。不同之处在于,在大多数情况下,为匹配基础配方,某些详细信息都是预先选择的。以下列表描述创建新配方和创建现有配方的新版本之间的区别。
配方详细信息
-
名称 - 不可编辑。
-
版本 - 必填。此详细信息未预先填充当前版本或任何类型的序列。以 major.minor.patch 格式输入要创建的版本号。如果该版本已经存在,则会遇到错误。
基础映像
-
选择映像选项 - 预先选择,但可以编辑。如果您更改对基础映像来源的选择,则可能会丢失其他详细信息,这些详细信息取决于您选择的原始选项。
要查看与您的基础映像选择相关的详细信息,请选择与您的选择相匹配的选项卡。
实例配置
-
AMIID — 已预先填写,但可编辑。
-
存储(卷)
EBS第 1 卷(AMI根)— 已预先填充。您无法编辑根卷的设备名称、快照或IOPS选项。但是,您可以更改所有其余设置,例如大小。您还可以添加新卷。
注意
如果您指定的基础AMI是从其他账户与您共享的,则指定的任何辅助卷的快照也必须与您的账户共享。
工作目录
-
工作目录路径 – 已预先填充,但可编辑。
组件
组件 - 已包含在配方中的组件显示在每个组件列表(构建和测试)末尾的选定组件部分中。您可以移除所选组件或对其重新排序,以满足您的需要。
CIS强化组件不遵守 Image Builder 配方中的标准组件排序规则。CIS强化组件始终最后运行,以确保基准测试针对您的输出图像运行。
注意
构建和测试组件列表根据组件所有者类型显示可用组件。要为配方添加或更新组件,请为要查找的组件选择所有者类型。例如,如果要添加与您在中订阅的基本图像关联的组件 AWS Marketplace,请
Third party managed
从搜索栏旁边的所有者类型列表中进行选择。您可以为自己的所选组件配置以下设置:
-
版本控制选项 - 已预先选择,但您可以对其进行更改。我们建议您选择使用最新的可用组件版本选项,以确保您的映像版本始终使用最新版本的组件。如果您需要在配方中使用特定的组件版本,则可以选择指定组件版本,然后在出现的组件版本框中输入版本。
-
输入参数 - 显示组件接受的输入参数。该值预先填充了配方先前版本中的值。如果您在此配方中首次使用此组件,并且为输入参数定义了默认值,则默认值将显示在 “值” 框中,文本为灰色。如果未输入其他值,Image Builder 将使用默认值。
如果需要输入参数,但组件中没有定义默认值,则必须提供一个值。如果缺少任何必需的参数且未定义默认值,Image Builder 将不会创建配方版本。
重要
组件参数是纯文本值,并且已记录在 AWS CloudTrail中。我们建议您使用 AWS Secrets Manager 或 P AWS Systems Manager arameter Store 来存储您的密钥。有关 Secrets Manager 的更多信息,请参阅AWS Secrets Manager 用户指南中的什么是 Secrets Manager?。有关 AWS Systems Manager Parameter Store 的更多信息,请参阅《AWS Systems Manager 用户指南》中的AWS Systems Manager Parameter Store。
要展开版本控制选项或输入参数的设置,可以选择设置名称旁边的箭头。要展开所有选定组件的所有设置,可以关闭和打开全部展开开关。
-
Dockerfile 模板
-
Dockerfile 模板 — 已预先填充,但可以编辑。您可以指定以下任意上下文变量,Image Builder 在运行时将其替换为构建信息。
- parentImage (必填)
-
在构建时,此变量会解析为配方的基本图像。
例如:
FROM {{{ imagebuilder:parentImage }}}
- 环境(如果指定了组件,则为必填项)
-
此变量将解析为运行组件的脚本。
例如:
{{{ imagebuilder:environments }}}
- 组件(可选)
-
Image Builder 解析容器配方中包含的组件的构建和测试组件脚本。这个变量可以放在 Dockerfile 中的任何地方,放在环境变量之后。
例如:
{{{ imagebuilder:components }}}
目标存储库
-
目标存储库名称-如果您的管道的分发配置中没有为管道运行区域(区域 1)指定其他存储库,则存储输出图像的 Amazon ECR 存储库。
创建新的容器配方版本:
-
在容器配方详细信息页面的顶部,选择Create new version(创建新版本)。您将进入容器配方的创建配方页面。
-
要创建新版本,请进行更改,然后选择Create recipe(创建配方)。
有关如何在创建映像管道时创建容器配方的更多信息,请参阅本指南的入门章节中的步骤 2:选择配方。
通过 AWS CLI创建容器配方
要使用中的imagebuilder
create-container-recipe
命令创建 Image Builder 容器配方 AWS CLI,请执行以下步骤:
先决条件
在运行本节中的 Image Builder 命令使用创建容器配方之前 AWS CLI,必须创建配方将使用的组件。以下步骤中的容器配方示例引用了在本指南 从中创建自定义组件 AWS CLI 章节中创建的示例组件。
创建组件后,或者如果您使用的是现有组件,请记下要ARNs包含在配方中的组件。
-
创建CLI输入JSON文件
您可以使用内联命令参数为 create-container-recipe 命令提供所有输入。但是,生成的命令可能会很长。为了简化命令,您可以改为提供一个包含所有容器配方设置的JSON文件
注意
JSON文件中数据值的命名约定遵循为 Image Builder API 操作请求参数指定的模式。要查看API命令请求参数,请参阅 Im EC2age Builder API 参考中的CreateContainerRecipe命令。
要将数据值作为命令行参数提供,请参阅《AWS CLI 命令引用》中指定的参数名称。
以下是此示例中参数的摘要:
-
组件(对象数组,必填)- 包含
ComponentConfiguration
对象数组。必须指定至少一个构建组件:注意
Image Builder 按照您在配方中指定的顺序安装组件。但是,CIS强化组件始终最后运行,以确保基准测试针对您的输出图像运行。
-
组件 ARN(字符串,必填)-组件ARN。
提示
要使用该示例创建自己的容器配方,请将该ARNs示例ARNs替换为您用于配方的组件。其中包括每个版本的 AWS 区域、名称和版本号。
参数(对象数组)- 包含
ComponentParameter
对象数组。如果需要输入参数,但组件中没有定义默认值,则必须提供一个值。如果缺少任何必需的参数且未定义默认值,Image Builder 将不会创建配方版本。重要
组件参数是纯文本值,并且已记录在 AWS CloudTrail中。我们建议您使用 AWS Secrets Manager 或 P AWS Systems Manager arameter Store 来存储您的密钥。有关 Secrets Manager 的更多信息,请参阅AWS Secrets Manager 用户指南中的什么是 Secrets Manager?。有关 AWS Systems Manager Parameter Store 的更多信息,请参阅《AWS Systems Manager 用户指南》中的AWS Systems Manager Parameter Store。
-
名称(字符串,必填)- 要设置的组件参数的名称。
-
值(字符串数组,必填)- 包含用于设置指定组件参数值的字符串数组。如果为组件定义了默认值,但未提供其他值,则 AWSTOE 使用默认值。
-
-
-
containerType(字符串,必填)-要创建的容器的类型。有效值包括
DOCKER
。 -
dockerfileTemplateData(字符串)— 用于构建映像的 Dockerfile 模板,表示为内联数据 blob。
-
名称(字符串,必填)- 容器配方的名称。
-
描述(字符串)- 容器配方的描述。
-
parentImage(字符串,必填)-容器配方用作自定义图像基础的图像。该值可以是基础图像ARN或 AMI ID。
-
platformOverride(字符串)— 指定使用自定义基础映像时的操作系统平台。
-
semanticVersion<major>(字符串,必填)—容器配方的语义版本按以下格式指定,每个位置都有数值以表示特定版本:。 <minor>。 <patch>。例如,
1.0.0
就是一个示例。要了解有关 Image Builder 资源的语义版本控制的更多信息,请参阅Image Builder 中的语义版本控制。 -
标签(字符串映射)– 附加到容器配方的标签。
-
instanceConfiguration(object)-一组选项,可用于配置用于构建和测试容器映像的实例。
-
image(字符串)— 用作容器构建和测试实例的基础映像的 AMI ID。如果您未指定此值,Image Builder 将使用ECS经过亚马逊优化的相应图片AMI作为基础图片。
-
blockDeviceMappings(对象数组)-定义要连接的块设备,以便通过image参数中AMI指定的 Image Builder 构建实例。
-
deviceName(字符串)-这些映射适用的设备。
-
ebs(对象)— 用于管理此映射的 Amazon EBS 特定配置。
-
deleteOnTermination(布尔值)-用于配置关联设备终止时的删除。
-
已加密(布尔值)- 用于配置设备加密。
-
volumeSize(整数)-用于覆盖设备的音量大小。
-
volumeType(字符串)— 用于覆盖设备的音量类型。
-
-
-
-
targetRepository(object,必填)— 如果管道的分发配置中没有为管道运行区域(区域 1)指定其他存储库,则为容器映像的目标存储库。
-
repositoryName(字符串,必填)-存储输出容器映像的容器存储库的名称。此名称以存储库位置作为前缀。
-
服务(字符串,必填)– 指定注册此映像的服务。
-
-
workingDirectory(字符串)-生成和测试工作流程期间使用的工作目录。
{ "components": [ { "componentArn": "arn:aws:imagebuilder:us-east-1:123456789012:component/helloworldal2/x.x.x" } ], "containerType": "DOCKER", "description": "My Linux Docker container image", "dockerfileTemplateData": "FROM {{{ imagebuilder:parentImage }}}\n{{{ imagebuilder:environments }}}\n{{{ imagebuilder:components }}}", "name": "amazonlinux-container-recipe", "parentImage": "amazonlinux:latest", "platformOverride": "Linux", "semanticVersion": "1.0.2", "tags": { "sometag" : "Tag detail" }, "instanceConfiguration": { "image": "ami-1234567890", "blockDeviceMappings": [ { "deviceName": "/dev/xvda", "ebs": { "deleteOnTermination": true, "encrypted": false, "volumeSize": 8, "volumeType": "gp2" } } ] }, "targetRepository": { "repositoryName": "myrepo", "service": "ECR" }, "workingDirectory": "/tmp" }
-
-
创建配方
使用以下命令以创建配方。在
--cli-input-json
参数中提供您在上一步中创建的JSON文件的名称:aws imagebuilder create-container-recipe --cli-input-json file://
create-container-recipe.json
注意
-
您必须在JSON文件路径的开头添加
file://
符号。 -
该JSON文件的路径应遵循运行该命令的基本操作系统的相应约定。例如,Windows 使用反斜杠 (\) 引用目录路径,Linux 则使用正斜杠 (/)。
-