首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS ECS leader命令(django迁移)

AWS ECS leader命令(django迁移)
EN

Stack Overflow用户
提问于 2016-02-17 21:52:05
回答 3查看 1.6K关注 0票数 9

我们目前正在AWS Elastic Beanstalk上部署我们的Django应用程序。在那里,我们使用容器命令执行django db迁移,其中我们通过使用"leader_only“限制来确保只在一个实例上运行迁移。

我们正在考虑将我们的部署转移到AWS EC2 Container Service。然而,当部署新镜像时,我们不能想出一种方法来强制迁移只在一个容器上运行。

是否可以在亚马逊网络服务EC2容器服务中配置leader_only命令?

EN

回答 3

Stack Overflow用户

发布于 2019-02-21 15:49:28

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

如果容器针对未迁移的数据库运行,则

  1. 会使容器的运行状况检查失败,例如,通过创建自定义视图并检查迁移执行计划executor.migration_plan(executor.loader.graph.leaf_nodes()) status = 503 if plan else 200
  2. Make任务定义的存在,该任务定义只迁移数据库并确保其计划与部署过程的其余部分一起执行。

结果是部署过程将尝试引入一个新的容器。只要数据库没有迁移,这个新容器就不会通过健康检查,因此将阻止所有进一步的部署过程(因此,您仍然有旧的实例在运行以服务于请求)。迁移完成后-运行状况检查现在将成功,因此部署将解除阻止并继续进行。

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

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

票数 8
EN

Stack Overflow用户

发布于 2019-02-03 02:53:43

老实说,我还没有弄明白这一点。我在ECS上遇到了完全相同的限制(以及其他使我放弃它的限制,但这不是主题)。

可能的解决方法: 1)在init脚本中运行迁移。这有一个缺陷,即它在部署时运行在每个节点上。(我假设您有多个副本) 2)将此作为CI流的一个步骤添加。

希望我能帮上一点忙,如果我想出了另一个主意,我会回到这里。

票数 0
EN

Stack Overflow用户

发布于 2021-11-02 20:03:30

它不是最优的,但您可以简单地在任务定义中将其作为命令运行

代码语言:javascript
复制
"command": ["/bin/sh", "-c", "python manage.py migrate && gunicorn -w 3 -b :80 app.wsgi:application"],
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35458580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档