指定环境变量 - Amazon Elastic Container Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

指定环境变量

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

  • 单独,使用 environment 容器定义参数。这会将 --env 选项映射到 docker run。此选项适用于使用 Fargate 和 EC2 启动类型的任务。

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

通过在文件中指定环境变量,您可以批量注入环境变量,而不是单独指定它们。在容器定义中,使用包含环境变量文件的 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 ECS 容器实例需要 1.39.0 或更高版本的容器代理才能使用此功能。有关检查您的代理版本并更新到最新版本的信息,请参阅更新 Amazon ECS 容器代理

  • 该文件必须使用 .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 策略

  • 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" ] } ] }