启动模板支持 - AWS Batch

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

启动模板支持

AWS Batch 支持在您的 EC2 计算环境中使用 Amazon EC2 启动模板。使用启动模板,您无需创建自定义 AMI 即可修改 AWS Batch 计算资源的默认配置。

注意

F AWS argate 资源不支持启动模板。

您必须先创建启动模板,然后才能将其与计算环境关联。您可以在 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 仅在基础架构更新期间使用新的启动模板版本更新启动模板。有关更多信息,请参阅 更新计算环境

启动模板中的 Amazon EC2 用户数据

在启动实例时,您可以使用由cloud-init运行的启动模板中提供 Amazon EC2 用户数据。您的用户数据可以执行常见的配置方案,包括但不限于:

启动模板中用于托管节点组的 Amazon EC2 用户数据必须采用 MIME 分段归档格式。这是因为您的用户数据与配置计算资源所需的其他 AWS Batch 用户数据合并。您可以将多个用户数据块合并到一个 MIME 分段文件中。例如,您可能希望将配置 Docker 进程守护程序的云 boothook 与为 Amazon ECS 容器代理写入配置信息的用户数据 Shell 脚本合并。

如果您正在使用 AWS CloudFormation,则该AWS::CloudFormation::Init类型可以与 cfn-in it 帮助脚本一起使用以执行常见的配置场景。

MIME 分段文件包含以下组成部分:

  • 内容类型和段边界声明:Content-Type: multipart/mixed; boundary="==BOUNDARY=="

  • MIME 版本声明:MIME-Version: 1.0

  • 一个或多个用户数据块,其包含以下组成部分:

    • 开口边界,表示用户数据块的开头:--==BOUNDARY==必须将此边界之前的行留空。

    • 数据块的内容类型声明:Content-Type: text/cloud-config; charset="us-ascii"。有关内容类型的更多信息,请参阅 Cloud-Init 文档。必须将内容类型声明之后的行留空。

    • 用户数据的内容,例如,Shell 命令或 cloud-init 指令的列表。

  • 封闭边界,表示 MIME 分段文件的结尾:--==BOUNDARY==--必须将此闭合边界之前的行留空。

以下是 MIME 分段文件的示例,您可以用它来创建您自己的文件。

注意

如果将用户数据添加到 Amazon EC2 控制台中的启动模板,则可以将其作为纯文本粘贴或从文件进行上载。或者,您可以从文件上传它。如果您使用 AWS CLI 或 AWS SDK,则必须先对用户数据进行base64编码,然后在调用 T CreateLaunchem plat UserData e 时将该字符串作为参数值提交,如此 JSON 文件所示。

{ "LaunchTemplateName": "base64-user-data", "LaunchTemplateData": { "UserData": "ewogICAgIkxhdW5jaFRlbXBsYXRlTmFtZSI6ICJpbmNyZWFzZS1jb250YWluZXItdm9sdW..." } }

示例:挂载现有 Amazon EFS 文件系统

此示例 MIME 分段文件将配置计算资源以安装 amazon-efs-utils 程序包并在 /mnt/efs 处装载现有 Amazon EFS 文件系统。

MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" --==MYBOUNDARY== Content-Type: text/cloud-config; charset="us-ascii" packages: - amazon-efs-utils runcmd: - file_system_id_01=fs-abcdef123 - efs_directory=/mnt/efs - mkdir -p ${efs_directory} - echo "${file_system_id_01}:/ ${efs_directory} efs tls,_netdev" >> /etc/fstab - mount -a -t efs defaults --==MYBOUNDARY==--

示例:覆盖默认 Amazon ECS 容器代理配置

此示例 MIME 分段文件将覆盖计算资源的默认 Docker 映像清除设置。

MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" --==MYBOUNDARY== Content-Type: text/x-shellscript; charset="us-ascii" #!/bin/bash echo ECS_IMAGE_CLEANUP_INTERVAL=60m >> /etc/ecs/ecs.config echo ECS_IMAGE_MINIMUM_CLEANUP_AGE=60m >> /etc/ecs/ecs.config --==MYBOUNDARY==--

示例:挂载适用于 Lustre 的 Amazon FSx文件系统

此示例 MIME 分段文件将配置计算资源,以从 Extras Library 安装 lustre2.10 程序包,并在 /scratch 处以 fsx 的装载名装载现有 FSx for Lustre 文件系统。此示例是 Amazon Linux 2 的示例。有关其他 Linux 发行版的安装说明,请参阅适用于 Lustre 的 Amazon FSx用户指南中的安装 Lustre 客户端。有关更多信息,请参阅适用于 Lustre 的 Amazon FSx用户指南中的自动挂载 Amazon FSx 文件系统

MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" --==MYBOUNDARY== Content-Type: text/cloud-config; charset="us-ascii" runcmd: - file_system_id_01=fs-0abcdef1234567890 - region=us-east-2 - fsx_directory=/scratch - amazon-linux-extras install -y lustre2.10 - mkdir -p ${fsx_directory} - mount -t lustre ${file_system_id_01}.fsx.${region}.amazonaws.com@tcp:fsx ${fsx_directory} --==MYBOUNDARY==--

在容器属性的 volumesmountPoints 成员中,装载点必须映射到容器中。

{ "volumes": [ { "host": { "sourcePath": "/scratch" }, "name": "Scratch" } ], "mountPoints": [ { "containerPath": "/scratch", "sourceVolume": "Scratch" } ], }