AWS ECS 中的 Python 应用程序。如何链接到外部应用程序配置?
Posted
技术标签:
【中文标题】AWS ECS 中的 Python 应用程序。如何链接到外部应用程序配置?【英文标题】:Python app in AWS ECS. How to link to external app config? 【发布时间】:2020-12-13 19:47:45 【问题描述】:我有一个具有以下部署模型的 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编码的配置放入参数存储中,然后通过在任务定义中使用secrets
属性将配置作为环境文件注入到容器中。就我个人而言,我真的不喜欢这样,因为每次我想更改配置时,我都必须手动进行...更改文件,对其进行编码,然后将其上传到商店。此外,必须修改图像/入口点以将文件放在它所属的位置。
将配置存储在 EFS 卷中并将其绑定到容器。一旦您完成所有设置并且容器可以访问 EFS 卷,这是一个非常好的解决方案。您可以手动更新卷中的配置,例如从 EC2 实例更新配置,或者将管道中的更新文件推送到卷。
我使用的hacky方法:将配置存储在一个git repo中,其中还包含我的管道定义等。使用entrypoint
属性覆盖图像的入口点,并将配置文件作为base64作为环境变量注入容器然后从同一个入口点对其进行解码并将其放在正确的位置。我这样做是因为我更喜欢我所有的非秘密配置与任务定义等在同一个仓库中。
我敢肯定还有更多(复杂的)方法。例如像 Hashicorp Vault 这样的东西。但我对他们没有经验
【讨论】:
感谢您的选择。选项 1 看起来不太方便,选项 3 可能不适合我,因为我的配置包含秘密。也许,我会尝试弄清楚如何实施选项 2。 我将这些配置中使用的秘密存储在参数存储中作为秘密字符串。我将链接一个帖子,详细展示我的设置是什么样的 给你***.com/a/62792088/7391331。这样做的另一个优点是您可以在配置文件中扩展不支持它的变量。例如 Prometheus YML 配置。 UPD:我尝试将 EFS 链接到我的 ECS,它似乎运行良好。唯一的不便是您基本上需要在 EFS 中手动更新生产配置。对于我的宠物项目,这完全没问题,但可能对实际生产没有用处以上是关于AWS ECS 中的 Python 应用程序。如何链接到外部应用程序配置?的主要内容,如果未能解决你的问题,请参考以下文章
aws 如何从生产环境中的 lambda 函数访问 ECS 服务
我正在尝试使用 python boto3 列出 aws ECS 集群中的所有集群,它最多只能列出 100 个集群,我想要 300 个集群