Amazon ECS 托管实例的 Amazon ECS 任务定义参数 - Amazon Elastic Container Service

Amazon ECS 托管实例的 Amazon ECS 任务定义参数

任务定义包括以下各部分:任务系列、AWS Identity and Access Management (IAM) 任务角色、网络模式、容器定义、卷和容量。任务定义中需要系列和容器定义。相反,任务角色、网络模式、卷和容量是可选的。

您可以在 JSON 文件中使用这些参数来配置任务定义。

以下是 Amazon ECS 托管实例的每个任务定义参数的更详细描述。

系列

family

类型:字符串

必需:是

当您注册任务定义时,将为其提供一个系列,与任务定义的多个版本的名称类似,它是使用修订号指定的。注册到某个特定系列的第一个任务定义将获得修订 1,而随后注册的任何任务定义将获得后续修订号。

容量

注册任务定义时,您可以指定 Amazon ECS 应根据哪个容量来验证任务定义。如果任务定义未根据指定的兼容性进行验证,则返回客户端异常。有关更多信息,请参阅 Amazon ECS 启动类型

任务定义中允许以下参数。

requiresCompatibilities

类型:字符串数组

必需:否

有效值:MANAGED_INSTANCES

根据其验证任务定义的容量。这将启动一项检查,以确保任务定义中使用的所有参数都符合 Amazon ECS 托管实例的要求。

任务 角色

taskRoleArn

类型:字符串

必需:否

注册任务定义时,可以为 IAM 角色提供任务角色,此角色可使任务中的容器有权代表您调用其关联策略中指定的 AWS API。有关更多信息,请参阅 Amazon ECS 任务 IAM 角色

任务执行 角色

executionRoleArn

类型:字符串

必需:有条件

任务执行角色的 Amazon 资源名称(ARN),该角色授予 Amazon ECS 容器代理代表您进行 AWS API 调用的权限。有关更多信息,请参阅 Amazon ECS 任务执行 IAM 角色

注意

任务执行 IAM 角色是必需的,具体取决于任务的要求。该角色是拉取私有 ECR 映像和使用 awslogs 日志驱动程序所必需的。

网络模式

networkMode

类型:字符串

必需:否

默认值:awsvpc

在任务中用于容器的联网模式。对于托管在 Amazon ECS 托管实例上的 Amazon ECS 任务,有效值是 awsvpchost。如果未指定网络模式,则默认网络模式为 awsvpc

如果网络模式为 host,则任务会绕过网络隔离,并且容器直接使用主机的网络堆栈。

重要

运行使用 host 网络模式的任务时,请勿使用根用户(UID 0)运行容器,以获得更好的安全性。作为安全最佳实践,请始终使用非根用户。

如果网络模式为 awsvpc,则将为任务分配弹性网络接口,且在创建服务或运行具有任务定义的任务时必须指定 NetworkConfiguration。有关更多信息,请参阅 Amazon ECS 托管实例的 Amazon ECS 任务联网

hostawsvpc 网络模式可为容器提供最高联网性能,因为容器使用 Amazon EC2 网络堆栈。使用 hostawsvpc 网络模式,公开的容器端口将直接映射到相应的主机端口(用于 host 网络模式)或附加的弹性网络接口端口(用于 awsvpc 网络模式)。因此,您不能使用动态主机端口映射。

运行时平台

operatingSystemFamily

类型:字符串

必需:否

原定设置:LINUX

当您注册任务定义时,您可以指定操作系统系列。

此字段的有效值是 LINUX

服务中使用的所有任务定义对于此参数都必须具有相同的值。

当任务定义是服务的一部分时,此值必须与服务 platformFamily 值匹配。

cpuArchitecture

类型:字符串

必需:有条件

当您注册任务定义时,您可以指定 CPU 架构。有效值为 X86_64ARM64

如果不指定值,Amazon ECS 会根据容量提供程序配置尝试将任务放置在可用的 CPU 架构上。要确保任务放置在特定 CPU 架构上,请在任务定义中指定 cpuArchitecture 的值。

服务中使用的所有任务定义对于此参数都必须具有相同的值。

有关 ARM64 的更多信息,请参阅适用于 64 位 ARM 工作负载的 Amazon ECS 任务定义

任务大小

注册任务定义时,您可以指定用于任务的总 CPU 和内存量。这独立于容器定义级别的 cpumemory 值。对于 Amazon EC2 实例上托管的任务,这些字段是可选的。

注意

Windows 容器将忽略任务级 CPU 和内存参数。我们建议为 Windows 容器指定容器级资源。

cpu

类型:字符串

必需:有条件

要为任务提供的 CPU 单位的硬限制。您可以通过 CPU 单位数或虚拟 CPU(vCPU)数字符串的方式在 JSON 文件中将 CPU 值。例如,您可以使用 1024(CPU 单位数)或 1 vCPU(vCPU 数)来指定 CPU 值。注册任务定义时,vCPU 值将转换为指示 CPU 单元的整数。

该字段是可选的。如果您的集群没有任何带可用的已请求 CPU 单位的已注册容器实例,则该任务将失败。支持的值介于 0.125 vCPU 和 10 vCPU 之间。

memory

类型:字符串

必需:有条件

要向任务提供的内存硬限制。您可以通过以二进制兆字节(MiB)或千兆字节(GB)字符串方式在任务定义中指定内存值。例如,您可以使用 3072(以 MiB 为单位)或 3 GB(以 GB 为单位)指定内存值。注册任务定义时,GB 值将转换为指示 MiB 的整数。

此字段是可选的,并且可使用任何值。如果指定了任务级内存值,则容器级内存值是可选的。如果您的集群没有任何带可用的已请求内存的已注册容器实例,则该任务将失败。您可以尝试通过为任务提供尽可能多的用于特定实例类型的内存来最大程度地利用资源。有关更多信息,请参阅 预留 Amazon ECS Linux 容器实例内存

其他任务定义参数

以下任务定义参数可在 Amazon ECS 控制台中注册任务定义时使用,方法是使用 Configure via JSON(通过 JSON 配置)选项。有关更多信息,请参阅 使用控制台创建 Amazon ECS 任务定义

临时存储

ephemeralStorage
注意

Amazon ECS 托管实例上运行的任务不支持此参数。

类型:EphemeralStorage 对象

必需:否

要为任务分配的临时存储量(以 GB 为单位)。此参数用于扩展可用的临时存储总量,超出原定设置数量,可用于在 AWS Fargate 上托管的任务。有关更多信息,请参阅 将绑定挂载与 Amazon ECS 结合使用

IPC 模式

ipcMode
注意

Amazon ECS 托管实例上运行的任务不支持此参数。

类型:字符串

必需:否

用于任务中的容器的 IPC 资源命名空间。有效值为 hosttasknone。如果指定了 host,则在同一容器实例上指定了 host IPC 模式的任务中的所有容器将与主机 Amazon EC2 实例共享相同的 IPC 资源。如果指定了 task,则指定任务中的所有容器将共享相同的 IPC 资源。如果指定了 none,则任务的容器中的 IPC 资源是私有的,不与任务中或容器实例上的其他容器共享。如果未指定任何值,则 IPC 资源命名空间共享取决于容器运行时配置。

PID 模式

pidMode

类型:字符串

必需:否

用于任务中的容器的过程命名空间。有效值为 hosttask。如果指定了 host,则在同一容器实例上指定了 host PID 模式的任务中的所有容器将与主机 Amazon EC2 实例共享相同的进程命名空间。如果指定了 task,则指定任务中的所有容器将共享相同的进程命名空间。如果未指定任何值,则默认值为私有命名空间。

