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

AWS ECS中的Python应用程序。如何链接到外部应用程序配置?,python,docker,amazon-ecs,circleci,Python,Docker,Amazon Ecs,Circleci,我有一个Python应用程序(Flask,uwsgi),具有以下部署模型:docker容器放在AWS ECR中,由AWS ECS(Fargate)推出。CD由CircleCI运营。 我使用一个外部应用程序配置(INI文件),并希望将其放置在容器外部(实际上这是一个很好的实践)。问题是:我应该将这样的文件放在哪里,以便ECS中的容器可以读取它?提醒一下:Fargate部署模型对特定的EC2实例是不可知的,所以我看不到一种方法可以将它放在那里。 读取我的配置的代码段: APP_CONFIG = Pa

我有一个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)))

您有几个选择:

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

  • 将配置存储在EFS卷中,并将其绑定到容器。一旦一切就绪,容器就可以访问EFS卷,这是一个非常好的解决方案。您可以手动更新卷中的配置,例如从EC2实例更新,或者将管道中更新的文件推送到卷中

  • 我使用的黑客方法:将配置存储在一个git repo中,其中也包含我的管道定义等。使用
    entrypoint
    属性覆盖图像的入口点,并将配置文件作为base64作为一个env var注入容器中,然后从同一入口点解码并将其放在正确的位置。我这样做是因为我希望所有非机密配置都与任务定义等位于同一个repo中


  • 我相信还有更多(复杂的)方法。例如,使用Hashicorp Vault之类的东西。但是我没有这方面的经验

    谢谢你的选择。选项1看起来不太方便,选项3可能不适合我,因为我的配置包含机密。也许,我将尝试找出如何实现选项2。我将这些配置中使用的机密作为机密字符串存储在参数存储中。我将链接一个帖子,在那里我详细展示了我的设置在你面前的样子。这样做的另一个好处是,您可以在配置文件中展开不支持它的变量。例如Prometheus YML config.UPD:我尝试将EFS链接到我的ECS,它似乎工作得很好。唯一的不便是您基本上需要在EFS中手动更新生产配置。对于我的宠物项目,这是完全可以的,但可能对实际生产没有用处