问题描述
我有一个具有以下部署模型的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实例更新,也可以将管道中的更新文件推送到卷。
-
我使用的笨拙方法:将配置存储在还包含管道定义等的git存储库中。使用
entrypoint
属性覆盖图像的入口点,并将配置文件作为base64注入将env var放入容器中,然后从同一入口点对其进行解码,并将其放在正确的位置。之所以这样做,是因为我希望所有非秘密配置都与任务定义等位于同一存储库中。
我敢肯定还有更多(复杂的)方法。例如,像Hashicorp Vault之类的东西。但是我没有他们的经验