如果使用了 host PID 模式,发生非预期的过程命名空间公开的风险会提高。

代理配置

proxyConfiguration
注意

Amazon ECS 托管实例上运行的任务不支持此参数。

类型:ProxyConfiguration 对象

必需:否

App Mesh 代理的配置详细信息。

标签

您应用于任务定义以帮助您对其进行分类和组织的元数据。每一个标签都包含一个键和一个可选值。您可以同时定义它们。

下面是适用于标签的基本限制:

  • 每个资源的最大标签数 - 50

  • 对于每个资源,每个标签键都必须是唯一的,每个标签键只能有一个值。

  • 最大键长度 - 128 个 Unicode 字符(采用 UTF-8 格式)

  • 最大值长度 - 256 个 Unicode 字符(采用 UTF-8 格式)

  • 如果您的标记模式针对多个服务和资源使用,请记得其它服务可能对允许使用的字符有限制。通常允许使用的字符包括:可用 UTF-8 格式表示的字母、数字和空格,以及以下字符:+ - = . _ : / @。

  • 标签键和值区分大小写。

  • 请不要使用 aws:AWS: 或任何大写或小写组合(例如,键或值的前缀),因为它将保留以供 AWS 使用。您无法编辑或删除带此前缀的标签键或值。具有此前缀的标签不计入每个资源的标签数限制。

key

类型:字符串

必需:否

构成标签的键-值对的一个部分。键是一种常见的标签,行为类似于更具体的标签值的类别。

value

类型:字符串

必需:否

构成标签的键-值对的可选部分。值充当标签类别(键)中的描述符。

Elastic Inference 加速器(已弃用)

注意

Amazon Elastic Inference(EI)功能不再向客户开放。

inferenceAccelerator
注意

Amazon ECS 托管实例上运行的任务不支持此参数。

类型InferenceAccelerator 对象

必需:否

用于任务中的容器的 Elastic Inference 加速器。

放置约束

placementConstraints

类型:TaskDefinitionPlacementConstraint 对象数组

必需:否

要用于任务的一组放置约束对象。对于每个任务,您可以指定多达 10 种约束(此限制包括任务定义中的约束和这些在运行时指定的约束)。

对于在 Amazon ECS 托管实例上运行的任务,Amazon ECS 支持 distinctInstacememberOf 放置约束。使用 memberOf 放置约束的任务支持下面的属性:

  • ecs.subnet-id

  • ecs.availability-zone

  • ecs.cpu-architecture

  • ecs.instance-type

有关放置约束的更多信息,请参阅定义 Amazon ECS 将哪些容器实例用于任务

注册任务定义时,您可以选择性地为任务指定卷列表。这样,您便可以在任务中使用数据卷。

有关卷类型和其他参数的更多信息,请参阅Amazon ECS 任务的存储选项

name

类型:字符串

必需:是

卷的名称。最多能包含 255 个字母(大写和小写字母)、数字和下划线。此名称已在容器定义sourceVolumemountPoints参数中引用。

host

类型:HostVolumeProperties 对象

必需:否

使用绑定挂载主机卷时需指定此参数。host 参数的内容确定您的绑定挂载主机卷是否一直保存在主机容器实例上以及存储它的位置上。如果 host 参数为空,则系统将为数据卷分配主机路径。但是,在与该卷关联的容器停止运行后,不保证保存数据。

dockerVolumeConfiguration
注意

Amazon ECS 托管实例上运行的任务不支持此参数。

类型:DockerVolumeConfiguration 对象

必需:否

使用 Docker 卷时需指定此参数。

efsVolumeConfiguration

类型:EFSVolumeConfiguration 对象

必需:否

使用 Amazon EFS 文件系统进行任务存储时需指定此参数。

fsxWindowsFileServerVolumeConfiguration
注意

Amazon ECS 托管实例上运行的任务不支持此参数。

类型:FSxWindowsFileServerVolumeConfiguration 对象

必需:否

使用适用于 Windows File Server 的 Amazon FSx 文件系统进行任务存储时需指定此参数。

configuredAtLaunch

类型:布尔值

必需:否

指示是否应在启动时配置卷。这用于为独立任务或作为服务的一部分创建的任务创建 Amazon EBS 卷。每个任务定义修订只能在启动时在卷配置中配置一个卷。

容器定义

当您注册任务定义时,必须指定将传递给容器实例上的 Docker 进程守护程序的容器定义的列表。容器定义中允许以下参数。

名称

name

类型:字符串

必需:是

容器的名称。最多能包含 255 个字母 (大写和小写字母)、数字、连字符和下划线。如果您正在任务定义中将多个容器链接在一起,则可在另一个容器的 links 中输入一个容器的 name。这样是为了连接容器。

图像

image

类型:字符串

必需:是

用于启动容器的映像。此字符串将直接传递给 Docker 进程守护程序。默认情况下,Docker Hub 注册表中的映像可用。您也可以使用 repository-url/image:tagrepository-url/image@digest 指定其他存储库。允许最多 255 个字母(大写和小写字母)、数字、连字符、下划线、冒号、句点、正斜杠和井号。此参数对应于 docker create-container 命令中的 Image 和 docker run 命令的 IMAGE 参数。

  • 在新任务启动时,Amazon ECS 容器代理会提取最新版本的指定映像和标签以供容器使用。但是,存储库映像的后续更新不会传播到已在运行的任务。

  • 如果未在任务定义的映像路径中指定某个标签或摘要,则 Amazon ECS 容器代理会使用 latest 标签来拉取指定的映像。

  • 存储库映像的后续更新不会传播到已在运行的任务。

  • 支持私有注册表中的映像。有关更多信息,请参阅 在 Amazon ECS 中使用非 AWS 容器映像

  • Amazon ECR 存储库中的映像可通过使用完整的 registry/repository:tagregistry/repository@digest 命名约定来指定(例如 aws_account_id.dkr.ecr.region.amazonaws.com/my-web-app:latestaws_account_id.dkr.ecr.region.amazonaws.com/my-web-app@sha256:94afd1f2e64d908bc90dbca0035a5b567EXAMPLE)。

  • Docker Hub 上的官方存储库中的映像使用一个名称(例如,ubuntumongo)。

  • Docker Hub 上其他存储库中的映像通过组织名称(例如,amazon/amazon-ecs-agent)进行限定。

  • 其他在线存储库中的映像由域名 (例如,quay.io/assemblyline/ubuntu) 进行进一步限定。

versionConsistency

类型:字符串

有效值:enabled|disabled

必需:否

指定 Amazon ECS 是否将容器定义中提供的容器映像标签解析为映像摘要。默认情况下,此行为enabled。如果您将容器的值设置为 disabled,Amazon ECS 不会将容器映像标签解析为摘要,而是使用容器定义中指定的原始映像 URI 进行部署。有关容器映像解析的更多信息,请参阅容器映像解析

内存

memory

类型:整数

必需:否

要提供给容器的内存量(以 MiB 为单位)。如果容器尝试使用超出此处指定的内存,该容器将被终止。为任务中的所有容器预留的内存总量必须低于任务 memory 值(如果指定了一个)。此参数对应于 docker create-container 命令中的 Memory 和 docker run 命令的 --memory 选项。

