我有一个具有以下部署模型的Python应用程序(Flask,uwsgi):将docker容器放入AWS ECR,并由AWS ECS(Fargate)推出。CD由CircleCI操作。我使用外部应用程序配置(INI文件),并希望将其放置在容器外部(实际上是一种好习惯)。问题是:我到底应该在哪里放置这样的文件,以便ECS中的容器可以读取它?提醒一下:Fargate部署模型与特定的EC2实例无关,因此我看不到将其放置在那里的方法。读取我的配置的那段代码:
APP_CONFIG = Path(os.getenv("CONFIG_FILE_PATH", str(DEFAULT_CONFIG_PATH)))
您有几种选择:
最简单但也是最麻烦的选择是将编码为base64的config放入参数存储中,然后通过secrets
在任务定义中使用属性指向该配置将其作为环境文件注入到容器中。我个人真的不喜欢这样,因为每次我想更改配置时,我都必须手动执行...更改文件,对其进行编码,然后将其上传到商店。另外,必须修改映像/入口点以将文件放置在其所属位置。
将配置存储在EFS卷中,并将其绑定到容器。一旦完成所有设置并且容器可以访问EFS卷,这将是一个非常不错的解决方案。您可以在卷中手动更新配置,例如从EC2实例更新,也可以将管道中的更新文件推送到卷。
我使用的hacky方法:将配置存储在也包含我的管道定义等的git repo中。使用entrypoint
属性覆盖图像的入口点,然后将配置文件作为base64作为env var注入到容器中,然后从同一入口点注入解码并将其放在正确的位置。我这样做是因为我希望所有非秘密配置都与任务定义等位于同一存储库中。
我敢肯定还有更多(复杂的)方法。例如,像Hashicorp Vault之类的东西。但是我没有经验
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句