Amazon ECS 容器代理配置 - Amazon Elastic Container Service

Amazon ECS 容器代理配置

Amazon ECS 容器代理支持很多部署选项,其中大多数选项应通过环境变量来设置。提供了以下环境变量,并且它们都是可选的。

如果容器实例是使用经 Amazon ECS 优化的 AMI 的 Linux 变体启动的,则可以在 /etc/ecs/ecs.config 文件中设置这些环境变量,然后重新启动代理。您还可以在启动时将这些配置变量写入到具有 Amazon EC2 用户数据的容器实例。有关更多信息,请参阅使用 Amazon EC2 用户数据引导启动容器实例

如果容器实例是使用经 Amazon ECS 优化的 AMI 的 Windows 变体启动的,则可以使用 PowerShell SetEnvironmentVariable 命令设置这些环境变量,然后重新启动代理。有关更多信息,请参阅适用于 Windows 实例的 Amazon EC2 用户指南使用 Amazon EC2 用户数据引导 Windows 容器实例中的启动时在 Windows 实例上运行命令

如果要手动启动 Amazon EC2 容器代理(对于没有经 Amazon ECS 优化的 AMI),则可以在用于启动代理的 docker run 命令中使用这些环境变量。将这些变量与语法 --env=VARIABLE_NAME=VARIABLE_VALUE 结合使用。对于敏感信息 (如私有存储库的身份验证凭证),您应该将代理环境变量存储在一个文件中并利用 --env-file path_to_env_file 选项一次性将它们传递完。

可用参数

以下是可用的 Amazon ECS 容器代理配置参数。代理在内部使用的未记载的变量可能是可见的,但不适合客户使用。有关更多信息,请参阅 GitHub 上的 Amazon ECS 容器代理

ECS_CLUSTER

示例值:MyCluster

Linux 上的原定设置值:default

Windows 上的原定设置值:default

此代理应签入的集群。如果此值未定义,则假定使用 default 集群。如果 default 群集不存在,Amazon ECS 容器代理会尝试创建它。如果指定了非 default 集群,但该集群不存在,则注册将失败。

ECS_RESERVED_PORTS

示例值:[22, 80, 5000, 8080]

Linux 上的原定设置值:[22, 2375, 2376, 51678, 51679, 51680]

Windows 上的原定设置值:[53, 135, 139, 445, 2375, 2376, 3389, 5985, 51678, 51679]

应标记为不可用于在此容器实例上的计划的一组端口。

ECS_RESERVED_PORTS_UDP

示例值:[53, 123]

Linux 上的原定设置值:[]

Windows 上的原定设置值:[]

应标记为不可用于在此容器实例上的计划的一组 UDP 端口。

ECS_ENGINE_AUTH_TYPE

示例值:dockercfg | docker

Linux 上的原定设置值:Null

Windows 上的原定设置值:Null

对于私有注册表身份验证是必需的。这是 ECS_ENGINE_AUTH_DATA 中的身份验证数据的类型。有关更多信息,请参阅身份验证格式

ECS_ENGINE_AUTH_DATA

示例值:

  • ECS_ENGINE_AUTH_TYPE=dockercfg: {"https://index.docker.io/v1/":{"auth":"zq212MzEXAMPLE7o6T25Dk0i","email":"email@example.com"}}

  • ECS_ENGINE_AUTH_TYPE=docker: {"https://index.docker.io/v1/":{"username":"my_name","password":"my_password","email":"email@example.com"}}

Linux 上的原定设置值:Null

Windows 上的原定设置值:Null

对于私有注册表身份验证是必需的。如果 ECS_ENGINE_AUTH_TYPE=dockercfg,则 ECS_ENGINE_AUTH_DATA 值应该是通过运行 docker login 创建的 Docker 配置文件(~/.dockercfg~/.docker/config.json)的内容。如果 ECS_ENGINE_AUTH_TYPE=docker,则 ECS_ENGINE_AUTH_DATA 值应该是身份验证所针对的注册表服务器的 JSON 表示形式,以及注册表所需的身份验证参数(如该账户的用户名、密码和电子邮件地址)。有关更多信息,请参阅身份验证格式

AWS_DEFAULT_REGION

示例值:us-east-1

Linux 上的原定设置值:从 Amazon EC2 实例元数据中获取。

Windows 上的原定设置值:从 Amazon EC2 实例元数据中获取。

