System Scheduler: Turn On/Off cloud application automatically (Bộ lập lịch hệ thống: Tự động bật/tắt ứng dụng đám mây)
Bài viết đến từ anh Lê Văn Tám – Senior Cloud Engineer
Cloud Architect team @Techcombank
Như các bạn đã biết, tại Techcombank, đã có rất nhiều ứng dụng được di chuyển lên Cloud. Mỗi ứng dụng phục vụ các nhóm đối tượng mục tiêu khác nhau bao gồm nhân viên nội bộ ngân hàng (internal users) hoặc khách hàng sử dụng sản phẩm dịch vụ của Techcombank (external users).
Trên AWS cloud, các nguồn lực như EC2, RDS… sẽ tính phí dựa theo thời gian hoạt động. Đối với môi trường production, các ứng dụng này sẽ chạy liên tục 24/7. Tuy nhiên, đối với môi trường non-production (dev, sit, uat, pre-prd …), tùy theo mục đích sử dụng, chúng sẽ được bật/tắt trong khoảng thời gian nhất định để giảm chi phí.
Thời gian đầu, quá trình bật/tắt các ứng dụng được thực hiện thủ công. Tức là, khi đội ngũ phát triển cần kích hoạt ứng dụng, sẽ truy cập vào AWS Console để bật lần lượt từng nguồn lực (EC2, RDS…). Việc này sẽ gây tốn khá nhiều thời gian vì tính lặp lại của một thao tác nhiều lần.
Về sau, đội ngũ phát triển của Techcombank đã tìm ra một giải pháp cải tiến hơn cho vấn đề trên bằng cách sử dụng các Lambda tự động.
Chi tiết của giải pháp này như sau:
- Đầu tiên, EventBridge Scheduler sẽ được thiết lập để chạy (theo lịch phù hợp với nhu cầu của tổ chức) và sẽ kích hoạt Lambda có tên là “Start app”: Lambda này sử dụng Python boto3 lib để gửi yêu cầu tới API của AWS nhằm khởi động các EC2, RDS và cập nhật các thông số của autoscaling group như min/max/desire size.
- Tiếp theo, EventBridge Scheduler khác sẽ được thiết lập để chạy (theo lịch phù hợp với nhu cầu của tổ chức) và sẽ kích hoạt Lambda “Stop app. Lambda này cũng sử dụng Python boto3 lib để gửi yêu cầu đến API của AWS nhằm dừng hoạt động EC2, RDS và điều chỉnh các thông số của autoscaling group như min/max/desire size về 0.
Mặc dù giải pháp này hiệu quả, nhưng vẫn còn một số hạn chế:
- Khi các phiên bản EC2, RDS được khởi động cùng một lúc, một số ứng dụng yêu cầu database (RDS) được khởi động trước.
- Khi các phiên bản EC2, RDS dừng lại cùng một lúc, một số ứng dụng sẽ cần database (RDS) được dừng lại sau.
- Hơn nữa, mỗi hệ thống đều cần thiết lập một bộ Lambda riêng.
Do đó, để giải quyết các thách thức này, team CloudOps đã nghiên cứu và đưa ra một giải pháp gọi là System Scheduler, giúp bật/tắt ứng dụng một cách đồng bộ và tự động.
Để cải thiện quá trình bật/tắt các AWS resources (EC2/RDS), đội ngũ Techcombank đã đưa ra một giải pháp mới như sau:
- Đầu tiên, tạo một tài khoản AWS gọi là “master” để điều khiển quá trình bật/tắt AWS resources (EC2/RDS) của các tài khoản AWS khác (gọi là tài khoản ứng dụng). Tài khoản AWS này bao gồm các thành phần sau:
- DynamoDB: Lưu trữ thông tin của tài khoản ứng dụng (app account) bao gồm ID tài khoản AWS, IAM cross role, lịch bật/tắt instance.
- EventBridge Scheduler: Kích hoạt chức năng Lambda. Lambda lấy thông tin từ DynamoDB trên (AWS account ID, IAM cross role, lịch bật/tắt instance), sử dụng IAM cross để truy cập vào application account và gọi AWS API để bật/tắt EC2/RDS instance.
- Trong mỗi tài khoản ứng dụng: tạo ra các AWS resources bằng cách sử dụng mẫu SAM (Serverless Application Model). Điều này giúp tự động tạo resources tag và tiếp tục/tạm ngừng các hoạt động của AutoScaling group.
Cụ thể, SAM sẽ tạo ra các AWS resources như sau:
1. Những tài nguyên phục vụ việc tự động đánh nhãn
– EventBridge: Khi một phiên bản EC2 hoặc RDS được tạo, chức năng Lambda “Tự động đánh nhãn” sẽ được kích hoạt.
– Chức năng Lambda “Tự động đánh nhãn”: Tự động đánh nhãn cho tất cả các tài nguyên EC2, RDS, AutoScalingGroup, với các nhãn sau:
- Schedule: Biểu thị khung thời gian áp dụng cho việc bật/tắt phiên bản.
- DoNotStop: Gắn nhãn này nếu không muốn áp dụng lịch trình (schedule).
- Reason: Lý do áp dụng lịch trình (schedule).
Chức năng Lambda này có tác dụng này giúp các nhà phát triển ứng dụng của mỗi tài khoản biết khung thời gian bật/tắt và cũng như các trường hợp ngoại lệ khi không muốn ứng dụng được bật tắt tự động (ví dụ: khi thực hiện PT test, chuẩn bị triển khai tính năng mới yêu cầu nhiều tài nguyên hơn thường lệ…)
2. Những tài nguyên phục vụ việc tự động tạm ngừng/tiếp tục hoạt động của AutoScalingGroup
- EventBridge Scheduler sẽ kích hoạt Lambda tự động tiếp tục hoạt động của AutoScalingGroup (ASG).
- EventBridge Scheduler sẽ kích hoạt Lambda tự động tạm ngừng hoạt động của AutoScalingGroup (ASG).
Bằng cách áp dụng các phương pháp mới này, Techcombank đã thành công trong việc giải quyết được các vấn đề sau:
|
Các cơ hội việc làm tại Techcombank
Bài viết liên quan
Xây dựng hệ thống giám sát (Monitoring) tập trung cho workload trên Cloud
Triển khai Cloud tại Digital Banking: Đâu là yếu tố để đảm bảo chuyển đổi thành công?
- S System Scheduler: Turn On/Off cloud application automatically (Bộ lập lịch hệ thống: Tự động bật/tắt ứng dụng đám mây)
- P Project Manager – Người “nhạc trưởng” thúc đẩy tổ chức tiến lên phía trước
- T Triển khai Cloud tại Digital Banking: Đâu là yếu tố để đảm bảo chuyển đổi thành công?
- S SAGA Pattern trong kiến trúc ngân hàng lõi (Core Bank Architecture)
- L Leveraging ML models to Predict Customer Churn in Business Banking
- T Tầm quan trọng của việc làm rõ yêu cầu trong việc triển khai dự án công nghệ
- X Xây dựng hệ thống giám sát (Monitoring) tập trung cho workload trên Cloud
- N Nguyên tắc thiết kế về Component Cohesion trong kiến trúc phần mềm (Principles of Component Cohesion in Software Architectures)
- T Tận dụng ưu thế cơ sở vật chất tại Techcombank: Nền tảng Machine Learning on-premise mang lại khả năng phân tích dữ liệu mạnh mẽ
- I Infrastructure as code (IaC)