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

chr*_*oes 13 amazon-web-services amazon-ecs terraform

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

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

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

rzl*_*vmp 0

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

\n
    \n
  1. 如果可以将参数设置为环境变量,我建议将其值存储在AWSSystems ManagerSecrets Manager服务中并传递到容器(以其他方式,您可以在容器内生成配置文件,读取这些ENV并使用自定义将值打印到文件Entrypoint
  2. \n
  3. 如果您需要在 docker 容器内上传文件,这里有两个可能的简单解决方案:\n
      \n
    • 创建一个固定的base_image,每次只重建它的最后一层。用 Dockerfile 术语来说,它看起来像:\n
      FROM base_image\nCOPY config_file /app/config_file\n
      Run Code Online (Sandbox Code Playgroud)\n
    • \n
    • 将配置文件存储在 S3 存储桶中,并通过更改Entrypoint. 例如,如果当前Entryrpoint/usr/bin/apache:\n
      FROM some_image\nRUN echo \'aws s3 cp s3://mybucket/config_file /app/ && /usr/bin/apache\' > /Entrypoint.sh\nENTRYPOINT [\'sh\', \'/Entrypoint.sh\']\n
      Run Code Online (Sandbox Code Playgroud)\n\xef\xbc\x8a但是在这种情况下您需要在容器内安装 aws cli。
    • \n
    \n
  4. \n
\n

  • “主要原因是我希望能够只使用公共注册表映像,而无需管理自己的映像” → AWS ECR 是一项非常简单且方便的服务,经过优化,可以与 ECS 一起使用。此外,自己的存储库允许您根据需要冻结特定版本的图像。每次更新公共图像并部署脚本时都会突然停止工作。我认为它有点不稳定 (2认同)