要在 API 请求中使用以及用于推断正确的后端主机的区域。

AWS_ACCESS_KEY_ID

示例值:AKIAIOSFODNN7EXAMPLE

Linux 上的原定设置值:从 Amazon EC2 实例元数据中获取。

Windows 上的原定设置值:从 Amazon EC2 实例元数据中获取。

由代理用于所有调用的访问密钥

AWS_SECRET_ACCESS_KEY

示例值:wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

Linux 上的原定设置值:从 Amazon EC2 实例元数据中获取。

Windows 上的原定设置值:从 Amazon EC2 实例元数据中获取。

由代理用于所有调用的私有密钥

AWS_SESSION_TOKEN

Linux 上的原定设置值:从 Amazon EC2 实例元数据中获取。

Windows 上的原定设置值:从 Amazon EC2 实例元数据中获取。

用于临时凭证的会话令牌

DOCKER_HOST

示例值:unix:///var/run/docker.sock

Linux 上的原定设置值:unix:///var/run/docker.sock

Windows 上的原定设置值:npipe:////./pipe/docker_engine

用于创建与 Docker 守护程序的连接;行为方式与 Docker 客户端使用的环境变量相似。

ECS_LOGFILE

示例值:/ecs-agent.log

Linux 上的原定设置值:Null

Windows 上的原定设置值:Null

代理日志应写入的位置。如果您通过 ecs-init 运行代理(这是使用经 Amazon ECS 优化的 AMI 时的原定设置方法),则容器内路径将为 /log,并且 ecs-init 会将其挂载到主机上的 /var/log/ecs/

ECS_LOGLEVEL

示例值:criterrorwarninfodebug

Linux 上的原定设置值:info

Windows 上的原定设置值:info

要记录的详细级别。

ECS_LOGLEVEL_ON_INSTANCE

示例值:nonecriterrorwarninfodebug

Linux 上的原定设置值:none,如果 ECS_LOG_DRIVER 显式设置为非空值;否则,和 ECS_LOGLEVEL 相同

Windows 上的原定设置值:none,如果 ECS_LOG_DRIVER 显式设置为非空值;否则,与 ECS_LOGLEVEL 相同

可用于覆盖 ECS_LOGLEVEL 并设置应记录在实例日志文件中的详细级别,与日志记录驱动程序中记录的级别分开。如果显式设置了日志记录驱动程序,则预设情况下会关闭实例日志,但可以使用此变量重新打开实例日志。

ECS_LOG_DRIVER

示例值:awslogsfluentdgelfjson-filejournaldlogentriessyslogsplunk

Linux 上的原定设置值:json-file

Windows 上的默认值:不适用

确定代理容器要使用的日志记录驱动程序。

ECS_CHECKPOINT

示例值:true | false

Linux 上的默认值:如果 ECS_DATADIR 显式设置为非空值,则 ECS_CHECKPOINT 将设置为 true;否则,它将设置为 false

Windows 上的默认值:如果 ECS_DATADIR 显式设置为非空值,则 ECS_CHECKPOINT 将设置为 true;否则,它将设置为 false

是否要将检查点状态保存到 ECS_DATADIR 指定的位置。

ECS_DATADIR

示例值:/data

Linux 上的原定设置值:/data/

Windows 上的原定设置值:C:\ProgramData\Amazon\ECS\data

正在运行 Amazon ECS 容器代理的容器上的永久数据目录的名称。该目录用于保存有关集群和代理状态的信息。

ECS_UPDATES_ENABLED

示例值:true | false

Linux 上的原定设置值:false

Windows 上的原定设置值:false

在请求 Amazon ECS 代理更新时是否退出以进行更新。

ECS_DISABLE_METRICS

示例值:true | false

Linux 上的原定设置值:false

Windows 上的原定设置值:true

是否对 Amazon ECS 禁用 CloudWatch 指标。如果此值设置为 true,则不会收集 CloudWatch 指标。

ECS_POLL_METRICS

示例值:true | false

Linux 上的默认值:false(请参阅以下说明)

Windows 上的默认值:false(请参阅以下说明)

是否在收集任务的 CloudWatch 指标时进行轮询或流式传输。

1.40.0 之前的代理版本中,原定设置值为 false。在代理版本中1.40.01.42.0 中,原定设置值为 true。在代理版本中 1.43.0 和更高版本中,原定设置值为 false

重要

