【问题标题】:Mount a single config file onto an ECS service将单个配置文件挂载到 ECS 服务上
【发布时间】:2023-02-12 11:23:30
【问题描述】:

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

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

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

【问题讨论】:

  • 如果您想要 Kubernetes 行为,为什么不使用 AWS AKS? ECS 不是 Kubernetes。
  • @Marcin 因为 EKS 每月 75 美元的间接费用超过了我们投入其中的计算能力的成本。
  • 如果 Kubernetes 和 ConfigMaps 出现同样的问题,人们会认为 AWS 的工程师现在已经做了类似的事情......

标签: amazon-web-services terraform amazon-ecs


【解决方案1】:

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

  1. 如果可能将参数设置为环境变量,我建议将其值存储在 AWS Systems ManagerSecrets Manager 服务和 pass to containers 中(以其他方式,您可以在容器内生成配置文件,读取这些 ENV 并将值打印到通过使用自定义文件Entrypoint
  2. 如果您需要在 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。

【讨论】:

  • 好的,谢谢,我希望我不必做那样的事情,但这听起来是现在最好的方法。主要原因是我希望能够只使用公共注册表映像而无需管理我自己的映像。
  • The main reason is that I wanted to be able to just use public registry images without needing to manage my own → AWS ECR 是一项非常简单方便的服务,经过优化可与 ECS 一起使用。还拥有自己的存储库,您可以根据需要冻结特定版本的图像。公共图像每次更新和部署脚本突然停止工作。我认为它有点不稳定
【解决方案2】:

免责声明 - 我是这个项目的作者。

Ultimate Docker Launcher 是一个开源应用程序,可以满足您的需求。它将根据环境变量在容器启动时创建或编辑文件,因此您无需在每次文件更改时重新编译您的应用程序,也无需使用 EFS 等外部文件系统。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 2018-09-02
    相关资源
    最近更新 更多