本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 Amazon EC2 启动模板与 AWS Batch
AWS Batch 支持在您的 EC2 计算环境中使用亚马逊 EC2 启动模板。使用启动模板,您可以修改 AWS Batch 计算资源的默认配置,而无需创建自定义 AMI。
启动模板可以指定在 AMI 选择顺序中优先使用的 AMI。有关更多信息,请参阅 AMI 选择顺序。
注意
当您为 AWS Batch 计算环境指定自定义启动模板时, AWS Batch 不要将您的启动模板直接附加到底层 Auto Scaling 组。取而代之的是,为 Auto Scaling 组 AWS Batch 创建一个单独的 Batch-managed 启动模板,并将自定义启动模板中的相关设置整合到其中。因此,您看到的与 Auto Scaling 组相关的启动模板与您最初指定的启动模板不同。这是预料之中的行为。
注意
AWS Fargate 资源不支持启动模板。
您必须先创建启动模板,然后才能将其与计算环境关联。您可以在 Amazon EC2 控制台创建启动模板。或者,您可以使用 AWS CLI 或 S AWS DK。例如,以下 JSON 文件代表一个启动模板,该模板调整了默认 AWS Batch 计算资源 AMI 的 Docker 数据量的大小,并将其设置为加密。
{ "LaunchTemplateName": "increase-container-volume-encrypt", "LaunchTemplateData": { "BlockDeviceMappings": [ { "DeviceName": "/dev/xvda", "Ebs": { "Encrypted": true, "VolumeSize": 100, "VolumeType": "gp2" } } ] } }
您可以通过将 JSON 保存到名为的文件lt-data.json并运行以下 AWS CLI 命令来创建先前的启动模板。
aws ec2 --region<region>create-launch-template --cli-input-json file://lt-data.json
有关启动模板的更多信息,请参阅《Amazon EC2 用户指南》中的从启动模板启动实例。
如果使用启动模板来创建计算环境,则可以将以下现有计算环境参数移至启动模板:
注意
假设在启动模板和计算环境配置中同时指定其中任意参数(Amazon EC2 标签除外)。然后,计算环境参数优先。Amazon EC2 标签在启动模板和计算环境配置之间合并。如果标签键发生冲突,则计算环境配置中的值优先。
-
Amazon EC2 密钥对
-
Amazon EC2 AMI ID
-
安全组 ID
-
Amazon EC2 标签
以下启动模板参数将被忽略 AWS Batch:
-
实例类型(在创建计算环境时指定所需的实例类型)
-
实例角色(在创建计算环境时指定所需的实例角色)
-
网络接口子网(在创建计算环境时指定所需的子网)
-
实例市场选项(AWS Batch 必须控制竞价型实例配置)
-
禁用 API 终止(AWS Batch 必须控制实例生命周期)
AWS Batch 仅在基础架构更新期间使用新的启动模板版本更新启动模板。有关更多信息,请参阅 更新中的计算环境 AWS Batch。
默认启动模板和覆盖启动模板
您可以为计算环境定义默认启动模板,并为特定实例类型和系列定义覆盖启动模板。这可能会非常实用,因此计算环境中的大多数实例类型都使用默认模板。
可以使用替换变量 $Default 和 $Latest,而不指定特定的版本。如果未提供覆盖启动模板,则会自动应用默认启动模板。
如果您使用$Default或$Latest变量,则 AWS Batch 将在创建计算环境时应用当前信息。如果将来默认版本或最新版本发生变化,则必须通过UpdateComputeEnvironment或通过 AWS 管理控制台 -更新信息 AWS Batch。
为提供更好的灵活性,您可以定义将应用于特定计算实例类型或系列的覆盖启动模板。
注意
您最多可以为每个计算环境指定十(10)个覆盖启动模板。
使用 targetInstanceTypes 参数来选择应使用此覆盖启动模板的实例类型或系列。实例类型或系列必须首先由 instanceTypes 参数标识。
如果您定义了覆盖启动模板,后来决定将其移除,则可以在 UpdateComputeEnvironment API 操作中传递一个空数组来取消设置 overrides 参数。您也可以选择在提交 UpdateComputeEnvironment API 操作时不包含 overrides 参数。有关更多信息,请参阅 LaunchTemplateSpecification.overrides
有关更多信息,请参阅 AWS Batch API 参考指南LaunchTemplateSpecificationOverride.targetInstanceTypes中的。
启动模板中的 Amazon EC2 用户数据
在启动实例时,您可以使用由cloud-init
启动模板中用于托管节点组的 Amazon EC2 用户数据必须采用 MIME 分段归档
如果你在使用 AWS CloudFormation,AWS::CloudFormation:: Init 类型可以与 cfn-init 帮助脚本一起使用来执行常见的配置场景。
MIME 分段文件包含以下组成部分:
-
内容类型和段边界声明:
Content-Type: multipart/mixed; boundary="==BOUNDARY==" -
MIME 版本声明:
MIME-Version: 1.0 -
一个或多个用户数据块,其包含以下组成部分:
-
开口边界,表示用户数据块的开头:
--==BOUNDARY==必须将此边界之前的行留空。 -
数据块的内容类型声明:
Content-Type:。有关内容类型的更多信息,请参阅Cloud-Init文档text/cloud-config; charset="us-ascii"。必须将内容类型声明之后的行留空。 -
用户数据的内容,例如,Shell 命令或
cloud-init指令的列表。
-
-
封闭边界,表示 MIME 分段文件的结尾:
--==BOUNDARY==--必须将此闭合边界之前的行留空。
注意
如果将用户数据添加到 Amazon EC2 控制台中的启动模板,则可以将其作为纯文本粘贴或从文件进行上载。或者,您可以从文件上传它。如果您使用 AWS CLI 或 AWS SDK,则必须首先对用户数据进行base64编码,并在调用时将该字符串作为UserData参数值提交 CreateLaunchTemplate,如此 JSON 文件所示。
{ "LaunchTemplateName": "base64-user-data", "LaunchTemplateData": { "UserData": "ewogICAgIkxhdW5jaFRlbXBsYXRlTmFtZSI6ICJpbmNyZWFzZS1jb250YWluZXItdm9sdW..." } }
预留的 Amazon ECS 代理配置值
AWS Batch /etc/ecs/ecs.config当实例在使用 Amazon ECS 的 EC2-based 托管计算环境中启动时,将特定的 Amazon ECS 代理配置值写入其中。 AWS Batch 还可能在计算环境更新期间覆盖这些值,因此您的更改可能无法持续存在。
重要
您的用户数据和 AWS Batch管理值之间的冲突可能会阻止任务的调度,导致意外的扩展行为,并导致意想不到的成本。
重要
不要将用户数据从 AWS Batch-managed 启动模板复制到自己的启动模板中。 AWS Batch-managed 用户数据包含的值因计算环境而异,计算环境更新时也会发生变化。如果您的启动模板包含复制的值,则它们可能与当前计算环境的预期值冲突。
请勿在启动模板用户数据中设置以下值。这些值由管理 AWS Batch ,冲突可能会导致调度和扩展问题:
ECS_CLUSTERECS_INSTANCE_ATTRIBUTES
有关上述参数的更多信息,请参阅《亚马逊弹性容器服务开发人员指南》中的 Amazon ECS 容器代理配置。