计算环境 - AWS Batch

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

计算环境

作业队列映射到一个或多个计算环境。计算环境包含用于运行容器化批处理作业的 Amazon ECS 容器实例。还可以将一个具体的计算环境映射到一个或多个作业队列。在作业队列中,每个关联的计算环境均有一个顺序,计划程序使用该顺序来确定准备好运行的作业将在哪里运行。如果第一个计算环境的状态为VALID且有可用资源,作业就会被调度到该计算环境中的容器实例。如果第一个计算环境的状态为 INVALID 或无法提供合适的计算资源,计划程序会尝试在下一个计算环境上运行任务。

托管计算环境

您可以使用托管计算环境来 AWS Batch 管理环境中计算资源的容量和实例类型。这基于在创建计算环境时定义的计算资源规范。可以选择使用 Amazon EC2 按需型实例和 Amazon EC2 竞价型实例。或者,也可以在托管计算环境中使用 Fargate 和 Fargate 竞价容量。使用竞价型实例时,可以选择设置最高价格。这样,只有当竞价型实例价格低于按需型实例价格的指定百分比时,竞价型实例才会启动。

重要

不支持 Fargate Spot 实例。 Windows containers on AWS Fargate如果将作业提交到仅使用 Fargate Spot 计算环境的作业队列,则任务队列将被阻止。 FargateWindows

托管计算环境会在指定的 VPC 和子网中启动 Amazon EC2 实例,然后将其注册到 Amazon ECS 集群。Amazon EC2 实例需要外部网络访问权限才能与 Amazon ECS 服务端点通信。有些子网不为 Amazon EC2 实例提供公共 IP 地址。如果您的 Amazon EC2 实例没有公共 IP 地址,必须使用网络地址转换(NAT)才能获得访问权。有关更多信息,请参阅《Amazon VPC 用户指南》中的 NAT 网关。有关如何创建 VPC 的更多信息,请参阅创建虚拟私有云

默认情况下, AWS Batch 托管计算环境使用最新经批准的 Amazon ECS 优化版 AMI 来处理计算资源。但是,可能出于各种原因需要创建自己的 AMI,用于托管计算环境。有关更多信息,请参阅 计算资源 &AMI;

注意

AWS Batch 创建计算环境中的 AMI 后,不会自动对其进行升级。例如,当更新版本的 Amazon ECS 优化 AMI 发布时,它不会更新计算环境中的 AMI。您需要管理客户操作系统。其中包括任何更新和安全补丁。您还负责为在计算资源上安装的任何其他应用程序软件或实用程序。有两种方法可以将新 AMI 用于您的 AWS Batch 工作。最初的方法是完成以下步骤:

  1. 使用新的 AMI 创建新计算环境。

  2. 将计算环境添加到现有作业队列。

  3. 从作业队列中删除早期的计算环境。

  4. 删除早期的计算环境。

2022 年 4 月, AWS Batch 增加了对更新计算环境的增强支持。有关更多信息,请参阅 更新计算环境。要使用计算环境的增强更新来更新 AMI,请遵循以下规则:

  • 要么不要设置服务角色 (serviceRole) 参数,要么将其设置为AWSServiceRoleForBatch服务相关角色。

  • 将分配策略 (allocationStrategy) 参数设置为BEST_FIT_PROGRESSIVESPOT_CAPACITY_OPTIMIZEDSPOT_PRICE_CAPACITY_OPTIMIZED

  • 将更新到最新图像版本(updateToLatestImageVersion)参数设置为true

  • 请勿在imageIdimageIdOverride(在ec2Configuration)或启动模板 (launchTemplate) 中指定 AMI ID。在这种情况下,请 AWS Batch 选择基础设施更新启动时支持的最新 Amazon ECS 优化的 AMI。 AWS Batch 或者,可以在imageIdimageIdOverride参数中指定 AMI ID,也可以在LaunchTemplate属性中指定启动模板。更改这些属性中的任何一个都将启动基础架构更新。如果在启动模板中指定了 AMI ID,则不能通过在imageIdimageIdOverride参数中指定 AMI ID 来替换它。只能通过指定不同的启动模板来替换它。或者如果启动模板版本设置为$Default$Latest,则为启动模板设置新的默认版本(如果是$Default),或者为启动模板添加新版本(如果是$Latest)。

如果遵循这些规则,任何启动基础架构更新的更新都会导致重新选择 AMI ID。如果启动模板 (launchTemplate) 中的version设置设为$Latest$Default,则在基础架构更新时会评估启动模板的最新版本或默认版本,即使launchTemplate尚未更新。

创建多节点并行作业时的注意事项

AWS Batch 建议创建专用的计算环境来运行多节点并行 (MNP) 作业和非 MNP 作业。这是由于在托管计算环境中创建计算容量的方式造成的。创建新的托管计算环境时,如果指定的minvCpu值大于零,则 AWS Batch 会创建一个仅供非 MNP 作业使用的实例池。如果提交了多节点并行作业,则 AWS Batch 会创建新的实例容量来运行多节点并行作业。如果在设置了minvCpusmaxvCpus值的同一个计算环境中同时运行单节点和多节点并行作业,则如果所需的计算资源不可用,则 AWS Batch 将等待当前作业完成,然后再创建运行新作业所需的计算资源。

非托管计算环境

在非托管计算环境中,需要管理自己的计算资源。必须验证用于计算资源的 AMI 是否符合 Amazon ECS 容器实例 AMI 规范。有关更多信息,请参阅 计算资源 &AMI; 规范创建计算资源 &AMI;

注意

AWS 非托管计算环境不支持 Fargate 资源。

创建非托管计算环境后,使用 DescribeComputeEnvironmentsAPI 操作查看计算环境的详细信息。找到与环境相关联的 Amazon ECS 集群,然后手动在该 Amazon ECS 集群中启动容器实例。

以下 AWS CLI 命令还提供了 Amazon ECS 集群 ARN。

$ aws batch describe-compute-environments \ --compute-environments unmanagedCE \ --query "computeEnvironments[].ecsClusterArn"

有关更多信息,请参阅 Amazon Elastic Container Service 开发人员指南中的启动 Amazon ECS 容器实例。启动计算资源时,请指定 Amazon ECS 集群 ARN,以便资源使用以下 Amazon EC2 用户数据注册。ecsClusterArn替换为您通过上一个命令获得的集群 ARN。

#!/bin/bash echo "ECS_CLUSTER=ecsClusterArn" >> /etc/ecs/ecs.config