我有Kubernetes的背景,我正在努力学习AWS/ECS。在Kubernetes中,您可以使用ConfigMap
资源将简单的一次性配置文件快速轻松地装载到容器中,而不必经历设置卷的所有麻烦。这也使得从Terraform配置服务变得非常容易,这也是我正在尝试做的
AWS ECS服务是否具有类似Kubernetes配置映射的功能?我只需要一种最简单的方法,在启动时将任意文本文件插入到我的服务中,它可以用Terraform快速更新。我想避免每次更改此文件时都必须重新生成整个映像。
这可能吗?或者我需要为此创建卷吗?如果是,那么用于此目的的最佳卷配置类型是什么?我可以很容易地在S3中存储和更新文件,这些只是简单的配置文件,只需要读取访问权限,所以这是一个可以接受的情况吗?
解决方案取决于体系结构和细节。以下是我可以看到的一些可能的解决方案:
- 如果可以将参数设置为环境变量,我建议将其值存储在AWS
Systems Manager
或Secrets Manager
服务中并传递给容器(换句话说,您可以在容器中生成读取这些ENV的配置文件,并使用自定义Entrypoint
将值打印到文件中( - 如果您需要在docker容器中上传文件,这里有两个可能的简单解决方案:
- 创建一个固定的
base_image
,每次只重建它的最后一层。用Dockerfile的术语来说,它看起来像:FROM base_image COPY config_file /app/config_file
- 将配置文件存储在S3存储桶中,并通过更改
Entrypoint
将其复制到容器启动中。例如,如果当前Entryrpoint
是/usr/bin/apache
:
*然而,在这种情况下,您需要在容器内安装aws-cliFROM some_image RUN echo 'aws s3 cp s3://mybucket/config_file /app/ && /usr/bin/apache' > /Entrypoint.sh ENTRYPOINT ['sh', '/Entrypoint.sh']
- 创建一个固定的
免责声明-我是这个项目的作者。
Ultimate Docker Launcher是一款开源应用程序,可以满足您的需求。它将在容器启动时基于env-var创建或编辑文件,因此您不需要在每次文件更改时重新编译应用程序,也不需要使用EFS等外部文件系统。