AWS ECS中的Python应用程序如何链接到外部应用程序配置?

问题描述

我有一个具有以下部署模型的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)))

解决方法

您有几种选择:

  1. 最简单但也是最麻烦的选择是将编码为base64的config放入参数存储中,然后通过在容器中使用secrets属性指向容器将其作为环境文件注入到容器中。任务定义。我个人真的不喜欢这样,因为每次我想更改配置时,我都必须手动执行...更改文件,对其进行编码,然后将其上传到商店。另外,必须修改映像/入口点以将文件放置在其所属位置。

  2. 将配置存储在EFS卷中,并将其绑定到容器。一旦完成所有设置,并且容器可以访问EFS卷,这将是一个非常不错的解决方案。您可以在卷中手动更新配置,例如从EC2实例更新,也可以将管道中的更新文件推送到卷。

  3. 我使用的笨拙方法:将配置存储在还包含管道定义等的git存储库中。使用entrypoint属性覆盖图像的入口点,并将配置文件作为base64注入将env var放入容器中,然后从同一入口点对其进行解码,并将其放在正确的位置。之所以这样做,是因为我希望所有非秘密配置都与任务定义等位于同一存储库中。

我敢肯定还有更多(复杂的)方法。例如,像Hashicorp Vault之类的东西。但是我没有他们的经验

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...