AWS ECS中的Python应用程序。如何链接到外部应用程序配置?
我有一个Python应用程序(Flask,uwsgi),具有以下部署模型:docker容器放在AWS ECR中,由AWS ECS(Fargate)推出。CD由CircleCI运营。 我使用一个外部应用程序配置(INI文件),并希望将其放置在容器外部(实际上这是一个很好的实践)。问题是:我应该将这样的文件放在哪里,以便ECS中的容器可以读取它?提醒一下:Fargate部署模型对特定的EC2实例是不可知的,所以我看不到一种方法可以将它放在那里。 读取我的配置的代码段: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
APP_CONFIG = Path(os.getenv("CONFIG_FILE_PATH", str(DEFAULT_CONFIG_PATH)))
您有几个选择:
secrets
属性指向容器,将配置作为环境文件注入容器。就我个人而言,我真的不喜欢这样,因为每次我想更改配置时,我都必须手动完成。。。更改文件,对其进行编码,将其上载到存储。此外,必须修改图像/入口点以将文件放在其所属的位置
entrypoint
属性覆盖图像的入口点,并将配置文件作为base64作为一个env var注入容器中,然后从同一入口点解码并将其放在正确的位置。我这样做是因为我希望所有非机密配置都与任务定义等位于同一个repo中
我相信还有更多(复杂的)方法。例如,使用Hashicorp Vault之类的东西。但是我没有这方面的经验谢谢你的选择。选项1看起来不太方便,选项3可能不适合我,因为我的配置包含机密。也许,我将尝试找出如何实现选项2。我将这些配置中使用的机密作为机密字符串存储在参数存储中。我将链接一个帖子,在那里我详细展示了我的设置在你面前的样子。这样做的另一个好处是,您可以在配置文件中展开不支持它的变量。例如Prometheus YML config.UPD:我尝试将EFS链接到我的ECS,它似乎工作得很好。唯一的不便是您基本上需要在EFS中手动更新生产配置。对于我的宠物项目,这是完全可以的,但可能对实际生产没有用处