计算环境 - Amazon Batch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

计算环境

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

托管计算环境

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

重要

在Windows containers on Amazon Fargate上不支持 Fargate 竞价型实例。如果将 FargateWindows 作业提交到仅使用 Fargate 竞价计算环境的作业队列,作业队列将被阻止。

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

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

注意

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

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

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

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

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

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

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

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

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

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

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

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

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

非托管计算环境

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

注意

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

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

以下Amazon 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