若将 ECS_POLL_METRICS 设置为 false,则在 Amazon EC2 实例托管多个容器时,将导致代理、dockerd 和 containerd 的 CPU 利用率居高不下。

ECS_POLLING_METRICS_WAIT_DURATION

示例值:30s

Linux 上的原定设置值:15s

Windows 上的原定设置值:15s

等待轮询任务的新 CloudWatch 指标的时间。仅在 ECS_POLL_METRICStrue 时使用。

ECS_RESERVED_MEMORY

示例值:32

Linux 上的默认值:0

Windows 上的默认值:0

报告至 Amazon ECS 的实例内存容量的减少(以 MiB 为单位)。当在容器实例上放置任务时,Amazon ECS 使用此项参数。这不会在实例上预留内存使用量。有关更多信息,请参阅容器实例内存管理

ECS_AVAILABLE_LOGGING_DRIVERS

示例值:["awslogs","fluentd","gelf","json-file","journald","splunk","logentries","syslog"]

Linux 上的原定设置值:["json-file","none"]

Windows 上的原定设置值:["json-file","none"]

注意

如果您使用的是 ECS init,默认值为 ["json-file","syslog","awslogs","none"]

容器实例上可用的日志记录驱动程序。在容器实例上运行的 Amazon ECS 容器代理必须先将该实例上可用的日志记录驱动程序注册到 ECS_AVAILABLE_LOGGING_DRIVERS 环境变量,然后放置在该实例上的容器才能在任务中使用这些驱动程序的日志配置选项。有关如何使用 awslogs 日志驱动程序的信息,请参阅使用 awslogs 日志驱动程序。有关可用于 Docker 版本的不同日志驱动程序的更多信息,请参阅 Docker 文档中的配置日志记录驱动程序

ECS_DISABLE_PRIVILEGED

示例值:true | false

Linux 上的原定设置值:false

Windows 上的原定设置值:false

是否在容器实例上关闭启动特权容器。如果此值设置为 true,则不允许使用特权容器。

ECS_SELINUX_CAPABLE

示例值:true | false

Linux 上的原定设置值:false

Windows 上的原定设置值:false

SELinux 是否在容器实例上可用。

ECS_APPARMOR_CAPABLE

示例值:true | false

Linux 上的原定设置值:false

Windows 上的原定设置值:false

AppArmor 是否在容器实例上可用。

ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION

示例值:1h (有效时间单位为“ns”、“us”(或“µs”)、“ms”、“s”、“m”和“h”。)

Linux 上的原定设置值:3h

Windows 上的原定设置值:3h

从任务停止到删除 Docker 容器所等待的时间。由于这将删除 Docker 容器数据,因此请注意,如果此值设置得过低,您可能无法检查已停止的容器或无法在日志删除前查看它们。最短持续时间为 1s;任何短于 1 秒的值都会被忽略。

ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION_JITTER

示例值:1h (有效时间单位为“ns”、“us”(或“µs”)、“ms”、“s”、“m”和“h”。)

Linux 上的默认值:空

Windows 上的原定设置值:3h

等待任务引擎清理的抖动时间。指定后,每个任务的实际清理等待时间将是 ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION 中指定的持续时间加上介于 0 和抖动持续时间之间的随机持续时间。

ECS_CONTAINER_STOP_TIMEOUT

示例值:10m (有效时间单位为“ns”、“us”(或“µs”)、“ms”、“s”、“m”和“h”。)

Linux 上的原定设置值:30s

Windows 上的原定设置值:30s

从任务停止到其容器由于未自行正常退出而被强制停止所等待的时间。

ECS_CONTAINER_START_TIMEOUT

示例值:10m (有效时间单位为“ns”、“us”(或“µs”)、“ms”、“s”、“m”和“h”。)

Linux 上的原定设置值:3m

Windows 上的原定设置值:8m

在放弃启动容器之前等待的时间。

ECS_CONTAINER_CREATE_TIMEOUT

示例值:10m (有效时间单位为“ns”、“us”(或“µs”)、“ms”、“s”、“m”和“h”。)

Linux 上的原定设置值:4m

Windows 上的原定设置值:4m

在放弃创建容器之前等待的时间。

HTTP_PROXY

示例值:10.0.0.131:3128

Linux 上的原定设置值:Null

Windows 上的原定设置值:Null

