将单个配置文件挂载到 ECS 服务上

Mount a single config file onto an ECS service

我有 Kubernetes 背景,我正在努力学习 AWS/ECS。在 Kubernetes 中,您可以使用 ConfigMap 资源将简单的一次性配置文件快速轻松地挂载到容器中,而无需经历设置卷的所有麻烦。这也使得从 Terraform 配置服务变得非常容易,这正是我正在尝试做的。

AWS ECS 服务是否具有 Kubernetes Config Maps 之类的功能?我只需要最简单的方法在启动时将任意文本文件插入到我的服务中,可以使用 Terraform 快速更新。我想避免每次此文件更改时都必须重建整个图像。

这可能吗,或者我需要为此创建卷吗?如果是这样,为此目的最好的卷配置类型是什么?我可以轻松地在 S3 中存储和更新文件,这些只是只需要读取访问权限的简单配置文件,那么仅挂载 S3 存储桶是否可以接受?

解决方案取决于架构和细节。这是我可以看到的一些可能的解决方案:

  1. 如果可以将参数设置为环境变量,我建议将其值存储在 AWS Systems ManagerSecrets Manager 服务和 pass to containers 中(否则您可以在其中生成配置文件容器读取这些 ENV 并使用自定义 Entrypoint)
  2. 将值打印到文件
  3. 如果您需要在 docker 容器中上传文件,这里有两种可能的简单解决方案:
    • 创建一个固定的 base_image 并且每次只重建它的最后一层。在 Dockerfile 术语中,它看起来像:
      FROM base_image
      COPY config_file /app/config_file
      
    • 将配置文件存储在 S3 存储桶中,并通过更改 Entrypoint 将其复制到容器启动。例如,如果当前 Entryrpoint/usr/bin/apache
      FROM some_image
      RUN echo 'aws s3 cp s3://mybucket/config_file /app/ && /usr/bin/apache' > /Entrypoint.sh
      ENTRYPOINT ['sh', '/Entrypoint.sh']
      
      *但是在这种情况下你需要在容器中安装aws cli。