Docker 20.10.0 或更高版本进程守护程序将为容器预留最少 6MiB 的内存。因此,不要为容器指定少于 6MiB 的内存。

Docker 19.03.13-ce 或更早版本的进程守护程序将为容器预留最少 4MiB 的内存。因此,不要为容器指定少于 4MiB 的内存。

注意

如果您尝试通过为任务提供尽可能多的用于特定实例类型的内存来最大程度地利用资源,请参阅预留 Amazon ECS Linux 容器实例内存

memoryReservation

类型:整数

必需:否

要为容器预留的内存量的软限制(以 MiB 为单位)。当系统内存处于争用状态时,Docker 会尝试将容器内存保持在此软限制范围内。但是,您的容器在需要时可使用更多内存。容器可以用尽使用 memory 参数指定的硬限制(如果适用)或容器实例中的全部可用内存,以较低者为准。此参数对应于 docker create-container 命令中的 MemoryReservation 和 docker run 命令的 --memory-reservation 选项。

如果未指定任务级内存值,则必须为容器定义中的一个或两个 memorymemoryReservation 指定非零整数。如果指定两者,则 memory 必须大于 memoryReservation。如果指定 memoryReservation,则将从容器所在的容器实例的可用内存资源中减去该值。否则,将使用 memory 的值。

例如,假设您的容器通常使用 128MiB 内存,但有时会在短时间内迸发至 256MiB 内存。您可以将 memoryReservation 设置为 128MiB,将 memory 硬限制设置为 300 MiB。此配置允许容器从容器实例上的剩余资源中预留 128MiB 内存。同时,此配置还允许容器在需要时使用更多内存资源。

Docker 20.10.0 或更高版本进程守护程序将为容器预留最少 6MiB 的内存。因此,不要为容器指定少于 6MiB 的内存。

Docker 19.03.13-ce 或更早版本的进程守护程序将为容器预留最少 4MiB 的内存。因此,不要为容器指定少于 4MiB 的内存。

注意

如果您尝试通过为任务提供尽可能多的用于特定实例类型的内存来最大程度地利用资源,请参阅预留 Amazon ECS Linux 容器实例内存

CPU

cpu

类型:整数

必需:否

为容器预留的 cpu 单元数。此参数对应于 docker create-container 命令中的 CpuShares 和 docker run 命令的 --cpu-shares 选项。

此字段对于使用 EC2 容量提供程序的任务是可选的,而且唯一要求是任务内为所有容器保留的 CPU 总量低于任务级 cpu 值。

注意

您可以通过将 Amazon EC2 实例详细信息页面上列出的每个 EC2 实例类型的 vCPU 数乘以 1024,确定该实例类型可用的 CPU 单元数。

Linux 容器会按照与其分配的量相同的比例,与容器实例上的其他容器共享未分配的 CPU 单元。例如,如果您在单核实例类型上运行一个单容器任务,同时为该容器指定 512 个 CPU 单元,而且这是在容器实例上运行的唯一任务,则该容器可在任何给定间使用完整的 1,024 个 CPU 单元。但是,如果您在该容器实例上启动了同一任务的另一个副本,则保证每个任务在需要时至少有 512 个 CPU 单位。此外,如果另一个容器没有使用它,则每个容器都可以浮动到更高的 CPU 使用率。如果两个任务一直都处于 100% 活动状态,那么它们将限制为 512 个 CPU 单位。

在 Linux 容器实例上,容器实例上的 Docker 进程守护程序使用 CPU 值来计算正在运行的容器的相对 CPU 共享比例。有关更多信息,请参阅 Docker 文档中的 CPU 共享约束。Linux 内核允许的最小有效 CPU 共享值为 2。不过,CPU 参数不是必需的,您可以在容器定义中使用小于 2 的 CPU 值。对于小于 2 的 CPU 值(包括 null),此行为因您的 Amazon ECS 容器代理版本而异:

  • 代理版本小于或等于 1.1.0:Null 和零 CPU 值将作为 0 传递给 Docker,然后 Docker 将其转换为 1024 个 CPU 份额。CPU 值 1 将作为 1 传递给 Docker,然后 Linux 内核将其转换为 2 个 CPU 份额。

  • 代理版本大于或等于 1.2.0:Null、零和 CPU 值 1 将作为 2 传递给 Docker。

在 Windows 容器实例上,此 CPU 限制将作为绝对限制或配额强制实施。Windows 容器只能访问任务定义中所述的指定的 CPU 量。Null 或零 CPU 值作为 0 传递给 Docker,Windows 将其解释为一个 CPU 的 1%。

端口映射

portMappings

类型:对象数组

必需:否

端口映射将容器的网络端口暴露给外界。这让客户端能够访问您的应用程序。它也用于同一任务内的容器间通信。

对于使用 awsvpc 网络模式的任务定义,只能指定 containerPorthostPort 始终被忽略,并且容器端口会自动映射到主机上的随机高编号端口。

此参数的大部分字段(包括 containerPorthostPortprotocol)对应于 thedocker create-container 命令中的 PortBindings 和 docker run 命令的 --publish 选项。如果将任务定义的网络模式设置为 host,则主机端口必须是未定义的或者必须与端口映射中的容器端口匹配。

注意

在任务达到 RUNNING 状态之后,手动和自动主机及容器端口分配在以下位置可见:

  • 控制台:所选任务的容器说明的网络绑定部分。

  • AWS CLI:networkBindings 命令输出的 describe-tasks 部分。

  • API:DescribeTasks 响应。

  • 元数据:任务元数据端点。

appProtocol

类型:字符串

必需:否

用于端口映射的应用程序协议。此参数仅适用于服务连接。我们建议您将此参数设置为与应用程序使用的协议一致。如果您设置此参数,Amazon ECS 会将协议特定的连接处理添加到服务连接代理。如果您设置此参数,Amazon ECS 会在 Amazon ECS 控制台和 CloudWatch 中添加协议特定的遥测。

如果您没有为此参数设置值,则使用 TCP。但是,Amazon ECS 不会为 TCP 添加协议特定的遥测。

有关更多信息,请参阅 使用 Service Connect 连接具有短名称的 Amazon ECS 服务

有效的协议值:"HTTP" | "HTTP2" | "GRPC"

containerPort

类型:整数

必需:是,当使用 portMappings

绑定到用户指定的或自动分配的主机端口的容器上的端口号。

对于使用 awsvpc 网络模式的 EC2 任务,可以使用 containerPort 来指定公开的端口。

containerPortRange

类型:字符串

必需:否

容器上的端口号范围,该容器绑定到动态映射的主机端口范围。

您只能使用 register-task-definition API 设置此参数。该选项在 portMappings 参数中可用。有关更多信息,请参阅《AWS Command Line Interface 参考》中的 register-task-definition

当您指定 containerPortRange 时,以下规则适用:

  • 您必须使用 awsvpc 网络模式。

  • 容器实例必须拥有不低于 1.67.0 版本的容器代理和不低于 1.67.0-1 版本的 ecs-init 程序包。

  • 每个容器最多可指定 100 个端口范围。

  • 您不用指定 hostPortRangehostPortRange 的值设置如下:

    • 对于使用 awsvpc 网络模式的任务中的容器,hostPort 将设置为与 containerPort 相同的值。这是一种静态映射策略。

  • containerPortRange 有效值为 1 到 65535。

  • 每个容器的一个端口只能包含在的一个端口映射中。

  • 您不能指定重叠的端口范围。

  • 范围中的第一个端口必须小于范围中的最后一个端口。

  • 当有大量端口时,Docker 建议您关闭 Docker 进程守护程序配置文件中的 docker-proxy。

    有关更多信息,请参阅 Github 上的问题 #11185

    有关如何关闭 Docker 进程守护程序配置文件中的 docker-proxy 的信息,请参阅《Amazon ECS 开发者指南》中的 Docker 进程守护程序