供 Amazon ECS 代理用来连接到互联网的某个 HTTP 代理的主机名(或 IP 地址)和端口号。例如,如果您的容器实例无法通过 Amazon VPC 互联网网关或 NAT 网关或实例来访问外部网络,则将使用此代理。如果设置了此变量,您还必须设置 NO_PROXY 变量以筛选来自该代理的 Amazon EC2 实例元数据和 Docker 守护程序流量。有关更多信息,请参阅HTTP 代理配置

NO_PROXY

示例值:

  • Linux:169.254.169.254,169.254.170.2,/var/run/docker.sock

  • Windows: 169.254.169.254,169.254.170.2,\\.\pipe\docker_engine

Linux 上的原定设置值:Null

Windows 上的原定设置值:Null

不应转发到指定的 HTTP_PROXY 的 HTTP 流量。您必须指定 169.254.169.254,/var/run/docker.sock 以筛选来自该代理的 Amazon EC2 实例元数据和 Docker 守护程序流量。有关更多信息,请参阅HTTP 代理配置

ECS_ENABLE_TASK_IAM_ROLE

示例值:true | false

Linux 上的原定设置值:false

Windows 上的原定设置值:false

注意

如果您使用的是 ecs init,原定设置值为 true

是否应在具有 bridgedefault 网络模式的任务容器的容器实例上启用任务的 IAM 角色。有关更多信息,请参阅任务 IAM 角色

ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST

示例值:true | false

Linux 上的原定设置值:false

Windows 上的原定设置值:false

注意

如果您使用的是 ecs init,原定设置值为 true

是否应在具有 host 网络模式的任务容器的容器实例上启用任务的 IAM 角色。此变量仅在代理版本 1.12.0 和更高版本上受支持。有关更多信息,请参阅任务 IAM 角色

ECS_DISABLE_IMAGE_CLEANUP

示例值:true

Linux 上的原定设置值:false

Windows 上的原定设置值:false

是否为 Amazon ECS 代理禁用自动化映像清除。有关更多信息,请参阅自动化任务和映像清除

ECS_IMAGE_CLEANUP_INTERVAL

示例值:30m

Linux 上的原定设置值:30m

Windows 上的原定设置值:30m

自动化映像清除周期之间的时间间隔。如果设置为短于 10 分钟,该值将被忽略。

ECS_IMAGE_MINIMUM_CLEANUP_AGE

示例值:30m

Linux 上的原定设置值:1h

Windows 上的原定设置值:1h

拉取映像与可考虑将其进行自动化映像清除之间的最短时间间隔。

NON_ECS_IMAGE_MINIMUM_CLEANUP_AGE

示例值:30m

Linux 上的原定设置值:1h

Windows 上的原定设置值:1h

创建非 Amazon ECS 映像与可考虑将其进行自动化映像清除之间的最短时间间隔。

ECS_NUM_IMAGES_DELETE_PER_CYCLE

示例值:5

Linux 上的原定设置值:5

Windows 上的原定设置值:5

要在单次自动化映像清除周期中删除的映像的最大数量。如果设置为小于 1,该值将被忽略。

ECS_IMAGE_PULL_BEHAVIOR

示例值:default | always | once | prefer-cached

Linux 上的原定设置值:default

Windows 上的原定设置值:default

用于为您的容器实例自定义拉取映像流程的行为。下面介绍了可选行为:

  • 如果指定 default,则远程拉取映像。如果映像拉取失败,容器将在实例上使用缓存的映像。

  • 如果指定 always,则始终远程拉取映像。如果映像拉取失败,任务将失败。此选项可确保始终拉取映像的最新版本。所有缓存映像均被忽略,并受自动映像清除过程支配。

  • 如果指定 once,仅当同一容器实例上之前的任务尚未拉取映像或缓存映像已被自动映像清除过程删除时远程拉取映像。否则,将使用实例上缓存的映像。这样可确保不会进行不必要的映像拉取尝试。

  • 如果指定 prefer-cached,则在没有缓存映像时远程拉取映像。否则,将使用实例上缓存的映像。为容器禁用自动映像清除,以确保不会删除缓存的映像。

ECS_IMAGE_PULL_INACTIVITY_TIMEOUT

示例值:1m

Linux 上的原定设置值:1m

Windows 上的原定设置值:3m

docker 提取完成后等待提取容器的时间。用于优化大型 Windows 容器。

ECS_INSTANCE_ATTRIBUTES

示例值:{"custom_attribute": "custom_attribute_value"}

Linux 上的原定设置值:Null

