我们目前正在AWS Elastic Beanstalk上部署我们的Django应用程序。在那里,我们使用容器命令执行django db迁移,其中我们通过使用"leader_only“限制来确保只在一个实例上运行迁移。
我们正在考虑将我们的部署转移到AWS EC2 Container Service。然而,当部署新镜像时,我们不能想出一种方法来强制迁移只在一个容器上运行。
是否可以在亚马逊网络服务EC2容器服务中配置leader_only命令?
发布于 2019-02-21 15:49:28
可以使用ECS内置功能来处理涉及迁移的部署。基本上,想法是这样的:
如果容器针对未迁移的数据库运行,则
executor.migration_plan(executor.loader.graph.leaf_nodes()) status = 503 if plan else 200结果是部署过程将尝试引入一个新的容器。只要数据库没有迁移,这个新容器就不会通过健康检查,因此将阻止所有进一步的部署过程(因此,您仍然有旧的实例在运行以服务于请求)。迁移完成后-运行状况检查现在将成功,因此部署将解除阻止并继续进行。
就在Amazon ECS上运行Django迁移而言,这是迄今为止我所能找到的最优雅的解决方案。
来源:https://engineering.instawork.com/elegant-database-migrations-on-ecs-74f3487da99f
发布于 2019-02-03 02:53:43
老实说,我还没有弄明白这一点。我在ECS上遇到了完全相同的限制(以及其他使我放弃它的限制,但这不是主题)。
可能的解决方法: 1)在init脚本中运行迁移。这有一个缺陷,即它在部署时运行在每个节点上。(我假设您有多个副本) 2)将此作为CI流的一个步骤添加。
希望我能帮上一点忙,如果我想出了另一个主意,我会回到这里。
发布于 2021-11-02 20:03:30
它不是最优的,但您可以简单地在任务定义中将其作为命令运行
"command": ["/bin/sh", "-c", "python manage.py migrate && gunicorn -w 3 -b :80 app.wsgi:application"],https://stackoverflow.com/questions/35458580
复制相似问题