Python AWS ECS 中的应用程序。如何 link 到外部应用程序配置?
Python app in AWS ECS. How to link to external app config?
我有一个具有以下部署模型的 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 编码到参数存储中,然后通过使用 secrets
任务定义中的属性。就个人而言,我真的不喜欢这样,因为每次我想更改配置时,我都必须手动进行……更改文件、对其进行编码、将其上传到商店。此外,必须修改图像/入口点以将文件放在它所属的位置。
将配置存储在 EFS 卷中并将其绑定到容器。一旦您设置好所有内容并且容器可以访问 EFS 卷,这是一个非常好的解决方案。您将在卷中手动更新配置(例如从 EC2 实例)或将管道中的更新文件推送到卷。
我使用的 Hacky 方法:将配置存储在 git 存储库中,该存储库还包含我的管道定义等。使用 entrypoint
属性和覆盖图像的入口点将配置文件作为 base64 作为 env var 注入容器,然后从相同的入口点对其进行解码并将其放在正确的位置。我这样做是因为我更喜欢我所有的 non-secret 配置与任务定义等在同一个 repo 中
我敢肯定还有更多(复杂的)方法。例如像 Hashicorp Vault 这样的东西。但是我对他们没有经验
我有一个具有以下部署模型的 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 编码到参数存储中,然后通过使用
secrets
任务定义中的属性。就个人而言,我真的不喜欢这样,因为每次我想更改配置时,我都必须手动进行……更改文件、对其进行编码、将其上传到商店。此外,必须修改图像/入口点以将文件放在它所属的位置。将配置存储在 EFS 卷中并将其绑定到容器。一旦您设置好所有内容并且容器可以访问 EFS 卷,这是一个非常好的解决方案。您将在卷中手动更新配置(例如从 EC2 实例)或将管道中的更新文件推送到卷。
我使用的 Hacky 方法:将配置存储在 git 存储库中,该存储库还包含我的管道定义等。使用
entrypoint
属性和覆盖图像的入口点将配置文件作为 base64 作为 env var 注入容器,然后从相同的入口点对其进行解码并将其放在正确的位置。我这样做是因为我更喜欢我所有的 non-secret 配置与任务定义等在同一个 repo 中
我敢肯定还有更多(复杂的)方法。例如像 Hashicorp Vault 这样的东西。但是我对他们没有经验