将 Amazon EC2 启动模板与 Amazon Batch 结合使用
Amazon Batch 支持在 EC2 计算环境中使用 Amazon EC2 启动模板。启动模板支持允许您修改 Amazon Batch 计算资源的默认配置,而无需您创建自定义的 AMI。
注意
Amazon Fargate 资源不支持启动模板。
您必须先创建启动模板,然后才能将其与计算环境关联。您可以在 Amazon EC2 控制台创建启动模板。或者,您可以使用 Amazon CLI 或 Amazon SDK。例如,下面的 JSON 文件表示一个启动模板,它为默认 Amazon Batch 计算资源 AMI 调整 Docker 数据卷的大小,并将其设置为加密。
{ "LaunchTemplateName": "increase-container-volume-encrypt", "LaunchTemplateData": { "BlockDeviceMappings": [ { "DeviceName": "/dev/xvda", "Ebs": { "Encrypted": true, "VolumeSize": 100, "VolumeType": "gp2" } } ] } }
您可以通过将 JSON 保存到名为 lt-data.json
的文件并运行以下 Amazon 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 标签
以下启动模板参数将被 Amazon Batch 忽略:
-
实例类型(在创建计算环境时指定所需的实例类型)
-
实例角色(在创建计算环境时指定所需的实例角色)
-
网络接口子网(在创建计算环境时指定所需的子网)
-
实例市场选项(Amazon Batch 必须控制竞价型实例配置)
-
禁用 API 终止(Amazon Batch 必须控制实例生命周期)
Amazon Batch 仅在基础架构更新期间使用新启动模板版本更新启动模板。有关更多信息,请参阅 更新计算环境。
启动模板中的 Amazon EC2 用户数据
在启动实例时,您可以使用由cloud-init
启动模板中用于托管节点组的 Amazon EC2 用户数据必须采用 MIME 分段归档
如果您使用的是 Amazon 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 控制台中的启动模板,则可以将其作为纯文本粘贴或从文件进行上载。或者,您可以从文件上传它。如果您使用 Amazon CLI 或 Amazon SDK,则必须先对用户数据进行 base64
编码,然后在调用 CreateLaunchTemplate 时将该字符串作为参数值提交,如此 JSON 文件所示。
{ "LaunchTemplateName": "base64-user-data", "LaunchTemplateData": { "UserData": "
ewogICAgIkxhdW5jaFRlbXBsYXRlTmFtZSI6ICJpbmNyZWFzZS1jb250YWluZXItdm9sdW...
" } }