Windows 上的原定设置值:Null

要应用于容器实例的自定义属性的列表(JSON 格式)。在实例注册时使用该属性会添加自定义属性,这样可跳过通过 AWS Management Console手动添加自定义属性的方法。

注意

添加的属性将不会应用于已注册的容器实例。要向已注册的容器实例添加自定义属性,请参阅使用经典控制台添加属性

有关可用自定义属性的信息,请参阅属性

此变量的无效 JSON 值导致代理退出,代码为 5。代理日志中会显示一条消息。JSON 值可能有效,但验证属性时检测到问题(例如,值过长或包含无效字符)。在此情况下,仍会进行容器实例注册,但代理会退出,代码为 5,代理日志中也将写入一条消息。有关如何查找代理日志的信息,请参阅Amazon ECS 容器代理日志

ECS_ENABLE_TASK_ENI

示例值:true | false

Linux 上的原定设置值:false

Windows 上的原定设置值:false

是否为要使用其自己的网络接口启动的任务启用任务联网。

ECS_ENABLE_HIGH_DENSITY_ENI

示例值:true | false

Linux 上的原定设置值:false

Windows 上的默认值:不适用

在使用任务联网时是否启用高密度。

ECS_CNI_PLUGINS_PATH

示例值:/ecs/cni

Linux 上的原定设置值:/amazon-ecs-cni-plugins

Windows 上的默认值:不适用

cni 二进制文件所在的路径在 Linux 上。

ECS_AWSVPC_BLOCK_IMDS

示例值:true | false

Linux 上的原定设置值:false

Windows 上的原定设置值:false

是否阻止使用 网络模式启动的任务对实例元数据awsvpc的访问。

ECS_AWSVPC_ADDITIONAL_LOCAL_ROUTES

示例值:["10.0.15.0/24"]

Linux 上的原定设置值:[]

Windows 上的原定设置值:[]

awsvpc 网络模式中,将通过主桥而不是任务弹性网络接口路由至这些前缀的流量。

ECS_ENABLE_CONTAINER_METADATA

示例值:true | false

Linux 上的原定设置值:false

Windows 上的原定设置值:false

当为 true 时,代理会创建一个文件,用于描述容器的元数据。此文件可以通过使用容器环境变量 $ECS_CONTAINER_METADATA_FILE 来定位和使用。

ECS_FSX_WINDOWS_FILE_SERVER_SUPPORTED

示例值:true | false

Linux 上的原定设置值:false

Windows 上的原定设置值:true

容器实例是否支持 FSx for Windows File Server 卷类型。此变量仅在代理版本 1.47.0 和更高版本上受支持。

ECS_HOST_DATA_DIR

示例值:/var/lib/ecs

Linux 上的原定设置值:/var/lib/ecs

Windows 上的默认值:不适用

安装 ECS_DATADIR 的主机上的源目录。在 Amazon ECS 代理作为容器运行的情况下,我们使用它来确定容器元数据文件的源挂载路径。我们不在 Windows 中使用此值,因为 Amazon ECS 代理并不作为容器运行。

ECS_ENABLE_RUNTIME_STATS

示例值:true | false

Linux 上的原定设置值:false

Windows 上的原定设置值:false

