Blue/Green Deployments with Elastic Beanstalk

Blue/Green Deployments with Elastic Beanstalk

avatar

Phong Nguyen

2024.03.13

Trong bài lab này chúng ta sẽ tìm hiểu cách triển khai ứng dụng với Elastic Beanstalk thông qua giao diện Console, sau đó thực hiện Blue/Green Deployments.

Lab Details

  1. Region : sử dụng us-east-1 to create all the resources.
  2. Duration30 minutes

Introduction

AWS Elastic Beanstalk

  1. AWS Elastic Beanstalk is a Platform as a Service (PaaS) cung cấp bởi AWS cho phép bạn triển khai và mở rộng ứng dụng 1 cách nhanh chóng
  2. Developer không cần có nhiều kinh nghiệm về infrastructure, Configuring all the databases, load balancers, etc. Hay không cần xem xét nhiều về Scaling, Deploy code.
  3. Tất cả nhưng gì mà Developer muốn là code app có thể ngay lập tức được triển khai lên môi trường AWS
  4. AWS Elastic Beanstalk sử dụng các Component như EC2, ASG, ELB, RDS .v.v để chạy ứng dụng
  5. Elastic Beanstalk – Supported nhiều Platforms
  6. Beanstalk cũng có nhiều Deployment Options cho việc update code

Blue/Green deployments with Elastic Beanstalk

  1. Nếu AWS Elastic Beanstalk thực hiện deploy trên chính môi trường hiện tại (production), có thể application sẽ không khả dụng cho đến khi quá trình cập nhật hoàn tất.
  2. Có thể tránh được thời gian downtime này bằng cách thực hiện triển khai blue/green deployment.
  3. Blue/Green deployments cho phép update application từ version này sang version khác mà không có bất kỳ downtime nào.
  4. Môi trường Blue là môi trường production hiện tại đang tiếp nhận trafic từ người dùng.
  5. Môi trường Green là môi trường giống hệt với production để thực hiện test version mới của ứng dụng.
  6. Sử dụng Deploying of Blue/Green cho phép chúng triển khai version mới của application lên môi trường hoàn toàn tách biệt với production - không ảnh hướng đến production trong quá trình test ứng dụng.
  7. Sau khi triển khai xong, test version mới không vấn đề gì, chỉ cần định tuyến lưu lượng truy cập từ Blue sang Green bằng cách hoán đổi CNAMEs hoặc Route53 để chuyển dần dần phần trăm lưu lượng truy cập (Lab này không thực hiện với Route53)
  8. Sau khi quá trình triển khai hoàn tất, nếu bạn gặp phải bất kỳ sự cố nào ở môi trường Green, Elastic BeanStalk cũng cung cấp tùy chọn để rool back về môi trường Blue một cách dễ dàng.

Architecture Diagram

Task Details

  1. Create Instance Profile (IAM role) cho EC2
  2. Creating an Elastic Beanstalk Application
  3. Creating Elastic Beanstalk Blue Environment
  4. Creating Elastic Beanstalk Green Environment (Clone and Deploy new app version)
  5. Swapping the Domains from Blue to Green

1. Create Instance Profile (IAM role) cho EC2

Trước khi bắt đầu với Elastic Beanstalk, chúng ta cần tạo Instance Profile cho EC2

Tại Console IAM, thực hiện tạo Role như sau

  • Use case: EC2
  • Permissions policies
    • AWSElasticBeanstalkWebTier
    • AWSElasticBeanstalkWorkerTier
    • AWSElasticBeanstalkMulticontainerDocker
  • Role name: DVAElasticBeanstalkEc2Role

2. Creating an Elastic Beanstalk Application

Tại giao diện Elastic Beanstalk, Tại menu Application ->Create application

  • Application name: d-eb-dva-nodejs-app
  • Description: NodeJS app
  • Tags:
    • Key: Name
    • Value: d-eb-dva-nodejs-app

3. Creating Elastic Beanstalk Blue Environment

Create environments

Step 1: Configure environment

  • Environment tier: Web server environment
  • Environment information:
    • Environment name: d-eb-dva-nodejs-app-env-prod
  • Platform
    • Platform type: Managed platform
    • Platform: NodeJS
    • Platform branch: Nodejs.20 running on 64bit Amazon Linux 2023
    • Platform version: 6.1.x (Nên chọn version được Recommended)
  • Application code
    • Upload your code:
      • Version label: v1
      • Localfile: Upload file eb-dva-node-app-v1.zip (Tải về Tại đây)
  • Presets
    • Single instance (free tier eligiblle)

  • Next

Step 2: Configure service access

  • Service access
    • Service role: Chọn Use an existing service role và check xem có giá trị aws-elasticbeanstalk-service-role trong Pulldown không (Nếu bạn đã từng thực hành với Elastic BeanStalk thì khả năng role aws-elasticbeanstalk-service-role đã được tạo rồi). Nếu có thì chọn, nếu chưa tồn tại chọn Create and use new service role
    • EC2 key pair: d-key-SAA-common (Key đã tạo ở những buổi đầu)
    • EC2 instance profile: DVAElasticBeanstalkEc2Role (Đã tạo ở bước 1)

  • Bấm Skip to review

Step 6: Review

  • Submit

Verify kết quả

Click vào Domain URL để kiểm tra

Vậy là chúng ta đã hoàn thành deploy v1 app, môi trường production

4. Creating Elastic Beanstalk Green Environment (Clone and Deploy new app version)

Tiếp theo chúng ta sẽ tạo một môi trường mới (dev). Thay vì tạo từ đầu, chúng ta có thể sử dụng tính năng Clone

Clone Environments

Vào Elastic Beanstalk -> Environments -> chọn Env đã tạo -> Actions -> Clone Environment

  • Environment Name: d-eb-dva-nodejs-app-env-dev
  • Các setting các để default

Deploy version mới cho env vừa clone

Vào Elastic Beanstalk -> Environments -> click Env cho môi trường dev

  • Click Upload & Deploy

  • Upload file: eb-dva-node-app-v2.zip (Tải file Tại đây)
  • Version label: v2

  • Verify kết quả: Quá trình Deploy sẽ diễn ra trong chốc lát
  • Click vào domain URL để kiểm tra

Đến đây chúng ta đã hoàn thành deploy 2 version khau nhau của application lên 2 môi trường

  • Môi trường prod: v1 (blue)
  • Môi trường dev: v2 (green)

5. Swapping the Domains from Blue to Green

Giả sử chúng ta đã test xong v2 ở môi trường dev rồi và muốn nó (gren) trở thành môi trường prod. 1 cách đơn giản đó là sử dụng Swap environment domain

  • Chọn Environments d-eb-dva-nodejs-app-env-prod -> Actions -> Swap environment domain

  • Chọn Environment: d-eb-dva-nodejs-app-env-dev, rồi nhấn swap

  • Đợi Swap xong chúng ta sẽ truy cập lại vào domain của môi trường prod xem nó đã hiển thị version mới (green) chưa.
  • Chúng ta có thể thấy domain đã được hoán đổi giữa 2 môi trường: Click vào domain prod

Version green đã hiển thị trên domain cho prod.

Clean Up

  • Delete Application