无需强迫KILL工作者的Docker化Celery部署(ECS | Beanstalk多容器)

时间:2019-01-03 13:57:02

标签: amazon-web-services docker django-celery amazon-ecs amazon-elastic-beanstalk

我有一个Dockerrun.aws.json文件,该文件使用Beanstalk多容器将芹菜容器部署在EC2实例上。

在每个部署中,默认情况下,Beanstalk或ECS代理会在所有实例上杀死现有的celery容器,然后创建一个新的celery容器。由于芹菜任务无法完成,因此未成熟杀死了芹菜任务。

芹菜容器具有supervisord,它实际上监视芹菜过程,并在芹菜下降时将其提起。

有人可以建议我们如何通过允许芹菜容器/过程完成他们已经从SQS消耗的任务来优雅地杀死它们吗?

1 个答案:

答案 0 :(得分:0)

一种解决方案是创建一个任务,您可以使用该任务在部署之前使工作人员处于空闲状态。

基本上,基本上创建一个任务:

  • 向您发送通知,确认已准备好被杀死
  • 正确删除SQS消息以确保将来不会重新执行它。
  • 进入无限循环以防止其他任务在给定任务上执行。我建议您不止一个无限循环,至少要睡30分钟或您想用作部署窗口的任何时间(以防万一部署失败并且您希望能够恢复)

您的部署将是:

  • 发布SQS以使工人入睡
  • 正常部署。新员工上任后,它将自动开始处理新任务。