

# 将 Amazon ECS 容器实例配置存储在 Amazon S3 中
<a name="ecs-config-s3"></a>

Amazon ECS 容器代理配置通过环境变量来控制。经 Amazon ECS 优化的 AMI Linux 变体将在容器代理启动时在 `/etc/ecs/ecs.config` 中查找这些变量，并相应地配置代理。非敏感变量（如 `ECS_CLUSTER`）可在启动时通过 Amazon EC2 用户数据传递到容器实例并写入到此文件，且不会造成任何后果。但是，其他敏感信息（如您的 AWS 凭证或 `ECS_ENGINE_AUTH_DATA` 变量）不应通过用户数据传递到某个实例或以它们能够在 `.bash_history` 文件中显示的方式写入到 `/etc/ecs/ecs.config`。

将配置信息存储在 Amazon S3 中的私有存储桶中并向您的容器实例 IAM 角色授予只读访问权限，这是一个允许在启动时配置容器实例的安全方便的方法。可以将 `ecs.config` 文件的副本存储在私有存储桶中。然后，您可以使用 Amazon EC2 用户数据安装 AWS CLI，并在实例启动时将配置信息复制到 `/etc/ecs/ecs.config`。

**要在 Amazon S3 中储存 `ecs.config` 文件**

1. 您必须向容器实例角色（**ecsInstanceRole**）授予只读访问 Amazon S3 的权限。为此，您可以将 **AmazonS3ReadOnlyAccess** 分配给 `ecsInstanceRole` 角色。有关如何将策略附加到角色的信息，请参阅《AWS Identity and Access Management 用户指南》**中的[更新角色权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-permissions.html)

1. 使用以下格式创建包含有效 Amazon ECS 代理配置变量的 `ecs.config` 文件。此示例将配置私有注册表身份验证。有关更多信息，请参阅 [在 Amazon ECS 中使用非 AWS 容器映像](private-auth.md)。

   ```
   ECS_ENGINE_AUTH_TYPE=dockercfg
   ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"auth":"zq212MzEXAMPLE7o6T25Dk0i","email":"email@example.com"}}
   ```
**注意**  
有关可用 Amazon ECS 代理配置变量的完整列表，请参阅 GitHub 上的 [Amazon ECS 容器代理](https://github.com/aws/amazon-ecs-agent/blob/master/README.md)。

1. 要存储您的配置文件，请在 Amazon S3 中创建私有存储桶。有关更多信息，请参阅 *Amazon Simple Storage Service 用户指南*中的[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。

1. 将 `ecs.config` 文件上传到 S3 存储桶。有关更多信息，请参阅《Amazon Simple Storage Service 开发人员指南》**中的[上传对象](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)。

**在启动时从 Amazon S3 加载 `ecs.config` 文件**

1. 完成本节中的上述过程以允许 Amazon S3 对您的容器实例进行只读访问，并将 `ecs.config` 文件存储在私有 S3 存储桶中。

1. 启动新的容器实例，并在 EC2 用户数据中使用以下示例脚本。脚本将安装 AWS CLI 并将您的配置文件复制到 `/etc/ecs/ecs.config`。有关更多信息，请参阅 [启动 Amazon ECS Linux 容器实例](launch_container_instance.md)。

   ```
   #!/bin/bash
   yum install -y aws-cli
   aws s3 cp s3://your_bucket_name/ecs.config /etc/ecs/ecs.config
   ```