Amazon ECS Farget with Blue-Green Deployments by CDK Typescript - Part 2

Abstract
- Continue the previous post Hands-on Amazon ECS for Blue-Green Deployments With CDK Typescript which uses EC2 to host the ECS container service and manually operate blue-green deployments. In this blog post, I use AWS Fargate as a container of ECS service and codedeploy to operate blue-green deployment automatically.
Table Of Contents
๐ Solution overview

The whole AWS resources are created using CDK pipeline except the pipeline itself.
The ECS cluster is placed in a private subnet as well as the fargate service. We create ECS service with task definition that has desired count of 3 and use FARGATE as
requiresCompatibilitiesThe ECS service is registered to ECS deployment controller with the type
CODE_DEPLOYfor handling blue-green deployment. It sticks the application load balancer to the replacement target group when deploying successfully.A container image is built with codepipeline and codebuild which store images to ECR.
Here is the stacks relationship

๐ Source code structure
We have two Git repositories (codecommit) one for application project
app-projectdirectory and others for CDK infrastructurecdk-infradirectoryโ ecs-blue-green-deployments tree -L 1 . โโโ README.md โโโ app-project โโโ cdk-infra โโโ images 3 directories, 1 fileWe create the codecommit repositories through CDK
Go to
cdk-infraand runcdk lscdk ls simflexcloud-ecs-blue-green-deployments-pipeline simflexcloud-ecs-blue-green-deployments-pipeline/master-sin/EcsBlueGreenDeploymentsStackDeploy
simflexcloud-ecs-blue-green-deployments-pipelineit will create the repository ofcdk-infra. Note: replaceCDK_DEFAULT_ACCOUNTandCDK_DEFAULT_REGIONincdk-infra/src/shared/constants.tswith expected ones.cdk deploy simflexcloud-ecs-blue-green-deployments-pipelineAdd the remote Git repository to
cdk-infra(Note: Replace thepriv-accwith yours)git remote add origin ssh://priv-acc/v1/repos/ecs-blue-green-deployments-infraCreate branch
masterand push source code to the repo, it will trigger CDK pipeline to create all stacks which also include the repository and pipeline forapp-projAfter the pipeline is completed successfully, go to
app-projdirectory and add Git remote repository, then create the branchestestgreenandtestblueand push them to codecommitgit remote add origin ssh://priv-acc/v1/repos/simflexcloud-ecs-blue-green-deployments
๐ Process flow
1. Build project
- Use AWS CodeBuild to create Docker images and store them in Amazon ECR. This process is powered by codepipeline to handle CICD.
2. Create ECS cluster
Create an Amazon ECS cluster using fargate.

3. Application load balancer
We have two rules:
Port 80: the main rule

Port 8080: testing rule

The ALB is currently stuck to the target group of green

4. CodeDeploy application and deployment group
A CodeDeploy deployment group that orchestrates ECS blue-green deployments.

๐ Test the blue-green deployments
Test the blue service by loading ALB DNS

Now we change the colour to red in
app-proj/index.htmland push the commit to CodeCommit. It triggers the pipeline to build and then deploy a new change
The deploy stage creates codedeploy deployment ID to perform the deployment process and handle the Traffic shifting progress strategy with rule
LINEAR_10PERCENT_EVERY_1MINUTES(CodeDeploy predefined deployment configuration that shifts 10 percent of traffic every minute until all traffic is shifted)
ECS run new tasks with new image version on the ECS service

After the new tasks are in healthy state, the deployment starts rerouting production traffic to replacement task set gradually following the rule
LINEAR_10PERCENT_EVERY_1MINUTES

Use port 8080 for testing and compare with current version

Complete the replacement and start terminating the original task set

ECS remove the tasks with old revision

The final result

๐ Cleanup
To cleanup all resources in this project, we first need to delete the ECR image as they were not created by CDK and prevent CDK to destroy the ECR repository.
Go to cloudformation and delete stacks.

๐ Conclusion
Now that you know how to launch tasks into your Amazon ECS cluster using CDK pipeline with the required type EC2 or Fargate.
The approach of a blue-green deployment involves utilizing two identical production environments as a means of reducing downtime. Various cutover strategies may be employed, but typically only one of the environments should be actively serving production traffic.
References:



