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

将环境变量传递给容器

重要

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

任务定义中指定的环境变量可供所有 IAM 用户和角色读取,这些用户和角色允许任务定义的 DescribeTaskDefinition 操作。

环境变量文件是 Amazon S3 中的对象,所有 Amazon S3 安全注意事项都适用。请参阅以下部分 所需的 IAM 权限

您可以通过以下方式将环境变量传递到容器:

  • 单独,使用 environment 容器定义参数。这会将 --env 选项映射到 docker run

  • 批量,使用 environmentFiles 容器定义参数列出包含环境变量的一个或多个文件。该文件必须托管在 Amazon S3 中。这会将 --env-file 选项映射到 docker run

通过在文件中指定环境变量,您可以批量注入环境变量。在容器定义中,使用包含环境变量文件的 Amazon S3 存储桶列表指定 environmentFiles 对象。这些文件必须使用 .env 文件扩展名,每个任务定义的文件数量限制为十个。

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

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

{ "family": "", "containerDefinitions": [ { "name": "", "image": "", ... "environment": [ { "name": "variable", "value": "value" } ], ... } ], ... }

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

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

关于指定环境变量文件的注意事项

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

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

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

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

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

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

    以下是合适的语法。

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

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

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

所需的 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" ] } ] }