我们目前正在AWS Elastic Beanstalk上部署我们的Django APP。我们使用容器命令执行django db迁移,我们确保只使用“leader_only”限制在一个实例上运行迁移。
我们正在考虑将部署转移到AWS EC2 Container Service。但是,我们无法找到一种方法来强制迁移到仅在部署新映像时在一个容器上运行。
是否可以在AWS EC2 Container Service中配置leader_only命令?
答案 0 :(得分:1)
可以使用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
答案 1 :(得分:0)
真的,我还没有想出了这一点。我在ECS上遇到了完全相同的限制(以及其他使我放弃的限制,但这是没有话题的。)
潜在的解决方法: 1)在您的初始化脚本中运行迁移。这具有运行在部署时每个节点上的缺陷。 (我假设您有多个副本) 2)本添加作为CI流量的步骤。
希望我能有所帮助,以防万一我想到另一个想法,我会回到这里。