DEV Community

Cover image for Amazon ECS Farget with Blue-Green Deployments by CDK Typescript - Part 2
7 1 1 1 1

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

Abstract

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 infrastructure cdk-infra directory


  ➜  ecs-blue-green-deployments tree -L 1
  .
  ├── README.md
  ├── app-project
  ├── cdk-infra
  └── images

  3 directories, 1 file


Enter fullscreen mode Exit fullscreen mode
  • We create the codecommit repositories through CDK

    • Go to cdk-infra and run cdk 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 of `cdk-infra`. Note: replace `CDK_DEFAULT_ACCOUNT` and `CDK_DEFAULT_REGION` in `cdk-infra/src/shared/constants.ts` with expected ones.
    ```


    cdk deploy simflexcloud-ecs-blue-green-deployments-pipeline


Enter fullscreen mode Exit fullscreen mode
  • Add the remote Git repository to cdk-infra (Note: Replace the priv-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 for `app-proj`

  - After the pipeline is completed successfully, go to `app-proj` directory and add Git remote repository, then create the branches `testgreen` and `testblue` and push them to codecommit
    ```


    git remote add origin ssh://priv-acc/v1/repos/simflexcloud-ecs-blue-green-deployments


Enter fullscreen mode Exit fullscreen mode

🚀 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:


Image of Datadog

Learn how to monitor AWS container environments at scale

In this eBook, Datadog and AWS share insights into the changing state of containers in the cloud and explore why orchestration technologies are an essential part of managing ever-changing containerized workloads.

Download the eBook

Top comments (0)

Retry later
Retry later