将环境变量传递给容器
重要
我们建议将您的敏感数据存储在 Amazon Secrets Manager 密钥或 Amazon Systems Manager Parameter Store 参数中。有关更多信息,请参阅将敏感数据传递给容器。
任务定义中指定的环境变量可由允许执行任务定义 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
" ] } ] }