您可以调用 DescribeTasks 以查看 hostPortRange,它们是绑定到容器端口的主机端口。

该端口范围不包含在发送到 EventBridge 的 Amazon ECS 任务事件中。有关更多信息,请参阅 使用 EventBridge 自动响应 Amazon ECS 错误

hostPortRange

类型:字符串

必需:否

用于网络绑定的主机上的端口号范围。它由 Docker 分配并由 Amazon ECS 代理传送。

hostPort

类型:整数

必需:否

要为您的容器预留的容器实例上的端口号。

hostPort 可以留空或值与 containerPort 相同。

Docker 版本 1.6.0 及更高版本的默认临时端口范围在 /proc/sys/net/ipv4/ip_local_port_range 下的实例上列出。如果此内核参数不可用,则将使用来自 49153–65535 的原定设置临时端口范围。不要尝试指定临时端口范围内的主机端口。这是因为这些都是为自动分配预留的。通常,低于 32768 的端口位于临时端口范围之外。

默认预留端口为适用于 SSH 的 22、Docker 端口 23752376 以及 Amazon ECS 容器代理端口 51678-51680。针对正在运行的任务的之前由用户指定的任何主机端口在任务运行时也将预留。任务停止后,系统会释放主机端口。当前预留端口将显示在 describe-container-instances 输出的 remainingResources 中。一个容器实例一次最多可拥有 100 个预留端口,包括默认预留端口。自动分配的端口不计入 100 个预留端口配额。

name

类型:字符串

必填项:否,在服务中配置 Service Connect 和 VPC Lattice 时需要

用于端口映射的名称。此参数仅适用于 Service Connect 和 VPC Lattice。此参数是您在服务的 Service Connect 和 VPC Lattice 配置中使用的名称。

有关更多信息,请参阅 使用 Service Connect 连接具有短名称的 Amazon ECS 服务

在以下示例中,使用了针对 Service Connect 和 VPC Lattice 的两个必填字段。

"portMappings": [ { "name": string, "containerPort": integer } ]
protocol

类型:字符串

必需:否

用于端口映射的协议。有效值为 tcpudp。默认值为 tcp

重要

Service Connect 仅支持 tcp。请记住,如果未设置此字段,则表示 tcp

如果您指定的是主机端口,请使用以下语法。

"portMappings": [ { "containerPort": integer, "hostPort": integer } ... ]

如果您需要自动分配的主机端口,请使用以下语法。

"portMappings": [ { "containerPort": integer } ... ]

私有存储库凭证

repositoryCredentials

类型:RepositoryCredentials 对象

必需:否

私有注册表身份验证的存储库凭证。

有关更多信息,请参阅 在 Amazon ECS 中使用非 AWS 容器映像

credentialsParameter

类型:字符串

必需:是,当使用 repositoryCredentials

包含私有存储库凭证的密钥的 Amazon 资源名称 (ARN)。

有关更多信息,请参阅 在 Amazon ECS 中使用非 AWS 容器映像

注意

使用 Amazon ECS API、AWS CLI 或 AWS 开发工具包时,如果密钥存在于要启动的任务所在的区域,使用密钥的完整 ARN 或名称。在您使用 AWS 管理控制台 时,必须指定密钥的完整 ARN。

下面是显示必需参数的任务定义代码段:

