Search code examples
amazon-web-servicesamazon-ecsaws-fargate

How does ALB distribute requests to Fargate service during rolling update deployment?


I deploy a Fargate service in a cluster and use rolling update deployment. I configured an ALB in front of my service, and it is doing a health check as well. During the upgrade, I can see that my current task is marked as INACTIVE, and the new task is deployed. Both of the two tasks are in running state. I understand that the ALB is doing a health check on the newly deployed tasks, but it keeps two tasks running for 5 minutes.

I have a few questions about this deployment period of time.

  1. Does ALB distribute user requests to my new tasks before passing health check?
  2. If the answer for the first question is no, Does ALB distribute user requests to the new service after passing health check before the old services is down?
  3. If the second answer is yes, then there will be two versions of tasks running inside my service to serve user requests for 5 minutes. Is this true? How can I make sure it only send requests to one service at a time.

I don't want to change the deployment method to BLUE/GREEN. I want to keep the rolling update at the moment.


Solution

  • ALB will not send traffic to a task that is not yet passing health checks, so no to #1. ALB will send traffic to both old and new whilst deploying, so yes to #2. As soon as a replacement task is available ALB will start to drain the task it is replacing. The default time for that is 5 minutes. During that time the draining instance will not receive traffic, so sort of no to #3. The sort of part is that you will have some time with version A and B of your service will both be deployed. How long that is depends on the number of tasks and how long it takes for them to start to receive traffic.

    The only way I can think of to send all traffic to one version and then hard cut over to the other is to create a completely new target group each time, keeping the old one active. Then, once the new target group is running switch to it. You'd have to change the routes in the ALB as you do that.

    By the way, what is happening now is what I would call a rolling deployment.