Infra as Code là gì?

Bắt đầu bằng một câu chuyện…
Công ty nọ đang có kế hoạch phát triển một wep application để quản lý nhân sự. Thấy giang hồ đồn rằng deploy app lên nền tảng cloud tốt hơn nhiều so với on-premise, nên sếp quyết định tuyển một SA AWS về, bằng cấp đầy mình, kinh nghiệm mấy năm xây dựng hạ tầng cloud trên AWS ngon choét…
Anh kĩ sư AWS vào, ngay lập tức bằng kinh nghiệm của mình đã build 1 hệ thống infra trên AWS khá ngon, app được deploy trên chục con EC2, đặt trong một scaling group có khả năng tự động scale up, down tùy thuộc vào số lượng user request. Các EC2 được thiết lập mạng VPC, security group, bảo mật đến tận răng, không lo bị hack.

   Architecture with Auto Scaling and Elastic Load Balancing
Làm được vài tháng, thì anh kĩ sư AWS xin quit vì trả lương bèo quá, để lại cái hệ thống cloud không ai maintains. Web app được deploy trên cloud hoạt động khá hiệu quả, sếp mừng lắm nên chỉ đạo xuống dưới
Lúc này, lính tráng khóc dở, mếu dở vì cái infra cloud hiện tại được anh kĩ sư AWS build hoàn toàn bằng cơm. Knowhow không biết, cả team không ai biết làm thế nào để tạo infra tương tự.
Như vậy là phải cần một loại tool nào đó mà chỉ cần bấm, enter command thì nó tự động build up ra 1 infra, không cần chạy manual như hiện tại nữa.
Thế là infra as code ra đời.

Infra as code là gì?

Image result for Infra as code
Thay vì build hệ thống bằng tay, như vào console gõ command, config, cài cắm… Bạn sẽ script hóa các bước trên bằng code. Như thế, việc xây dựng cấu hình hệ thống giống như lập trình một ứng dụng vậy. Bạn chỉ việc vào console execute chương trình là infra sẽ tự đông được build trong vòng một nốt nhạc, không cần kiến thức sâu rộng về hệ thống, công nhân thợ hồ cũng thực hiện được. Túm váy là chuyển từ thủ công, chân tay sang tự động hóa...
Việc sử dụng Infra as Code đem lại cho bạn rất nhiều lợi ích
Khi các steps được script hóa, thì việc tạo resource sẽ được thực hiện theo đúng quy trình, không thừa thiếu bước nào, hạn chế sai sót khi thực hiện bằng tay. Tưởng tượng một thanh niên tạo một con EC2 bằng tay, rồi nhân tiện add security group open all port thì thảm họa thế nào
Rất linh hoạt, bạn có thể dùng Infra as code để nhân bản nhiều infra cùng 1 lúc với các tham số khác nhau chỉ trong vòng 1 nốt nhạc. Không cần 1 anh kĩ sư AWS như ở trên nữa.
Với khả năng automate, Infra as Code được tích hợp vào quy trình CI/CD để xây dựng hạ tầng một cách nhanh chóng. Chỉ cần start một Jenkins pipeline là infra được build lên.

Giải pháp Infra as Code

Các dự án DevOps hiện tại của mình gần như đã loại bỏ việc tạo infra manual. Tất cả đều được viết dưới dạng code và tích hợp vào Jenkins.
2 giải pháp Infra as Code mình hay sử dụng cho các dự án DevOps là Terraform và AWS Cloudformation. Đối với hệ tầng được xây dựng trên nền tảng AWS thì Cloudformation là giải pháp rất hiệu quả
Mô hình build Infra as Code dùng CloudFormation như sau
Anh Dev mô tả hạ tầng thành dạng template (JSON or YAML) format
File template được lưu local hoặc trên S3
AWS Cloudformation sẽ đọc nội dung trong template để build lên hạ tầng
Khi tích hợp Infra as Code vào CI/CD, mình thường sử dụng Python và Jinja template để tạo AWS CloudFormation. Jinja sẽ dùng các tham số đầu vào để tạo ra Cloudformation template. Sau đó, sử dụng cloudformation API để thực thi việc tạo infra.
Bài này giới thiệu Infra as Code ở góc độ lý thuyết, bài tiếp theo sẽ đi vào thực hành các xây dựng Infra đơn giản bằng Terraforms và Cloudformation.

@giaosucan

No comments:

Post a Comment

The Ultimate XP Project

  (Bài chia sẻ của tác giả  Ryo Amano ) Trong  bài viết  số này, tôi muốn viết về dự án phát triển phần mềm có áp dụng nguyên tắc phát triển...