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 任务,有效值是
awsvpc和host。如果未指定网络模式,则默认网络模式为awsvpc。如果网络模式为
host,则任务会绕过网络隔离,并且容器直接使用主机的网络堆栈。重要
运行使用
host网络模式的任务时,请勿使用根用户(UID 0)运行容器,以获得更好的安全性。作为安全最佳实践,请始终使用非根用户。如果网络模式为
awsvpc,则将为任务分配弹性网络接口,且在创建服务或运行具有任务定义的任务时必须指定NetworkConfiguration。有关更多信息,请参阅 Amazon ECS 托管实例的 Amazon ECS 任务联网。host和awsvpc网络模式可为容器提供最高联网性能,因为容器使用 Amazon EC2 网络堆栈。使用host和awsvpc网络模式,公开的容器端口将直接映射到相应的主机端口(用于host网络模式)或附加的弹性网络接口端口(用于awsvpc网络模式)。因此,您不能使用动态主机端口映射。
运行时平台
operatingSystemFamily-
类型:字符串
必需:否
原定设置:LINUX
当您注册任务定义时,您可以指定操作系统系列。
此字段的有效值是
LINUX。服务中使用的所有任务定义对于此参数都必须具有相同的值。
当任务定义是服务的一部分时,此值必须与服务
platformFamily值匹配。 cpuArchitecture-
类型:字符串
必需:有条件
当您注册任务定义时,您可以指定 CPU 架构。有效值为
X86_64和ARM64。如果不指定值,Amazon ECS 会根据容量提供程序配置尝试将任务放置在可用的 CPU 架构上。要确保任务放置在特定 CPU 架构上,请在任务定义中指定
cpuArchitecture的值。服务中使用的所有任务定义对于此参数都必须具有相同的值。
有关
ARM64的更多信息,请参阅适用于 64 位 ARM 工作负载的 Amazon ECS 任务定义。
任务大小
注册任务定义时,您可以指定用于任务的总 CPU 和内存量。这独立于容器定义级别的 cpu 和 memory 值。对于 Amazon EC2 实例上托管的任务,这些字段是可选的。
注意
Windows 容器将忽略任务级 CPU 和内存参数。我们建议为 Windows 容器指定容器级资源。
cpu-
类型:字符串
必需:有条件
要为任务提供的 CPU 单位的硬限制。您可以通过 CPU 单位数或虚拟 CPU(vCPU)数字符串的方式在 JSON 文件中将 CPU 值。例如,您可以使用
1024(CPU 单位数)或1 vCPU(vCPU 数)来指定 CPU 值。注册任务定义时,vCPU 值将转换为指示 CPU 单元的整数。该字段是可选的。如果您的集群没有任何带可用的已请求 CPU 单位的已注册容器实例,则该任务将失败。支持的值介于
0.125vCPU 和10vCPU 之间。
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 资源命名空间。有效值为
host、task或none。如果指定了host,则在同一容器实例上指定了hostIPC 模式的任务中的所有容器将与主机 Amazon EC2 实例共享相同的 IPC 资源。如果指定了task,则指定任务中的所有容器将共享相同的 IPC 资源。如果指定了none,则任务的容器中的 IPC 资源是私有的,不与任务中或容器实例上的其他容器共享。如果未指定任何值,则 IPC 资源命名空间共享取决于容器运行时配置。
PID 模式
pidMode-
类型:字符串
必需:否
用于任务中的容器的过程命名空间。有效值为
host或task。如果指定了host,则在同一容器实例上指定了hostPID 模式的任务中的所有容器将与主机 Amazon EC2 实例共享相同的进程命名空间。如果指定了task,则指定任务中的所有容器将共享相同的进程命名空间。如果未指定任何值,则默认值为私有命名空间。如果使用了
hostPID 模式,发生非预期的过程命名空间公开的风险会提高。
代理配置
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 支持
distinctInstace和memberOf放置约束。使用memberOf放置约束的任务支持下面的属性:-
ecs.subnet-id -
ecs.availability-zone -
ecs.cpu-architecture -
ecs.instance-type
有关放置约束的更多信息,请参阅定义 Amazon ECS 将哪些容器实例用于任务。
-
卷
注册任务定义时,您可以选择性地为任务指定卷列表。这样,您便可以在任务中使用数据卷。
有关卷类型和其他参数的更多信息,请参阅Amazon ECS 任务的存储选项。
name-
类型:字符串
必需:是
卷的名称。最多能包含 255 个字母(大写和小写字母)、数字和下划线。此名称已在容器定义
sourceVolume的mountPoints参数中引用。 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:tag指定其他存储库。允许最多 255 个字母(大写和小写字母)、数字、连字符、下划线、冒号、句点、正斜杠和井号。此参数对应于 docker create-container 命令中的repository-url/image@digestImage和 docker run 命令的IMAGE参数。-
在新任务启动时,Amazon ECS 容器代理会提取最新版本的指定映像和标签以供容器使用。但是,存储库映像的后续更新不会传播到已在运行的任务。
-
如果未在任务定义的映像路径中指定某个标签或摘要,则 Amazon ECS 容器代理会使用
latest标签来拉取指定的映像。 -
存储库映像的后续更新不会传播到已在运行的任务。
-
支持私有注册表中的映像。有关更多信息,请参阅 在 Amazon ECS 中使用非 AWS 容器映像。
-
Amazon ECR 存储库中的映像可通过使用完整的
registry/repository:tag或registry/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 上的官方存储库中的映像使用一个名称(例如,
ubuntu或mongo)。 -
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选项。如果未指定任务级内存值,则必须为容器定义中的一个或两个
memory或memoryReservation指定非零整数。如果指定两者,则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网络模式的任务定义,只能指定containerPort。hostPort始终被忽略,并且容器端口会自动映射到主机上的随机高编号端口。此参数的大部分字段(包括
containerPort、hostPort、protocol)对应于 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-definitionAPI 设置此参数。该选项在portMappings参数中可用。有关更多信息,请参阅《AWS Command Line Interface 参考》中的 register-task-definition。当您指定
containerPortRange时,以下规则适用:-
您必须使用
awsvpc网络模式。 -
容器实例必须拥有不低于 1.67.0 版本的容器代理和不低于 1.67.0-1 版本的
ecs-init程序包。 -
每个容器最多可指定 100 个端口范围。
-
您不用指定
hostPortRange。hostPortRange的值设置如下:-
对于使用
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 端口2375和2376以及 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-
类型:字符串
必需:否
用于端口映射的协议。有效值为
tcp和udp。默认值为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与任务定义中指定的InferenceAccelerator的deviceName匹配。有关更多信息,请参阅 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 links-
注意
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 容器代理可以与它们进行通信。
支持的日志驱动程序为
awslogs、splunk和awsfirelens。有关在任务定义中如何使用
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-format和awslogs-multiline-pattern选项。注意
多行日志记录对所有日志消息执行正则表达式解析和匹配。这可能会对日志记录性能产生负面影响。
awslogs-multiline-pattern-
必需:否
此选项使用正则表达式定义多行开始位置模式。日志消息由与模式匹配的行以及与模式不匹配的任何以下行组成。匹配行是日志消息之间的分隔符。
有关更多信息,请参阅 awslogs-multiline-pattern
。 如果还配置了
awslogs-datetime-format,则会忽略此选项。您无法同时配置
awslogs-datetime-format和awslogs-multiline-pattern选项。注意
多行日志记录对所有日志消息执行正则表达式解析和匹配。这可能会对日志记录性能产生负面影响。
mode-
必需:否
有效值:
non-blocking|blocking此选项定义日志消息从容器到
awslogs日志驱动程序的交付模式。当来自容器的日志流中断时,您选择的交付模式会影响应用程序的可用性。如果使用
blocking模式并且流向 CloudWatch 的日志流中断,则来自容器代码写入stdout和stderr流的调用将阻塞。因此,应用程序的日志线程将阻塞。这可能会导致应用程序失去响应并导致容器运行状况检查失败。如果您使用
non-blocking模式,则容器的日志将存储在配置了max-buffer-size选项的内存中中间缓冲区。这样可以防止应用程序在无法将日志发送到 CloudWatch 时失去响应。如果您想确保服务可用性并且可以接受一些日志丢失,建议您使用此模式。有关更多信息,请参阅 Preventing log loss with non-blocking mode in theawslogscontainer log driver。 max-buffer-size-
必需:否
默认值:
1m使用
non-blocking模式时,max-buffer-size日志选项控制用于中间消息存储的缓冲区的大小。确保根据您的应用程序指定足够的缓冲区大小。当缓冲区已满时,将无法存储更多日志。无法存储的日志会丢失。
要使用
splunk日志路由器路由日志,需要指定splunk-token和splunk-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 时,可以指定
Name、Host(没有协议的 OpenSearch Service 端点)、Port、Index、Type、Aws_auth、Aws_region、Suppress_Type_Name和tls等选项。将日志导出到 Amazon S3 时,可以使用
bucket选项指定存储桶。您还可以指定region、total_file_size、upload_timeout和use_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:::。有关更多信息,请参阅 Amazon ECS 任务定义示例:将日志路由到 FireLens。amzn-s3-demo-bucket/fluent.conf|filepath"} type-
类型:字符串
必需:是
要使用的日志路由器。有效值为
fluentd或fluentbit。
资源要求
resourceRequirements-
类型:ResourceRequirement 对象数组
必需:否
要分配给容器的资源的类型和数量。目前唯一支持的资源为 GPU。
type-
类型:字符串
必需:是
要分配给容器的资源类型。支持的值为
GPU。 value-
类型:字符串
必需:是
指定的资源类型的值。
如果使用
GPU类型,则该值是 Amazon ECS 容器代理将为容器保留的物理GPUs数量。为某个任务中的所有容器预留的 GPU 的数量不能超过该任务在其上启动的容器实例的可用 GPU 的数量。GPU 不适用于在 Fargate 上运行的任务。
容器超时
startTimeout-
类型:整数
必需:否
示例值:
120在放弃解析容器的依赖项之前要等待的持续时间(以秒为单位)。
例如,在任务定义中指定两个容器,
containerA需要依赖containerB达到COMPLETE、SUCCESS或HEALTHY状态。如果为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设置以保持更长期的连接。不建议在使用了
awsvpc或host网络模式的单个任务中为多个容器指定与网络相关的systemControls参数。执行此操作具有以下缺点:-
如果为任何容器设置了
systemControls,则它将应用于该任务中的所有容器。如果您为单个任务中的多个容器设置了不同的systemControls,最后启动的容器将确定哪个systemControls生效。
如果您要设置 IPC 资源命名空间以用于任务中的容器,则以下条件将适用于您的系统控制。有关更多信息,请参阅 IPC 模式。
-
对于使用
hostIPC 模式的任务,不支持 IPC 命名空间systemControls。 -
对于使用
taskIPC 模式的任务,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时,您可以部署需要分配stdin或tty的容器化应用程序。此参数对应于 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将导致页面被非常积极地交换。有效值为0到100之间的整数。如果未指定swappiness参数,则使用默认值60。如果未指定maxSwap的值,则此参数将被忽略。此参数对应于 docker run 命令的--memory-swappiness选项。 -
注意
Amazon ECS 托管实例上运行的任务不支持此参数。
类型:整数
必需:否
/dev/shm卷的大小 (以 MiB 为单位)。此参数对应于 docker run 命令的--shm-size选项。 tmpfs-
注意
Amazon ECS 托管实例上运行的任务不支持此参数。
类型:Tmpfs 对象数组
必需:否
tmpfs 挂载的容器路径、挂载选项和大小 (以 MiB 为单位)。此参数对应于 docker run 命令的
--tmpfs选项。