确定是否为代理启用了 pprof。如果已启用,则可以通过代理的自检端口(例如 curl http://localhost:51678/debug/pprof/heap > heap.pprof)访问不同的配置文件。此外,代理的运行时统计信息会记录到 /var/log/ecs/runtime-stats.log 文件中。

ECS_ENABLE_TASK_CPU_MEM_LIMIT

示例值:true | false

Linux 上的原定设置值:true

Windows 上的原定设置值:false

是否启用任务级 CPU 和内存限制。

ECS_CGROUP_PATH

示例值:/sys/fs/cgroup

Linux 上的原定设置值:/sys/fs/cgroup

Windows 上的默认值:不适用

Amazon ECS 代理需要的根 cgroup 路径。这是可从代理挂载访问的路径。

ECS_ENABLE_CPU_UNBOUNDED_WINDOWS_WORKAROUND

示例值:true | false

Linux 上的默认值:不适用

Windows 上的原定设置值:false

当为 true 时,Amazon ECS 将允许 CPU 未绑定 (CPU=0) 任务与 CPU 绑定任务一起在 Windows 中运行。

ECS_TASK_METADATA_RPS_LIMIT

示例值:100,150

Linux 上的原定设置值:40,60

Windows 上的原定设置值:40,60

任务元数据端点和代理 API 端点的总流量的稳定状态和突增节流限制的整数值(用逗号分隔)。

ECS_SHARED_VOLUME_MATCH_FULL_CONFIG

示例值:true | false

Linux 上的原定设置值:false

Windows 上的原定设置值:false

当任务定义中指定了 dockerVolumeConfiguration 且使用了 autoprovision 标志时,Amazon ECS 容器代理将比较 Docker 卷详细信息和现有 Docker 卷的详细信息。当 ECS_SHARED_VOLUME_MATCH_FULL_CONFIGtrue 时,容器代理对卷的完整配置(namedriverOptslabels)进行比较以验证卷是否相同。当它为 false 时,容器代理将使用 Docker 的默认行为,仅验证该卷的 name。如果某个卷在容器实例之间共享,则应设置为 false。有关更多信息,请参阅Docker 卷

ECS_CONTAINER_INSTANCE_PROPAGATE_TAGS_FROM

示例值:ec2_instance

Linux 上的默认值:无

Windows 上的默认值:无

如果指定了 ec2_instance,则容器实例上定义的现有标签将注册到 Amazon ECS。可使用 ListTagsForResource 操作发现标签。与容器实例关联的 IAM 角色应具有允许的 ec2:DescribeTags 操作。有关更多信息,请参阅向 Amazon EC2 容器实例添加标签

ECS_CONTAINER_INSTANCE_TAGS

示例值:{"tag_key": "tag_val"}

Linux 上的原定设置值:{}

Windows 上的原定设置值:{}

应用到容器实例的元数据,可帮助您对资源进行分类和组织。每个标签都包含自定义键和可选值。标签键最多可包含 128 个字符。标签值最多可包含 256 个字符。

如果容器实例标签是使用 ECS_CONTAINER_INSTANCE_PROPAGATE_TAGS_FROM 参数传播的,则这些标签将由使用 ECS_CONTAINER_INSTANCE_TAGS 指定的标签覆盖。有关更多信息,请参阅向 Amazon EC2 容器实例添加标签

ECS_ENABLE_UNTRACKED_IMAGE_CLEANUP

示例值:true | false

Linux 上的原定设置值:false

Windows 上的原定设置值:false

是否允许 Amazon ECS 代理删除不属于 Amazon ECS 任务的容器和映像。

ECS_EXCLUDE_UNTRACKED_IMAGE

示例值:{"alpine":"latest"}

Linux 上的原定设置值:{}

Windows 上的原定设置值:{}

映像的逗号分隔列表 (imageName:tag),如果 ECS_ENABLE_UNTRACKED_IMAGE_CLEANUPtrue,则 Amazon ECS 代理不应删除该列表。

ECS_DISABLE_DOCKER_HEALTH_CHECK

示例值:true | false

Linux 上的原定设置值:false

Windows 上的原定设置值:false

是否为 Amazon ECS 代理禁用 Docker 容器运行状况检查。

ECS_NVIDIA_RUNTIME

示例值:nvidia

Linux 上的原定设置值:nvidia

Windows 上的原定设置值:n/a

要用于将 NVIDIA GPU 设备传递到容器的运行时。如果已指定 GPU 资源要求,则不应将此参数指定为任务定义中的环境变量。有关更多信息,请参阅在 Amazon ECS 上使用 GPU

ECS_ENABLE_SPOT_INSTANCE_DRAINING

示例值:true

Linux 上的原定设置值:false

Windows 上的原定设置值:false

是否为容器实例启用 Spot 实例耗尽。设置为 true 时,如果容器实例收到 Spot 中断通知,则代理会将实例状态设置为 DRAINING,此状态将正常关闭并替换在该实例上运行的属于服务一部分的所有任务。建议您在使用竞价型实例时将此值设置为 true。必须在容器代理启动之前设置此参数。有关更多信息,请参阅Spot 实例耗尽

ECS_ENABLE_GPU_SUPPORT

示例值:true

Linux 上的原定设置值:false

Windows 上的原定设置值:n/a

是否使用具有 GPU 支持的容器实例。为代理指定此参数。您还必须为 GPU 配置任务定义。有关更多信息,请参阅在 Amazon ECS 上使用 GPU

ECS_LOG_ROLLOVER_TYPE

示例值:sizehourly

Linux 上的原定设置值:hourly

Windows 上的原定设置值:hourly

确定容器代理日志文件是将按小时轮换还是基于大小轮换。预设情况下,代理日志文件每小时轮换一次。

ECS_LOG_OUTPUT_FORMAT

示例值:logfmtjson

Linux 上的原定设置值:logfmt

Windows 上的原定设置值:logfmt

确定日志输出格式。使用 json 格式时,日志中的每一行都将是一个结构化的 JSON 映射。

ECS_LOG_MAX_FILE_SIZE_MB

示例值:10

Linux 上的原定设置值:10

Windows 上的原定设置值:10

ECS_LOG_ROLLOVER_TYPE 变量设置为 size 时,此变量将确定日志文件在轮换之前的最大大小(以 MB 为单位)。如果将轮换类型设置为 hourly,则忽略此变量。

ECS_LOG_MAX_ROLL_COUNT

示例值:24

Linux 上的原定设置值:24

Windows 上的原定设置值:24

确定要保留的轮换日志文件的数量。达到此限制后,将删除较旧的日志文件。

ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE

示例值:true

Linux 上的默认值:请参阅以下说明

Windows 上的原定设置值:false

是否启用 awslogs 日志驱动程序以使用任务执行 IAM 角色进行身份验证。此参数必须为 true 才能在已指定任务执行 IAM 角色的任务中使用 awslogs 日志驱动程序。在将经 Amazon ECS 优化的 AMI 与版本 1.16.0-1 或更高版本的 ecs-init 程序包结合使用时,将使用原定设置值 true。在使用旧版本的 ecs-init 程序包时,将使用默认值 false

ECS_PULL_DEPENDENT_CONTAINERS_UPFRONT

示例值:true | false

Linux 上的原定设置值:false

Windows 上的原定设置值:false

是否在满足 dependsOn 条件之前提取具有依赖关系的容器的映像。

ECS_EXCLUDE_IPV6_PORTBINDING

示例值:true | false

Linux 上的原定设置值:true

Windows 上的原定设置值:true

使用 default 网络模式时,代理是否应排除IPv6端口绑定。当该值为 true 时,会筛选 IPv6 端口绑定,不会在 DescribeTasks 响应中返回任务 IPv6 端口绑定。绑定包含在任务元数据端点中。

此语法在 1.55.3 版本 及更高版本中可用。

ECS_SKIP_LOCALHOST_TRAFFIC_FILTER

示例值:true | false

Linux 上的原定设置值:false

Windows 上的原定设置值:false

预设情况下,ecs-init 服务将添加 iptable 规则,以将非本地数据包丢弃到 localhost,前提是它们不是现有转发连接或 DNAT 的一部分,并在停止时删除规则。如果 ECS_SKIP_LOCALHOST_TRAFFIC_FILTER 设置为 true,则不会添加或删除此规则。

ECS_ALLOW_OFFHOST_INTROSPECTION_ACCESS

示例值:true | false

Linux 上的原定设置值:false

Windows 上的原定设置值:false

预设情况下,ecs-init 服务添加了一个 iptable 规则来阻止从主机外(或 awsvpc 网络模式中的容器)访问代理自检端口,并在停止时删除规则。如果 ECS_ALLOW_OFFHOST_INTROSPECTION_ACCESS 设置为 true,则不会添加或删除此规则。

ECS_OFFHOST_INTROSPECTION_INTERFACE_NAME

示例值:eth0

Linux 上的原定设置值:eth0

Windows 上的原定设置值:eth0

用于阻止主机外代理自检端口访问的主要网络接口名称。默认情况下,此值为 eth0

ECS_WARM_POOLS_CHECK

示例值:true | false

Linux 上的原定设置值:false

Windows 上的原定设置值:false

仅在您有一个 自动扩缩组且想要将一个暖池将其关联时,将此变量设置为 true

如果为 true,Amazon ECS 代理将轮询实例元数据,以确定实例是否已准备好包含在 Amazon ECS 集群中。当您的应用程序需要横向扩展时,自动扩缩组将快速将所需数量的预初始化实例从暖池移动到集群。

此变量在代理版本 1.59.0 及更高版本中可用。

CREDENTIALS_FETCHER_HOST

示例值:unix:///var/credentials-fetcher/socket/credentials_fetcher.sock

Linux 上的原定设置值:unix:///var/credentials-fetcher/socket/credentials_fetcher.sock

Windows 上的默认值:不适用

仅在您有一个 自动扩缩组且想要将一个暖池将其关联时,将此变量设置为 true

用于创建与 credentials-fetcher 进程守护程序的连接,以支持 gMSA on Linux。默认值适用于大多数用户。仅在使用自定义凭证提取器套接字路径(例如 CF_UNIX_DOMAIN_SOCKET_DIR)时才需要修改此值。

CREDENTIALS_FETCHER_SECRET_NAME_FOR_DOMAINLESS_GMSA

示例值:secretmanager-secretname

Linux 上的原定设置值:secretmanager-secretname

Windows 上的默认值:不适用

仅在您有一个 自动扩缩组且想要将一个暖池将其关联时,将此变量设置为 true

用于支持 gMSA on Linux credentials-fetcher 进程守护程序的扩缩选项。如果在未加入域的实例上配置 gMSA,则需要创建一个 Active Directory 用户,该用户有权检索 gMSA 账户的主体并将其存储在密钥管理器中

ECS_DYNAMIC_HOST_PORT_RANGE

示例值:100-200

Linux 上的默认值:由 /proc/sys/net/ipv4/ip_local_port_range 定义

Windows 上的原定设置值:49152-65535

这为容器端口范围映射指定了代理用于分配主机端口的动态主机端口范围。

此变量在代理版本 1.68.0 及更高版本中可用。

将容器实例配置存储在 Amazon S3 中

Amazon ECS 容器代理配置通过上一部分中所述的环境变量来控制。经 Amazon ECS 优化的 AMI Linux 变体将在容器代理启动时在 /etc/ecs/ecs.config 中查找这些变量,并相应地配置代理。某些无害环境变量(如 ECS_CLUSTER)可在启动时通过 Amazon EC2 用户数据传递到容器实例,并可写入到此文件而不会造成任何后果。但是,其他敏感信息(如您的 AWS 凭证或 ECS_ENGINE_AUTH_DATA 变量)不应通过用户数据传递到某个实例或以它们能够在 .bash_history 文件中显示的方式写入到 /etc/ecs/ecs.config

将配置信息存储在 Amazon S3 中的私有存储桶中并向您的容器实例 IAM 角色授予只读访问权限,这是一个允许在启动时配置容器实例的安全方便的方法。可以将 ecs.config 文件的副本存储在私有存储桶中。然后,您可以使用 Amazon EC2 用户数据安装 AWS CLI,并在实例启动时将配置信息复制到 /etc/ecs/ecs.config

为容器实例角色授予 Amazon S3 只读访问权限
  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择 Roles (角色),然后选择要用于您的容器实例的 IAM 角色。此角色的标题可能为 ecsInstanceRole。有关更多信息,请参阅Amazon ECS 容器实例 IAM 角色

  3. Managed Policies 下,选择 Attach Policy

  4. 要缩小策略结果的范围,请在附加策略页面上,为筛选条件键入 S3

  5. 选中 AmazonS3ReadOnlyAccess 策略左侧的框并选择 Attach Policy

要在 Amazon S3 中储存 ecs.config 文件
  1. 采用以下格式,利用ecs.config中的有效环境变量和值创建 Amazon ECS 容器代理配置 文件。此示例将配置私有注册表身份验证。有关更多信息,请参阅任务的私有注册表身份验证

    ECS_ENGINE_AUTH_TYPE=dockercfg ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"auth":"zq212MzEXAMPLE7o6T25Dk0i","email":"email@example.com"}}
  2. 要存储您的配置文件,请在 Amazon S3 中创建私有存储桶。有关更多信息,请参阅 Amazon Simple Storage Service 用户指南中的创建存储桶

  3. ecs.config 文件上传到 S3 存储桶。有关更多信息,请参阅 Amazon Simple Storage Service 用户指南中的向存储桶添加对象

在启动时从 Amazon S3 加载 ecs.config 文件
  1. 完成本节中的上述过程以允许 Amazon S3 对您的容器实例进行只读访问,并将 ecs.config 文件存储在私有 S3 存储桶中。

  2. 通过执行启动 Amazon ECS Linux 容器实例中的步骤启动新的容器实例。在步骤 7中,使用以下示例脚本。该脚本将安装 AWS CLI 并将您的配置文件复制到 /etc/ecs/ecs.config

    #!/bin/bash yum install -y aws-cli aws s3 cp s3://your_bucket_name/ecs.config /etc/ecs/ecs.config