
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
Open Table Of Contents
π Solution overview
-
The whole AWS resources are created using CDK pipeline except the pipeline itself.
-
The ECS cluster is placed in 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
requiresCompatibilities -
The 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 file -
We 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/EcsBlueGreenDeploymentsStack -
Deploy
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-pipeline -
Add 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-infra -
Create 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-proj -
After 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 color 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: