AQUA VIỆT NAM

DỊCH CHUYỂN VÀ TRIỂN KHAI CI/CD TRÊN AWS

GIỚI THIỆU

AQUA Việt Nam (viết tắt: AQUA) là công ty cung cấp thiết bị điện hàng đầu tại Việt Nam. Công ty được thành lập tại Việt Nam cùng với việc thành lập Nhà máy SANYO vào năm 1996. Công ty đã trải qua những dấu mốc lịch sử đáng nhớ như được bình chọn là thương hiệu điện gia dụng số 1 Việt Nam năm 2001 và trở thành thành viên của Tập đoàn Haier vào năm 2012. Kể từ đó, Aqua Việt Nam luôn tiếp tục phát triển và đa dạng hóa các dòng sản phẩm, thiết bị điện cho thị trường Việt Nam. Năm 2018, doanh thu của công ty đạt 200 triệu USD và mục tiêu 500 triệu USD trong 5 năm tới.

GET IN TOUCH

*This field is required.

THÁCH THỨC

AQUA đang chạy Microsoft workloads trên nhiều môi trường khác nhau, chủ yếu là Microsoft Azure. Tuy nhiên, theo chiến lược từ tập đoàn, AQUA được yêu cầu phải đồng bộ hệ thống trên nền tảng AWS. Ở giai đoạn đầu tiên, AQUA đã cùng Renova Cloud dịch chuyển hạ tầng lên AWS. Và trong giai đoạn thứ hai này, AQUA mong muốn thiết lập quy trình CI/CD đáng tin cậy để tăng tốc. Đồng thời tăng tính ổn định cho chu kỳ phát triển ứng dụng của họ.

AQUA có nhiều ứng dụng chạy trên Azure Web App Service và một số MS SQL Server database chạy trên Azure SQL. Trong đó, 3 ứng dụng được xác định là quan trọng trong kinh doanh và bắt buộc phải di chuyển, yêu cầu cũng tương tự đối với 2 databases. Tất cả các ứng dụng này đều là phiên bản .NET Framework 4.5.2 và yêu cầu IIS. Và cả 3 ứng dụng đều cần thiết lập quy trình CI/CD.

Yêu cầu:

  • Di chuyển các ứng dụng Web và Databases lên AWS
  • Giám sát và xử lý ngay lập tức sự cố phát sinh trên môi trường Production
  • Dễ dàng quản trị và bảo trì hạ tầng (không cần phải kết nối từ xa đến Windows Server và thiết lập IIS web server)
  • Tận dụng tối đa các dịch vụ từ AWS như dịch vụ kỹ thuật số và trực tuyến, kết nối từ xa và tự động hóa, giám sát và báo cáo.
  • Tự động co giãn linh hoạt theo theo nhu cầu
  • Tối ưu hóa chi phí cơ sở hạ tầng
  • Thiết lập CI/CD cho tất cả các ứng dụng

Để đáp ứng những nhu cầu trên, AQUA cần một dịch vụ hỗ trợ tự động mở rộng. Và cho phép khách hàng quản lý các server từ UI (Bảng điều khiển AWS) hỗ trợ tốt cho Microsoft Windows Server và IIS.

GIẢI PHÁP

Ứng dụng của doanh nghiệp được di chuyển lên EC2 cho Microsoft Windows Server. Nơi tài nguyên được hỗ trợ bởi Elastic Beanstalk .NET trên Windows. Trên nền tảng được quản lý này, IIS web server được cấu hình để chạy các ứng dụng .NET với cài đặt tùy chỉnh.

Với sự hỗ trợ của CloudFormation template, Elastic Beanstalk có thể tự động cập nhật bằng cài đặt CI/CD workflow sử dụng Jenkins CI triển khai trên AWS. Elastic Beanstalk được thiết lập tự động mở rộng quy mô từ 1 -2 instance cho tất cả các ứng dụng. Do đó, khi lưu lượng truy cập cao, instance thứ hai sẽ được kích hoạt. Hai Microsoft SQL Server database sẽ được lưu trữ trên một RDS SQL Server instance. CloudWatch logs hỗ trợ ghi chép lại tất cả các hoạt động, thông số. Và gửi cảnh báo khi phát hiện vấn đề.

Tất cả 3 ứng dụng Elastic Beanstalk trên EC2 intances đều nằm trong private subnet với cài đặt security group giúp hạn chế lưu lượng đến. Trong khi đó, NAT Gateway và Windows bastion host được đặt trong cùng một VPC, hỗ trợ các kết nối ra internet và kết nối từ xa. Application Load Balancer được thiết lập để phân phối lưu lượng truy cập đến các EC2 instance. AQUA sử dụng nhà cung cấp DNS bên ngoài và công ty đăng ký tên miền để liên kết DNS miền tùy chỉnh với load balancer. Trong khi Renova Cloud thiết lập ACM để áp dụng SSL certificate trong ALB. Giúp các trang web chỉ có thể truy cập thông qua giao thức HTTPS an toàn.

 

Đối với SQL Server Databases, Renova Cloud sử dụng Database Migration Service (DMS) với Azure SQL. Cả dữ liệu và giản đồ đã được di chuyển thành công. Tuy nhiên, một số cài đặt và cấu hình phải được ghi chép và tạo lại theo cách thủ công trong RDS vì DMS không hỗ trợ cho các tác vụ này.

