将环境变量传递给 Amazon ECS 容器
重要
我们建议将您的敏感数据存储在 AWS Secrets Manager 密钥或 AWS Systems Manager Parameter Store 参数中。有关更多信息,请参阅 将敏感数据传递给 Amazon ECS 容器。
环境变量文件是 Amazon S3 中的对象,所有 Amazon S3 安全注意事项都适用。
您不能在 Windows 容器和 Fargate 上的 Windows 容器上使用 environmentFiles
参数。
您可以创建环境变量文件,并将其存储在 Amazon S3 中,以便将环境变量传递给您的容器。
通过在文件中指定环境变量,您可以批量注入环境变量。在容器定义中,使用包含环境变量文件的 Amazon S3 存储桶列表指定 environmentFiles
对象。
Amazon ECS 不对环境变量强制实施大小限制,但大型环境变量文件可能会填满磁盘空间。使用环境变量文件的每个任务都会导致文件的副本下载到磁盘。作为任务清理的一部分,Amazon ECS 会删除文件。
有关支持的环境变量的信息,请参阅高级容器定义参数 - 环境。
在容器定义中指定环境变量文件时,请考虑以下因素。
-
对于 Amazon EC2 上的 Amazon ECS 任务,您的容器实例需要版本
1.39.0
或更高版本的容器代理才能使用此功能。有关如何检查您的代理版本并更新到最新版本的信息,请参阅更新 Amazon ECS 容器代理。 -
对于 AWS Fargate 上的 Amazon ECS 任务,您的任务必须使用平台版本
1.4.0
或更高版本(Linux)来使用此功能。有关更多信息,请参阅 适用于 Amazon ECS 的 Fargate 平台版本。 -
该文件必须使用
.env
文件扩展名和 UTF-8 编码。 -
该任务执行角色需要使用此功能和 Amazon S3 的额外权限。这允许容器代理从 Amazon S3 中提取环境变量文件。有关更多信息,请参阅 Amazon ECS 任务执行 IAM 角色。
-
每个任务定义最多只能有 10 个文件。
-
环境文件中的每一行都必须包含
VARIABLE=VALUE
格式的环境变量。空格或引号作为 Amazon ECS 文件的值的一部分包含。以开头的行#
被视为注释并会被忽略。有关环境变量文件语法的更多信息,请参阅在文件中声明默认环境变量。 以下是合适的语法。
#This is a comment and will be ignored VARIABLE=VALUE ENVIRONMENT=PRODUCTION
-
如果在容器定义中存在使用
environment
参数指定的环境变量,则这些变量的优先级高于环境文件中包含的变量。 -
如果指定了多个环境文件并且其中包含相同变量,则会按输入顺序处理这些文件。这意味着将使用变量的第一个值,并忽略重复变量的后续值。建议您使用唯一的变量名。
-
如果将环境文件指定为容器覆盖,则将使用它。此外,容器定义中指定的任何其他环境文件都将被忽略。
-
以下规则适用于 Fargate 启动类型:
-
该文件的处理方式与原生 Docker env-file 类似。
-
容器中不会出现引用了空白且存储在 Amazon S3 中的环境变量的容器定义。
-
不支持 shell 转义处理。
-
容器入口点解释
VARIABLE
值。
-
示例
以下是演示如何指定环境变量文件的任务定义的代码段。
{ "family": "", "containerDefinitions": [ { "name": "", "image": "", ... "environmentFiles": [ { "value": "arn:aws:s3:::
amzn-s3-demo-bucket
/envfile_object_name.env
", "type": "s3" } ], ... } ], ... }