本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 EcsProperties 创建作业定义
通过使用 EcsProperties 的 AWS Batch 作业定义,您可以在单独的容器中对硬件、传感器、3D 环境和其他模拟进行建模。您可以使用此功能从逻辑上整理工作负载组件,并将它们与主应用程序分开。此功能可以与 Amazon Elastic Container Service(Amazon ECS)、Amazon Elastic Kubernetes Service(Amazon EKS)和 AWS Fargate 上的 AWS Batch 结合使用。
ContainerProperties 与 EcsProperties 作业定义对比
您可以根据应用场景的规定选择使用 ContainerProperties 或 EcsProperties 作业定义。从较高层次来看,使用 EcsProperties 运行 AWS Batch 作业与使用 ContainerProperties 运行作业类似。
仍然支持使用 ContainerProperties 的旧版作业定义结构。如果您当前有使用此结构的工作流,则可以继续运行这些工作流。
主要区别在于,在作业定义中添加了一个新对象以适应基于 EcsProperties 的定义。
例如,在 Amazon ECS 和 Fargate 上使用 ContainerProperties 的作业定义具有以下结构:
{ "containerProperties": { ... "image": "my_ecr_image1", ... }, ... }
在 Amazon ECS 和 Fargate 上使用 EcsProperties 的作业定义具有以下结构:
{ "ecsProperties": { "taskProperties": [{ "containers": [ { ... "image": "my_ecr_image1", ... }, { ... "image": "my_ecr_image2", ... },
对 AWS Batch API 的一般更改
以下内容进一步概述了使用 ContainerProperties 和 EcsProperties API 数据类型时的一些主要区别:
-
ContainerProperties内所使用的许多参数出现在TaskContainerProperties中。一些示例包括command、image、privileged、secrets和users。可以在 TaskContainerProperties 中找到它们。 -
有些
TaskContainerProperties参数在旧版结构中没有功能等效项。一些示例包括dependsOn、essential、name、ipcMode和pidMode。有关更多信息,请参阅 EcsTaskDetails 和 TaskContainerProperties。此外,有些
ContainerProperties参数在EcsProperties结构中没有等效项或应用。在taskProperties中,container已替换为containers,因此新对象最多可以接受十个元素。欲了解更多信息,请参阅 RegisterJobDefinition:containerProperties 和 EcsTaskProperties:containers。 -
taskRoleArn在功能上与jobRoleArn等效。欲了解更多信息,请参阅 EcsTaskProperties:taskRoleArn 和 ContainerProperties:jobRoleArn。 -
您可以在
EcsProperties结构中包含一(1)到十(10)个容器。有关更多信息,请参阅 EcsTaskProperties:containers。 -
taskProperties和 instanceTypes 对象是数组,但目前只接受一个元素。例如 EcsProperties:taskProperties 和 NodeRangeProperty:instanceTypes。
Amazon ECS 的多容器作业定义
为了适应 Amazon ECS 的多容器结构,其中某些 API 数据类型有所不同。例如,
-
ecsProperties与单容器定义中的containerProperties级别相同。有关更多信息,请参阅《AWS Batch API 参考指南》中的 EcsProperties。 -
taskProperties包含为 Amazon ECS 任务定义的属性。有关更多信息,请参阅《AWS Batch API 参考指南》中的 EcsProperties。 -
containers包含与单容器定义中的containerProperties类似的信息。主要区别在于,containers使您可以最多定义十个容器。有关更多信息,请参阅《AWS Batch API 参考指南》中的 ECSTaskProperties:containers。 -
essential参数指示容器如何影响作业。所有关键容器都必须成功完成(以 0 退出),作业才能继续进行。如果标记为关键的容器失败(以非 0 退出),则作业将会失败。默认值为
true,并且必须至少将一个容器标记为essential。有关更多信息,请参阅essentialAPI 参考指南 中的 AWS Batch。 -
使用
dependsOn参数,您可以定义容器依赖项列表。有关更多信息,请参阅dependsOnAPI 参考指南 中的 AWS Batch。注意
dependsOn列表的复杂性以及相关的容器运行时可能会影响作业的开始时间。如果依赖项需要很长时间才能运行,则作业将保持STARTING状态,直到它们完成。
有关 ecsProperties 和结构的更多信息,请参阅 ecsProperties 的 RegisterJobDefinition 请求语法。
Amazon EKS 的多容器作业定义
为了适应 Amazon EKS 的多容器结构,其中某些 API 数据类型有所不同。例如,
-
name是容器的唯一标识符。此对象不是单个容器所必需的,但是,当在一个容器组(pod)中定义多个容器时,它是必需的。如果未为单个容器定义name,则应用默认名称default。 -
在 eksPodProperties 数据类型中定义
initContainers。它们在应用程序容器之前运行,将始终运行到完成,并且必须在下一个容器启动之前成功完成。这些容器已在 Amazon EKS Connector 代理中注册,并将注册信息保存在 Amazon Elastic Kubernetes Service 后端数据存储中。
initContainers对象最多可以接受十(10)个元素。有关更多信息,请参阅 Kubernetes 文档中的 Init 容器。 注意
initContainers对象可能会影响作业的开始时间。如果initContainers需要很长时间才能运行,则作业将保持STARTING状态,直到它们完成。 -
shareProcessNamespace指示容器组(pod)中的容器是否可以共享相同的进程命名空间。默认值为false。将其设置为true可以让容器看到位于同一容器组(pod)中的其他容器中的进程并发出信号。 -
每个容器都很重要。所有容器必须成功完成(以 0 退出),作业才能成功。如果一个容器失败(以非 0 退出),则作业将失败。
有关 eksProperties 和结构的更多信息,请参阅 eksProperties 的 RegisterJobDefinition 请求语法。