Renova Cloud hỗ trợ AQUA thiết lập AWS ToolKit trong môi trường phát triển Visual Studio. Đồng thời sửa đổi mã code và cấu hình ứng dụng. Để đảm bảo môi trường có khả năng mở rộng linh hoạt theo quy mô hoạt động. Điều này là vô cùng cần thiết để ứng dụng không phụ thuộc vào cài đặt đã được lưu. Đối với một số ứng dụng, mã phải được sửa đổi để ngăn ứng dụng lưu trữ tệp (hình ảnh tĩnh) trong local file system. Đối với các ứng dụng này, Renova Cloud đã hướng dẫn nhóm kỹ thuật AQUA sửa đổi ứng dụng để sử dụng các S3 bucket riêng để lưu trữ. Khi không có tệp nào trên các instance, giúp bạn linh hoạt mở rộng quy mô theo nhu cầu.

Một CI/CD pipeline hoàn chỉnh đã được thiết lập sau cuộc thảo luận giữa Renova Cloud và nhóm phát triển AQUA. CI/CD flow với Jenkins CI cluster chạy trên các EC2, được lưu trữ trong mạng VPC riêng biệt. Việc quản trị chỉ thực hiện với một master node nhỏ trên Linux, trong khi các tác vụ xây dựng được chạy trên Windows agent node. Windows Server có cài đặt công cụ .NET được sử dụng vì .NET Framework yêu cầu các bản dựng Windows. AQUA lưu trữ mã nguồn trong GitHub và khi ghi lại mã nguồn vào một trong các kho. Webhook sẽ kích hoạt bản dựng Jenkins, trên môi trường dàn dựng hoặc sản xuất dựa trên nhánh nguồn. Nếu quá trình xây dựng Jenkins thành công, package sẽ được đưa vào S3 bucket và việc triển khai Elastic Beanstalk được kích hoạt để cập nhật cho môi trường. Để giảm thiểu thời gian chết, EB được triển khai tính bất biến.

CI/CD flow:

1. AQUA developer ghi lại mã nguồn vào kho lưu trữ trên GitHub

2. GitHub gửi webhook tới Jenkins CI với paramaters branch, project

3. Jenkins kích hoạt xây dựng dựa trên các webhook paramater (staging/ production; project)

4. Jenkins kiểm tra mã nguồn từ kho lưu trữ và nhánh GitHub

5. Jenkins xây dựng dự án bằng MSBuild .NET Framework 4.5

6. Để xây dựng thành công, Jenkins tải package lên S3 bucket bằng MSDeploy

7. Jenkins kích hoạt triển khai Elastic Beanstalk với package đang trên S3 và phiên bản mới

8. Elastic Beanstalk xây dựng tính bất biến và cập nhật hạ tầng

9. Jenkins ghi lại kết quả xây dựng và lưu trữ các thao tác

10. Elastic Beanstalk cập nhật tình trạng môi trường và nhật ký triển khai

 

Điểm nổi bật của giải pháp:

  • Elastic Beanstalk hỗ trợ cho tất cả .NET Framework workloads
  • Sử dụng nền tảng được quản lý hoàn toàn: .NET trên Windows Server
  • Ưu điểm của Elastic Beanstalk
  • Nền tảng quản lý toàn phần được cấu hình trước để chạy .NET Framework trên IIS
  • Hỗ trợ cân bằng tải và tự động mở rộng linh hoạt theo nhu cầu
  • Giám sát giao diện người dùng từ AWS console
  • Dễ dàng sử dụng cho AQUA
  • RDS với MS SQL Server Standard
  • Sử dụng RDS, Databases được quản lý và đảm bảo tính ổn định với các bản sao lưu, khả năng phục hồi
  • Dễ dàng sao lưu với S3, EBS snapshots và RDS snapshot
  • Hỗ trợ giám sát với CloudWatch
  • Dịch vụ VPC; Kết nối VPN và NAT Gateway

Kiến trúc:

 

LỢI ÍCH MANG LẠI

Sự dịch chuyển và triển khai CI/CD trên AWS giúp tối ưu hóa tối đa hiệu suất hoạt động của AQUA. Tất cả các dịch vụ web đều có hiệu suất tốt hơn so với trước khi di chuyển. Và Databases cũng đang cho thấy hiệu suất được cải thiện. Không kém phần quan trọng là việc tiết kiệm chi phí nhờ tính linh hoạt mở rộng theo nhu cầu.

Tự động hóa với CI/CD flow giúp rút ngắn đáng kể  thời gian. Bất kỳ khi nào một tính năng mới được xây dựng mã code xong, quy trình CI/CD sẽ xây dựng, kiểm tra mã code mới và triển khai trực tiếp vào môi trường sản xuất với thời gian tối thiểu. Tài liệu về CI/CD scripts, yaml files,  CloudFormation templates và triển khai manifests được Renova Cloud cung cấp. Nhằm giúp AQUA có cái nhìn đầy đủ các ứng dụng và hệ thống. Với cách tiếp cận Infrastructure as Code (IaC) này, mọi thứ trong hệ thống đều có thể tái sản xuất. Nếu một instance gặp sự cố, nó sẽ cho dừng hoặc kết thúc. Và instance mới sẽ tự động được thiết lập. Không cần phải truy cập thủ công vào IIS web server hoặc hệ thống tệp vật lý của ứng dụng trên Windows Server Instance. Điều này giúp giảm tác vụ quản trị và cho phép nhóm tập trung vào các nhiệm vụ khác.

Giải pháp của Renova Cloud tận dụng Elastic Beanstalk .NET trên nền tảng Windows, RDS cho SQL Server và các dịch vụ AWS khác được xây dựng với tính bảo mật cao nhất nhưng không ảnh hưởng đến hoạt động hoặc hiệu quả về chi phí. Tấn công tiềm ẩn được giảm thiểu thông qua việc sử dụng hợp lý các VPC biệt lập, private subnets, security groups và kết nối VPN. Như vậy, AQUA có thể yên tâm về tính bảo mật.