本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 Amazon EC2 启动模板与 AWS Batch
AWS Batch 支持在您的EC2计算环境中使用 Amazon EC2 启动模板。使用启动模板,您可以修改 AWS Batch 计算资源的默认配置,而无需创建自定义配置AMIs。
注意
F AWS argate 资源不支持启动模板。
您必须先创建启动模板,然后才能将其与计算环境关联。您可以在 Amazon EC2 控制台中创建启动模板。或者,您可以使用 AWS CLI 或 AWS SDK。例如,以下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 key pair
-
亚马逊 EC2 AMI ID
-
安全组 IDs
-
亚马逊EC2标签
以下启动模板参数将被忽略 AWS Batch:
-
实例类型(在创建计算环境时指定所需的实例类型)
-
实例角色(在创建计算环境时指定所需的实例角色)
-
网络接口子网(在创建计算环境时指定所需的子网)
-
实例市场选项(AWS Batch 必须控制竞价型实例配置)
-
禁用API终止(AWS Batch 必须控制实例生命周期)
AWS Batch 仅在基础架构更新期间使用新的启动模板版本更新启动模板。有关更多信息,请参阅 更新计算环境。
默认启动模板和覆盖启动模板
您可以为计算环境定义默认启动模板,为特定实例类型和系列定义覆盖启动模板。这可能对您很有用,因此计算环境中的大多数实例类型都使用默认模板。
替代变量$Default
和$Latest
可以用来代替命名特定版本。如果您未提供覆盖启动模板,则会自动应用默认启动模板。
如果您使用$Default
或$Latest
变量,则 AWS Batch 将在创建计算环境时应用当前信息。如果 future 的默认版本或最新版本发生变化,则必须通过UpdateComputeEnvironment或通过 AWS Management Console -来更新信息 AWS Batch。
为了提供更大的灵活性,您可以定义应用于特定计算实例类型或系列的覆盖启动模板。
注意
您最多可以为每个计算环境指定十 (10) 个覆盖启动模板。
使用targetInstanceTypes
参数选择应使用此覆盖启动模板的实例类型或系列。实例类型或系列必须首先由instanceTypes
参数标识。
如果您定义了启动模板覆盖并决定稍后将其删除,则可以传递一个空数组来取消操作中的overrides
UpdateComputeEnvironment
API参数设置。您也可以选择在提交UpdateComputeEnvironment
API操作时不包含该overrides
参数。欲了解更多信息,请参阅 LaunchTemplateSpecification.overrides
有关更多信息,请参阅《 AWS Batch API参考指南》LaunchTemplateSpecificationOverride.targetInstanceTypes
中的。
启动模板中的亚马逊EC2用户数据
您可以在实例启动时由 c loud-in
启动模板中的 Amazon EC2 用户数据必须采用MIME多部分存档
如果你使用的是 AWS CloudFormation,AWS::CloudFormation: In it 类型可以与 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==--
. 必须将此闭合边界之前的行留空。
注意
如果您在亚马逊EC2控制台的启动模板中添加用户数据,则可以将其粘贴为纯文本。或者,您可以从文件上传它。如果使用 AWS CLI 或 AWS SDK,则必须先对用户数据进行base64
编码,然后在调用时将该字符串作为UserData
参数值提交 CreateLaunchTemplate,如本JSON文件所示。
{ "LaunchTemplateName": "base64-user-data", "LaunchTemplateData": { "UserData": "
ewogICAgIkxhdW5jaFRlbXBsYXRlTmFtZSI6ICJpbmNyZWFzZS1jb250YWluZXItdm9sdW...
" } }