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_DEPLOY
for 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-project
directory and others for CDK infrastructurecdk-infra
directoryβ 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-infra
and runcdk ls
cdk ls simflexcloud-ecs-blue-green-deployments-pipeline simflexcloud-ecs-blue-green-deployments-pipeline/master-sin/EcsBlueGreenDeploymentsStack
-
Deploy
simflexcloud-ecs-blue-green-deployments-pipeline
it will create the repository ofcdk-infra
. Note: replaceCDK_DEFAULT_ACCOUNT
andCDK_DEFAULT_REGION
incdk-infra/src/shared/constants.ts
with expected ones.cdk deploy simflexcloud-ecs-blue-green-deployments-pipeline
-
Add the remote Git repository to
cdk-infra
(Note: Replace thepriv-acc
with yours)git remote add origin ssh://priv-acc/v1/repos/ecs-blue-green-deployments-infra
-
Create branch
master
and 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-proj
directory and add Git remote repository, then create the branchestestgreen
andtestblue
and 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.html
and 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: