使用文件将环境变量传递给容器 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用文件将环境变量传递给容器

重要

我们建议将您的敏感数据存储在 Amazon Secrets Manager 密钥或 Amazon Systems Manager Parameter Store 参数中。有关更多信息,请参阅 将敏感数据传递给 Amazon ECS 容器

环境变量文件是 Amazon S3 中的对象,所有 Amazon S3 安全注意事项都适用。

您可以创建环境变量文件,并将其存储在 Amazon S3 中,以便将环境变量传递给您的容器。

通过在文件中指定环境变量,您可以批量注入环境变量。在容器定义中,使用包含环境变量文件的 Amazon S3 存储桶列表指定 environmentFiles 对象。

Amazon ECS 不对环境变量强制实施大小限制,但大型环境变量文件可能会填满磁盘空间。使用环境变量文件的每个任务都会导致文件的副本下载到磁盘。作为任务清理的一部分,Amazon ECS 会删除文件。

有关支持的环境变量的信息,请参阅高级容器定义参数 - 环境

注意事项

在容器定义中指定环境变量文件时,请考虑以下因素。

  • 对于 Amazon EC2 上的 Amazon ECS 任务,您的容器实例需要版本 1.39.0 或更高版本的容器代理才能使用此功能。有关如何检查您的代理版本并更新到最新版本的信息,请参阅更新 Amazon ECS 容器代理

  • 对于 Amazon Fargate 上的 Amazon ECS 任务,您的任务必须使用平台版本 1.4.0 或更高版本(Linux)来使用此功能。有关更多信息,请参阅 Fargate Linux 平台版本

    验证操作系统平台是否支持该变量。有关更多信息,请参阅 容器定义其他任务定义参数

  • 该文件必须使用 .env 文件扩展名和 UTF-8 编码。

  • 每个任务定义最多只能有 10 个文件。

  • 环境文件中的每一行都必须包含 VARIABLE=VALUE 格式的环境变量。空格或引号作为 Amazon ECS 文件的值的一部分包含。以开头的行 # 被视为注释并会被忽略。有关环境变量文件语法的更多信息,请参阅在文件中声明默认环境变量

    以下是合适的语法。

    #This is a comment and will be ignored VARIABLE=VALUE ENVIRONMENT=PRODUCTION
  • 如果在容器定义中存在使用 environment 参数指定的环境变量,则这些变量的优先级高于环境文件中包含的变量。

  • 如果指定了多个环境文件并且其中包含相同变量,则会按输入顺序处理这些文件。这意味着将使用变量的第一个值,并忽略重复变量的后续值。建议您使用唯一的变量名。

  • 如果将环境文件指定为容器覆盖,则将使用它。此外,容器定义中指定的任何其他环境文件都将被忽略。

  • 以下规则适用于 Fargate 启动类型:

    • 该文件的处理方式与原生 Docker env-file 类似。

    • 不支持 shell 转义处理。

    • 容器入口点解释 VARIABLE 值。

所需的 IAM 权限

使用此功能需要 Amazon ECS 任务执行角色。这允许容器代理从 Amazon S3 中提取环境变量文件。有关更多信息,请参阅 Amazon ECS 任务执行 IAM 角色

要提供对您创建的 Amazon S3 对象的访问权限,请将以下权限作为内联策略手动添加到任务执行角色。可以使用 Resource 参数将权限范围扩展到包含环境变量文件的 Amazon S3 存储桶。有关更多信息,请参阅添加和删除 IAM policy

  • s3:GetObject

  • s3:GetBucketLocation

在以下示例中,内联策略会添加这些权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::examplebucket/folder_name/env_file_name" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::examplebucket" ] } ] }

示例

以下是演示如何指定环境变量文件的任务定义的代码段。

{ "family": "", "containerDefinitions": [ { "name": "", "image": "", ... "environmentFiles": [ { "value": "arn:aws:s3:::s3_bucket_name/envfile_object_name.env", "type": "s3" } ], ... } ], ... }