AWS ECS领导者命令(django migrate)

时间:2016-02-17 13:52:05

标签: django amazon-web-services amazon-ec2 docker

我们目前正在AWS Elastic Beanstalk上部署我们的Django APP。我们使用容器命令执行django db迁移,我们确保只使用“leader_only”限制在一个实例上运行迁移。

我们正在考虑将部署转移到AWS EC2 Container Service。但是,我们无法找到一种方法来强制迁移到仅在部署新映像时在一个容器上运行。

是否可以在AWS EC2 Container Service中配置leader_only命令?

2 个答案:

答案 0 :(得分:1)

可以使用ECS内置功能来处理涉及迁移的部署。基本上,这个想法是这样的:

  1. 如果容器针对未迁移的数据库运行,例如使容器运行状况检查失败,通过创建自定义视图并检查是否存在迁移执行计划executor.migration_plan(executor.loader.graph.leaf_nodes()) status = 503 if plan else 200
  2. 进行任务定义后,仅执行迁移操作,然后迁移数据库并确保计划在其余部署过程中执行该任务。

结果是部署过程将尝试带来一个新容器。只要不迁移数据库,此新容器将无法通过运行状况检查,从而将阻止所有进一步的部署过程(因此您仍将运行旧实例来服务请求)。迁移完成后-健康检查将成功完成,因此部署将解除阻止并继续进行。

这是迄今为止我在Amazon ECS上运行Django迁移方面能够找到的最优雅的解决方案。

来源:https://engineering.instawork.com/elegant-database-migrations-on-ecs-74f3487da99f

答案 1 :(得分:0)

真的,我还没有想出了这一点。我在ECS上遇到了完全相同的限制(以及其他使我放弃的限制,但这是没有话题的。)

潜在的解决方法: 1)在您的初始化脚本中运行迁移。这具有运行在部署时每个节点上的缺陷。 (我假设您有多个副本) 2)本添加作为CI流量的步骤。

希望我能有所帮助,以防万一我想到另一个想法,我会回到这里。