"containerDefinitions": [ { "image": "private-repo/private-image", "repositoryCredentials": { "credentialsParameter": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name" } } ]

Essential

essential

类型:布尔值

必需:否

如果将容器的 essential 参数标记为 true,并且该容器出于任何原因发生故障或停止,则属于此任务的所有其他容器将停止。如果将容器的 essential 参数标记为 false,则容器发生故障不会影响任务中的剩余容器。如果省略此参数,则假定容器是主要容器。

所有任务都必须具有至少一个主要容器。如果您有一个由多个容器组成的应用程序,则将用于相同目的的容器分成多个组件,然后将不同的组件分为多个任务定义。有关更多信息,请参阅 设计适用于 Amazon ECS 的应用程序架构

入口点

entryPoint

类型:字符串数组

必需:否

传递给容器的入口点。此参数对应于 docker create-container 命令中的 Entrypoint 和 docker run 命令的 --entrypoint 选项。

"entryPoint": ["string", ...]

命令

command

类型:字符串数组

必需:否

传递给容器的命令。此参数对应于 docker create-container 命令中的 Cmd 和 docker run 命令的 COMMAND 参数。如果有多个参数,则每个参数都是数组中的分隔字符串。

"command": ["string", ...]

工作目录

workingDirectory

类型:字符串

必需:否

在其中运行命令的容器中的工作目录。此参数对应于 docker create-container 命令中的 WorkingDir 和 docker run 命令的 --workdir 选项。

高级容器定义参数

以下高级容器定义参数为 docker run 命令(用于在 Amazon ECS 容器实例上启动容器)提供了扩展功能。

重启策略

restartPolicy

容器重启策略和相关的配置参数。为容器设置重启策略后,Amazon ECS 无需替换任务即可重启容器。有关更多信息,请参阅 使用容器重启策略重启 Amazon ECS 任务中的单个容器

enabled

类型:布尔值

必需:是

指定是否为该容器启用重启策略。

ignoredExitCodes

类型:整数数组

必需:否

Amazon ECS 将会忽略并且不会尝试重启的退出代码列表。您最多可以指定 50 个容器退出代码。默认情况下,Amazon ECS 不会忽略任何退出代码。

restartAttemptPeriod

类型:整数

必需:否

容器在尝试重启前必须运行的时长(以秒为单位)。容器每 restartAttemptPeriod 秒只能重启一次。如果容器在此期间无法运行并提前退出,则不会重启。您可以将最小 restartAttemptPeriod 设置为 60 秒,将最大 restartAttemptPeriod 设置为 1800 秒。默认情况下,容器必须运行 300 秒后才能重启。

运行状况检查

healthCheck

容器的运行状况检查命令和关联的配置参数。有关更多信息,请参阅 使用容器运行状况检查确定 Amazon ECS 任务运行状况

command

一个表示容器运行的命令的字符串数组,用于确定其运行状况是否正常。字符串数组可以以 CMD 开头以直接运行命令参数,或者以 CMD-SHELL 开头以使用容器的默认 Shell 来运行命令。如果两者都未指定,将使用 CMD

在 AWS 管理控制台 中注册任务定义时,请使用命令的逗号分隔列表。在创建任务定义后,这些命令将转换为字符串。以下是运行状况检查的输入示例。

CMD-SHELL, curl -f http://localhost/ || exit 1

在使用 AWS 管理控制台 JSON 面板、AWS CLI 或 API 注册任务定义时,将命令列表包含在括号中。以下是运行状况检查的输入示例。

[ "CMD-SHELL", "curl -f http://localhost/ || exit 1" ]

不带有 stderr 输出的退出代码 0 表示成功,非零退出代码表示失败。

interval

每次运行状况检查间隔的时间(以秒为单位)。您可以指定 5 到 300 秒之间的值。默认值为 30 秒。

timeout

等待运行状况检查成功执行的时间长度(以秒为单位),超过该时间则视为失败。您可以指定 2 到 60 秒之间的值。默认值为 5 秒。

retries

重试失败的运行状况检查的次数,超过该次数将容器视为不正常。您可以指定 1 到 10 之间的重试次数。默认值为三次重试。

startPeriod

可选的宽限期,这让容器有时间来引导,不将失败的运行状况检查计数计入最大重试次数中。您可以指定 0 到 300 秒之间的值。startPeriod 默认已禁用。

如果 startPeriod 中的运行状况检查成功,则容器将被视为运行状况良好,并且任何后续失败将计入最大重试次数。

环境

cpu

类型:整数

必需:否

Amazon ECS 容器代理为容器预留的 cpu 单位的数量。在 Linux 上,此参数对应于创建容器部分中的 CpuShares

对于在 Amazon ECS 托管实例上运行的任务,此字段是可选的。为任务中的所有容器预留的 CPU 总量必须低于任务级的 cpu 值。

Linux 容器会按照与其分配的量相同的比例,与容器实例上的其他容器共享未分配的 CPU 单元。例如,假设您在单核实例类型上运行一个单容器任务,同时为该容器指定 512 个 CPU 单元。此外,在容器实例上,该任务是运行的唯一任务。在此示例中,容器可以在任何给定时间使用完整的 1024 个 CPU 单位份额。但是,假设您在该容器实例上启动了同一任务的另一个副本。在需要时,保证每个任务至少有 512 个 CPU 单位。同样,如果另一个容器没有使用剩余的 CPU,则每个容器都可以浮动到更高的 CPU 利用率。但是,如果两个任务一直都处于 100% 活动状态,那么它们将限制为 512 个 CPU 单位。

在 Linux 容器实例上,容器实例上的 Docker 进程守护程序使用 CPU 值来计算正在运行的容器的相对 CPU 共享比例。Linux 内核允许的最小有效 CPU 共享值为 2,Linux 内核允许的最大有效 CPU 共享值为 262144。不过,CPU 参数不是必需的,您可以在容器定义中使用小于 2 和大于 262144 的 CPU 值。对于小于 2(包括 null)和大于 262144 的 CPU 值,此行为因 Amazon ECS 容器代理版本而异:

有关更多示例,请参阅 Amazon ECS 如何管理 CPU 和内存资源

gpu

类型:ResourceRequirement 对象

必需:否

Amazon ECS 容器代理为容器预留的物理 GPUs 的数量。为某个任务中的所有容器预留的 GPU 的数量不得超过该任务在其上启动的容器实例的可用 GPU 的数量。有关更多信息,请参阅 适用于 GPU 工作负载的 Amazon ECS 任务定义

Elastic Inference accelerator
注意

Amazon ECS 托管实例上托管的容器不支持此参数。

类型:ResourceRequirement 对象

必需:否

对于 InferenceAccelerator 类型,value 与任务定义中指定的 InferenceAcceleratordeviceName 匹配。有关更多信息,请参阅 Elastic Inference 加速器名称(已弃用)

essential

类型:布尔值

必需:否

假设将容器的 essential 参数标记为 true,并且该容器出于任何原因发生故障或停止。然后,将停止属于此任务的所有其他容器。如果将容器的 essential 参数标记为 false,则容器发生故障不会影响任务中的剩余容器。如果省略此参数,则假定容器是主要容器。

所有任务都必须具有至少一个主要容器。假设您有一个由多个容器组成的应用程序。然后,将用于相同目的的容器分组成各组件,并将不同的组件分成多个任务定义。有关更多信息,请参阅 设计适用于 Amazon ECS 的应用程序架构

"essential": true|false
entryPoint
重要

Amazon ECS 容器代理的早期版本无法正确处理 entryPoint 参数。如果您在使用 entryPoint 时遇到问题,请更新您的容器代理或改为输入命令和参数作为 command 数组项。

类型:字符串数组

必需:否

传递给容器的入口点。

"entryPoint": ["string", ...]
command

类型:字符串数组

必需:否

传递给容器的命令。此参数对应于 create-container 命令中的 Cmd 和 docker run 命令的 COMMAND 参数。如果有多个参数,则确保每个参数都是数组中的分隔字符串。

"command": ["string", ...]
workingDirectory

类型:字符串

必需:否

在其中运行命令的容器中的工作目录。此参数将映射到 Docker Remote API创建容器部分中的 WorkingDir 以及 docker run--workdir 选项。

"workingDirectory": "string"
environmentFiles

类型:对象数组

必需:否

包含要传递到容器的环境变量的文件列表。此参数对应于 docker run 命令的 --env-file 选项。

您最多可以指定 10 个环境文件。文件必须具有 .env 文件扩展名。环境文件中的每一行都包含 VARIABLE=VALUE 格式的环境变量。以 # 开头的行被视为注释并会被忽略。

如果在容器定义中指定了单个环境变量,则这些变量的优先级高于环境文件中包含的变量。如果指定了多个包含相同变量的环境文件,则会按从上到下的顺序处理这些文件。建议您使用唯一的变量名。有关更多信息,请参阅 将单个环境变量传递给 Amazon ECS 容器

value

类型:字符串

必需:是

包含环境变量文件的 Amazon S3 对象的 Amazon Resource Name (ARN)。

type

类型:字符串

必需:是

要使用的文件类型 s3 是唯一受支持的值。

environment

类型:对象数组

必需:否

要传递给容器的环境变量。此参数对应于 docker create-container 命令中的 Env 和 docker run 命令的 --env 选项。

重要

建议不要对敏感信息(如凭证数据)使用纯文本环境变量。

name

类型:字符串

必需:是,当使用 environment

环境变量的名称。

value

类型:字符串

必需:是,当使用 environment

环境变量的值。

"environment" : [ { "name" : "string", "value" : "string" }, { "name" : "string", "value" : "string" } ]
secrets

类型:对象数组

必需:否

表示用于对容器开放的密钥的对象。有关更多信息,请参阅 将敏感数据传递给 Amazon ECS 容器

name

类型:字符串

必需:是

要在容器上设置为环境变量的值。

valueFrom

类型:字符串

必需:是

要向容器公开的密文。支持的值为 AWS Secrets Manager 密钥的完整 Amazon 资源名称(ARN)或 AWS Systems Manager Parameter Store 中的参数的完整 ARN。

注意

如果 Systems Manager Parameter Store 参数或 Secrets Manager 书与要启动的任务位于同一 AWS 区域中,则可以使用密钥的完整 ARN 或名称。如果参数存在于不同的区域,则必须指定完整的 ARN。

"secrets": [ { "name": "environment_variable_name", "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name" } ]

安全性

privileged

类型:布尔值

必需:否

当此参数为 true 时,将对该容器提供对主机容器实例的提升特权(类似于 root 用户)。此参数对应于 docker create-container 命令中的 Privileged 和 docker run 命令的 --privileged 选项。

user

类型:字符串

必需:否

要在容器内使用的用户。此参数对应于 docker create-container 命令中的 User 和 docker run 命令的 --user 选项。

重要

使用 host 网络模式运行任务时,不应使用根用户(UID 0)运行容器。我们建议使用非根用户来提高安全性。

您可以使用以下格式指定 user。如果指定 UID 或 GID,您必须将其指定为一个正整数。

  • user

  • user:group

  • uid

  • uid:gid

  • user:gid

  • uid:group

readonlyRootFilesystem

类型:布尔值

必需:否

当此参数为 true 时,容器将获得一个只读根文件系统。此参数对应于 docker create-container 命令中的 ReadonlyRootfs 和 docker run 命令的 --read-only 选项。

dockerSecurityOptions
注意

Amazon ECS 托管实例上运行的任务不支持此参数。

类型:字符串数组

必需:否

用于为 SELinux 和 AppArmor 多级别安全系统提供自定义标签的字符串列表。此字段对使用 Fargate 的任务中的容器无效。

ulimits

类型:Ulimit 对象数组

必需:否

要在容器中设置的 ulimits 的列表。如果在任务定义中指定了 ulimit 值,则它将覆盖 Docker 设置的默认值。此参数对应于 docker create-container 命令中的 Ulimits 和 docker run 命令的 --ulimit 选项。有效的命名值在 Ulimit 数据类型中显示。

Fargate 上托管的 Amazon ECS 任务使用操作系统设置的默认资源限制值,Fargate 覆盖的 nofile 资源限制参数除外。nofile 资源限制对容器可以使用的打开文件数量设置限制。默认 nofile 软限制是 1024,默认硬限制是 65535

此参数要求容器实例上的 Docker Remote API 版本为 1.18 或更高版本。要检查您的容器实例上的 Docker Remote API 版本,请登录到容器实例并运行以下命令:sudo docker version --format '{{.Server.APIVersion}}'

dockerLabels
注意

Amazon ECS 托管实例上托管的容器不支持此参数。

类型:字符串到字符串映射

必需:否

要添加到容器的标签的键值映射。此参数对应于 docker create-container 命令中的 Labels 和 docker run 命令的 --label 选项。

此参数要求容器实例上的 Docker Remote API 版本为 1.18 或更高版本。

"dockerLabels": {"string": "string" ...}

网络设置

disableNetworking
注意

Amazon ECS 托管实例上运行的任务不支持此参数。

类型:布尔值

必需:否

当此参数设置为 true 时,容器内会关闭联网。

默认值为 false

"disableNetworking": true|false
注意

Amazon ECS 托管实例上运行的任务不支持此参数。

类型:字符串数组

必需:否

link 参数允许容器相互进行通信,而无需端口映射。只有在任务定义的网络模式被设置为 bridge 时才支持此参数。name:internalName 构造类似于 Docker 链接中的 name:alias。最多可使用 255 个字母 (大写和小写字母)、数字、连字符和下划线。

重要

在同一容器实例上并置的容器也许能够相互进行通信,而无需链接或主机端口映射。容器实例上的网络隔离由安全组和 VPC 设置控制。

"links": ["name:internalName", ...]
hostname
注意

Amazon ECS 托管实例上运行的任务不支持此参数。

类型:字符串

必需:否

要对您的容器使用的主机名。此参数对应于 docker create-container 命令中的 Hostname 和 docker run 命令的 --hostname 选项。

"hostname": "string"
dnsServers
注意

Amazon ECS 托管实例上运行的任务不支持此参数。

类型:字符串数组

必需:否

提供给容器的 DNS 服务器的列表。

"dnsServers": ["string", ...]
extraHosts
注意

使用 awsvpc 网络模式的任务不支持此参数。

类型:对象数组

必需:否

要追加到容器上的 /etc/hosts 文件的主机名和 IP 地址映射的列表。

此参数对应于 docker create-container 命令中的 ExtraHosts 和 docker run 命令的 --add-host 选项。

"extraHosts": [ { "hostname": "string", "ipAddress": "string" } ... ]
hostname

类型:字符串

必需:是,当使用 extraHosts

要用于 /etc/hosts 条目中的主机名。

ipAddress

类型:字符串

必需:是,当使用 extraHosts

要用于 /etc/hosts 条目中的 IP 地址。

存储和日志记录

readonlyRootFilesystem

类型:布尔值

必需:否

当此参数为 true 时,将对此容器提供对其根文件系统的只读访问权。此参数对应于 docker create-container 命令中的 ReadonlyRootfs 和 docker run 命令的 --read-only 选项。

默认值为 false

"readonlyRootFilesystem": true|false
mountPoints

类型:对象数组

必需:否

容器中数据卷的挂载点。此参数对应于 create-container Docker API 中的 Volumes 和 docker run 命令的 --volume 选项。

Windows 容器可在 $env:ProgramData 所在的驱动器上挂载整个目录。Windows 容器无法在其他驱动器上挂载目录,并且挂载点不能跨驱动器使用。您必须指定挂载点才能将 Amazon EBS 卷直接附加到 Amazon ECS 任务。

sourceVolume

类型:字符串

必需:是,当使用 mountPoints

要挂载的卷的名称。

containerPath

类型:字符串

必需:是,当使用 mountPoints

挂载卷的容器中的路径。

readOnly

类型:布尔值

必需:否

如果此值为true,则容器具有对卷的只读访问权。如果此值为false,则容器可对卷进行写入。默认值为 false

对于在运行 Windows 操作系统的 EC2 实例上运行的任务,请保留默认值 false

volumesFrom

类型:对象数组

必需:否

要从其他容器挂载的数据卷。此参数对应于 docker create-container 命令中的 VolumesFrom 和 docker run 命令的 --volumes-from 选项。

sourceContainer

类型:字符串

必需:是,当使用 volumesFrom

要从其中挂载卷的容器的名称。

readOnly

类型:布尔值

必需:否

如果此值为true,则容器具有对卷的只读访问权。如果此值为false,则容器可对卷进行写入。默认值为 false

"volumesFrom": [ { "sourceContainer": "string", "readOnly": true|false } ]
logConfiguration

类型:LogConfiguration 对象

必需:否

容器的日志配置规范。

有关使用日志配置的示例任务定义,请参阅Amazon ECS 任务定义示例

此参数对应于 docker create-container 命令中的 LogConfig 和 docker run 命令的 --log-driver 选项。默认情况下,容器使用与 Docker 进程守护程序相同的日志记录驱动程序。但容器可能通过在容器定义中使用此参数指定日志驱动程序,以此来使用不同于 Docker 进程守护程序的日志记录驱动程序。要对容器使用不同的日志记录驱动程序,必须在容器实例上正确配置日志系统(或者在不同的日志服务器上使用远程日志记录选项)。

指定容器的日志配置时,考虑以下事项:

  • Amazon ECS 支持提供给 Docker 进程守护程序的一小部分日志记录驱动程序。

  • 此参数要求您容器实例上的 Docker Remote API 版本为 1.18 或更高版本。

"logConfiguration": { "logDriver": "awslogs",""splunk", "awsfirelens", "options": {"string": "string" ...}, "secretOptions": [{ "name": "string", "valueFrom": "string" }] }
logDriver

类型:字符串

有效值:"awslogs","splunk","awsfirelens"

必需:是,当使用 logConfiguration

要用于容器的日志驱动程序。默认情况下,前面列出的有效值是一些日志驱动程序,Amazon ECS 容器代理可以与它们进行通信。

支持的日志驱动程序为 awslogssplunkawsfirelens

有关在任务定义中如何使用 awslogs 日志驱动程序以将容器日志发送到 CloudWatch Logs 的更多信息,请参阅将 Amazon ECS 日志发送到 CloudWatch

有关使用 awsfirelens 日志驱动程序的更多信息,请参阅将 Amazon ECS 日志发送到 AWS 服务或 AWS Partner

注意

如果具有未列出的自定义驱动程序,您可以复制 GitHub 上提供的 Amazon ECS 容器代理项目,并对其进行自定义以与该驱动程序一起使用。我们鼓励您针对要包含的更改提交拉取请求。但是,当前不支持运行此软件的修改后副本。

此参数要求容器实例上的 Docker Remote API 版本为 1.18 或更高版本。

options

类型:字符串到字符串映射

必需:否

要发送到日志驱动程序的配置选项的键/值映射。

您可以指定的选项取决于日志驱动程序。使用 awslogs 路由器将日志路由到 Amazon CloudWatch 时可以指定的一些选项包括:

awslogs-create-group

必需:否

指定您是否希望自动创建日志组。如果未指定此选项,则默认为 false

注意

您的 IAM policy 必须包含 logs:CreateLogGroup 权限,然后才能尝试使用 awslogs-create-group

awslogs-region

必需:是

指定 awslogs 日志驱动程序要将 Docker 日志发送到的 AWS 区域。您可选择将位于不同区域的集群中的所有日志发送到 CloudWatch Logs 中的单个区域。这是为了使它们都在一个位置可见。否则,您可以按区域对它们进行分隔以获得更高粒度。确保指定的日志组存在于您使用此选项指定的区域中。

awslogs-group

必需:是

确保指定 awslogs 日志驱动程序将其日志流发送到的日志组。

awslogs-stream-prefix

必需:是

利用 awslogs-stream-prefix 选项,可将日志流与指定的前缀、容器名称和容器所属的 Amazon ECS 任务的 ID 关联在一起。如果您使用此选项指定前缀,则日志流将采用以下格式。

prefix-name/container-name/ecs-task-id

如果您未使用此选项指定前缀,则日志流将以 Docker 进程守护程序在容器实例上分配的容器 ID 命名。由于仅使用 Docker 容器 ID(仅在容器实例上可用)很难将日志回溯到发送它们的容器,因此,我们建议您使用此选项指定前缀。

对于 Amazon ECS 服务,您可以使用服务名称作为前缀。这样,您可以将日志流跟踪到容器所属的服务、发送它们的容器的名称以及容器所属的任务的 ID。

您必须为日志指定流前缀,才能在使用 Amazon ECS 控制台时在日志窗格中显示日志。

awslogs-datetime-format

必需:否

此选项以 Python strftime 格式定义多行开始位置模式。日志消息由与模式匹配的行以及与模式不匹配的任何以下行组成。匹配行是日志消息之间的分隔符。

使用此格式的一个使用案例示例是用于解析输出(如堆栈转储),这可能记录在多个条目中。正确模式允许它捕获在单个条目中。

有关更多信息,请参阅 awslogs-datetime-format

您无法同时配置 awslogs-datetime-formatawslogs-multiline-pattern 选项。

注意

多行日志记录对所有日志消息执行正则表达式解析和匹配。这可能会对日志记录性能产生负面影响。

awslogs-multiline-pattern

必需:否

此选项使用正则表达式定义多行开始位置模式。日志消息由与模式匹配的行以及与模式不匹配的任何以下行组成。匹配行是日志消息之间的分隔符。

有关更多信息,请参阅 awslogs-multiline-pattern

如果还配置了awslogs-datetime-format,则会忽略此选项。

您无法同时配置 awslogs-datetime-formatawslogs-multiline-pattern 选项。

注意

多行日志记录对所有日志消息执行正则表达式解析和匹配。这可能会对日志记录性能产生负面影响。

mode

必需:否

有效值:non-blocking | blocking

此选项定义日志消息从容器到 awslogs 日志驱动程序的交付模式。当来自容器的日志流中断时,您选择的交付模式会影响应用程序的可用性。

如果使用 blocking 模式并且流向 CloudWatch 的日志流中断,则来自容器代码写入 stdoutstderr 流的调用将阻塞。因此,应用程序的日志线程将阻塞。这可能会导致应用程序失去响应并导致容器运行状况检查失败。

如果您使用 non-blocking 模式,则容器的日志将存储在配置了 max-buffer-size 选项的内存中中间缓冲区。这样可以防止应用程序在无法将日志发送到 CloudWatch 时失去响应。如果您想确保服务可用性并且可以接受一些日志丢失,建议您使用此模式。有关更多信息,请参阅 Preventing log loss with non-blocking mode in the awslogs container log driver

max-buffer-size

必需:否

默认值:1m

使用 non-blocking 模式时,max-buffer-size 日志选项控制用于中间消息存储的缓冲区的大小。确保根据您的应用程序指定足够的缓冲区大小。当缓冲区已满时,将无法存储更多日志。无法存储的日志会丢失。

要使用 splunk 日志路由器路由日志,需要指定 splunk-tokensplunk-url

当使用 awsfirelens 日志路由器将日志路由到 AWS Partner Network 或 AWS 服务 目的地以进行日志存储和分析时,可以将 log-driver-buffer-limit 选项设置为限制内存中缓冲的事件数量,然后再发送到日志路由器容器。它可以帮助解决潜在的日志丢失问题,因为高吞吐量可能会导致 Docker 内部缓冲区的内存耗尽。有关更多信息,请参阅 配置 Amazon ECS 日志,以实现高吞吐量

使用 awsfirelens 路由日志时可以指定的其他选项取决于目的地。将日志导出到 Amazon Data Firehose 时,可以使用 region 指定 AWS 区域,并使用 delivery_stream 指定日志流的名称。

将日志导出到 Amazon Kinesis Data Streams 时,可以使用 region 指定 AWS 区域,并使用 stream 指定数据流名称。

将日志导出到 Amazon OpenSearch Service 时,可以指定 NameHost(没有协议的 OpenSearch Service 端点)、PortIndexTypeAws_authAws_regionSuppress_Type_Nametls 等选项。

将日志导出到 Amazon S3 时,可以使用 bucket 选项指定存储桶。您还可以指定 regiontotal_file_sizeupload_timeoutuse_put_object 选项。

此参数要求容器实例上的 Docker Remote API 版本为 1.19 或更高版本。

secretOptions

类型:对象数组

必需:否

表示要传递到日志配置的密文的对象。日志配置中使用的密钥可能包括身份验证令牌、证书或加密密钥。有关更多信息,请参阅 将敏感数据传递给 Amazon ECS 容器

name

类型:字符串

必需:是

要在容器上设置为环境变量的值。

valueFrom

类型:字符串

必需:是

要向容器的日志配置公开的密钥。

"logConfiguration": { "logDriver": "splunk", "options": { "splunk-url": "https://cloud.splunk.com:8080", "splunk-token": "...", "tag": "...", ... }, "secretOptions": [{ "name": "splunk-token", "valueFrom": "/ecs/logconfig/splunkcred" }] }
firelensConfiguration

类型:FirelensConfiguration 对象

必需:否

容器的 FireLens 配置。这用于为容器日志指定和配置日志路由器。有关更多信息,请参阅 将 Amazon ECS 日志发送到 AWS 服务或 AWS Partner

{ "firelensConfiguration": { "type": "fluentd", "options": { "KeyName": "" } } }
options

类型:字符串到字符串映射

必需:否

在配置日志路由器时使用的选项的键/值映射。此字段是可选的,可用于指定自定义配置文件或向日志事件添加其他元数据,如任务、任务定义、群集和容器实例详细信息。如果指定,则使用的语法为 "options":{"enable-ecs-log-metadata":"true|false","config-file-type:"s3|file","config-file-value":"arn:aws:s3:::amzn-s3-demo-bucket/fluent.conf|filepath"}。有关更多信息,请参阅 Amazon ECS 任务定义示例:将日志路由到 FireLens

type

类型:字符串

必需:是

要使用的日志路由器。有效值为 fluentdfluentbit

资源要求

resourceRequirements

类型:ResourceRequirement 对象数组

必需:否

要分配给容器的资源的类型和数量。目前唯一支持的资源为 GPU。

type

类型:字符串

必需:是

要分配给容器的资源类型。支持的值为 GPU

value

类型:字符串

必需:是

指定的资源类型的值。

如果使用 GPU 类型,则该值是 Amazon ECS 容器代理将为容器保留的物理 GPUs 数量。为某个任务中的所有容器预留的 GPU 的数量不能超过该任务在其上启动的容器实例的可用 GPU 的数量。

GPU 不适用于在 Fargate 上运行的任务。

容器超时

startTimeout

类型:整数

必需:否

示例值:120

在放弃解析容器的依赖项之前要等待的持续时间(以秒为单位)。

例如,在任务定义中指定两个容器,containerA 需要依赖 containerB 达到 COMPLETESUCCESSHEALTHY 状态。如果为 containerB 指定了一个 startTimeout 值并且它未在该时间内达到所需状态,则 containerA 将不会启动。

注意

如果容器不满足依赖性约束或在满足约束之前超时,Amazon ECS 不会将依赖性容器推进到其下一个状态。

最大值为 600 秒(10 分钟)。

stopTimeout

类型:整数

必需:否

示例值:120

容器由于未自行正常退出而被强制终止前要等待的持续时间(以秒为单位)。

如果未指定该参数,则使用默认值 30 秒。最大值为 86400 秒(24 小时)。

容器依赖项

dependsOn

类型:ContainerDependency 对象的数组

必需:否

针对容器启动和关闭定义的依赖项。一个容器可以包含多个依赖项。当针对容器启动定义依赖项时,对于容器关闭,将反转此项。有关示例,请参阅容器依赖项

注意

如果容器不满足依赖性约束或在满足约束之前超时,Amazon ECS 不会将依赖性容器推进到其下一个状态。

此参数需要任务或服务使用平台版本 1.3.0 或更高版本(Linux)或 1.0.0(Windows)。

"dependsOn": [ { "containerName": "string", "condition": "string" } ]
containerName

类型:字符串

必需:是

必须符合指定条件的容器名称。

condition

类型:字符串

必需:是

容器的依赖项条件。以下是可用的条件及其行为:

  • START - 此条件将立即模拟链接和卷的行为。此条件将验证从属容器是否是在允许其他容器启动前启动的。

  • COMPLETE - 此条件将验证从属容器是否在允许其他容器启动前运行完成(退出)。这对于运行脚本然后退出的非主要容器非常有用。无法在基本容器上设置此条件。

  • SUCCESS - 此条件与 COMPLETE 相同,但它还要求容器退出并具有 zero 状态。无法在基本容器上设置此条件。

  • HEALTHY - 此条件将验证从属容器是否在允许其他容器启动前传递其容器运行状况检查。这要求从属容器已在任务定义中配置运行状况检查。仅在任务启动时确认此条件。

系统控制

systemControls

类型:SystemControl 对象

必需:否

要在容器中设置的命名空间内核参数的列表。此参数对应于 docker create-container 命令中的 Sysctls 和 docker run 命令的 --sysctl 选项。例如,您可以配置 net.ipv4.tcp_keepalive_time 设置以保持更长期的连接。

不建议在使用了 awsvpchost 网络模式的单个任务中为多个容器指定与网络相关的 systemControls 参数。执行此操作具有以下缺点:

  • 如果为任何容器设置了 systemControls,则它将应用于该任务中的所有容器。如果您为单个任务中的多个容器设置了不同的 systemControls,最后启动的容器将确定哪个 systemControls 生效。

如果您要设置 IPC 资源命名空间以用于任务中的容器,则以下条件将适用于您的系统控制。有关更多信息,请参阅 IPC 模式

  • 对于使用 host IPC 模式的任务,不支持 IPC 命名空间 systemControls

  • 对于使用 task IPC 模式的任务,IPC 命名空间 systemControls 值适用于任务中的所有容器。

"systemControls": [ { "namespace":"string", "value":"string" } ]
namespace

类型:字符串

必需:否

要为其设置 value 的命名空间内核参数。

有效的 IPC 命名空间值:"kernel.msgmax" | "kernel.msgmnb" | "kernel.msgmni" | "kernel.sem" | "kernel.shmall" | "kernel.shmmax" | "kernel.shmmni" | "kernel.shm_rmid_forced",以及开头为 "fs.mqueue.*"Sysctls

有效的网络命名空间值:以 "net.*" 开头的 Sysctls。在 Fargate 上,只接受容器中存在的命名空间 Sysctls

Fargate 支持所有此类值。

value

类型:字符串

必需:否

namespace 中指定的命名空间内核参数的值。

交互式

interactive

类型:布尔值

必需:否

当此参数为 true 时,您可以部署需要分配 stdintty 的容器化应用程序。此参数对应于 docker create-container 命令中的 OpenStdin 和 docker run 命令的 --interactive 选项。

默认值为 false

伪终端

pseudoTerminal

类型:布尔值

必需:否

当此参数为 true 时,则分配 TTY。此参数对应于 docker create-container 命令中的 Tty 和 docker run 命令的 --tty 选项。

默认值为 false

Linux 参数

linuxParameters

类型:LinuxParameters 对象

必需:否

应用到容器的特定于 Linux 的修改,例如 Linux 内核功能。

capabilities

类型:KernelCapabilities 对象

必需:否

容器的 Linux 功能,这些功能已在 Docker 提供的默认配置中添加或删除。

devices

类型:设备对象数组

必需:否

对容器公开的任何主机设备。此参数对应于 docker create-container 命令中的 Devices 和 docker run 命令的 --device 选项。

initProcessEnabled

类型:布尔值

必需:否

在容器内运行 init 进程,转发信号和获得进程。此参数对应于 docker run 命令的 --init 选项。

maxSwap
注意

Amazon ECS 托管实例上运行的任务不支持此参数。

类型:整数

必需:否

容器可以使用的交换内存总量(以 MiB 为单位)。此参数会转换为 docker run 命令的 --memory-swap 选项,值为容器内存与 maxSwap 值之和。

swappiness
注意

Amazon ECS 托管实例上运行的任务不支持此参数。

类型:整数

必需:否

使用此参数,您可以调整容器的内存 swappiness 行为。除非绝对必要,否则 swappiness 值为 0 将导致交换不会发生。swappiness 值为 100 将导致页面被非常积极地交换。有效值为 0100 之间的整数。如果未指定swappiness参数,则使用默认值60。如果未指定maxSwap的值,则此参数将被忽略。此参数对应于 docker run 命令的 --memory-swappiness 选项。

sharedMemorySize
注意

Amazon ECS 托管实例上运行的任务不支持此参数。

类型:整数

必需:否

/dev/shm卷的大小 (以 MiB 为单位)。此参数对应于 docker run 命令的 --shm-size 选项。

tmpfs
注意

Amazon ECS 托管实例上运行的任务不支持此参数。

类型:Tmpfs 对象数组

必需:否

tmpfs 挂载的容器路径、挂载选项和大小 (以 MiB 为单位)。此参数对应于 docker run 命令的 --tmpfs 选项。