Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Infrastructure as Code (IaC): Khi hạ tầng cũng được lập trình như phần mềm

    Infrastructure as Code (IaC): Khi hạ tầng cũng được lập trình như phần mềm


    Có một câu nói rất phổ biến trong giới DevOps:
    "Nếu hạ tầng của bạn không được định nghĩa bằng code, thì sớm hay muộn nó cũng sẽ trở thành một bí ẩn."

    Đó chính là lý do Infrastructure as Code (IaC) ra đời và trở thành nền tảng của mọi hệ thống Cloud hiện đại, từ AWS, Azure, Google Cloud cho đến Kubernetes và OpenShift.

    Ngày nay, thay vì đăng nhập SSH vào từng máy chủ để cấu hình bằng tay hoặc click từng nút trên giao diện quản trị, toàn bộ hạ tầng có thể được mô tả bằng mã nguồn và triển khai hoàn toàn tự động chỉ với vài lệnh.
    Infrastructure as Code (IaC) là gì?


    Infrastructure as Code (IaC) là một phương pháp hiện đại trong lĩnh vực CNTT, cho phép quản lý và triển khai hạ tầng (bao gồm máy chủ, lưu trữ, mạng và các tài nguyên khác) bằng mã nguồn (code) thay vì thực hiện thủ công hoặc sử dụng các công cụ cấu hình tương tác.

    Phương pháp này đưa các thực hành tốt nhất của Software Engineering vào quản lý hạ tầng bằng cách mô tả trạng thái mong muốn của hệ thống dưới dạng mã nguồn và tự động thực thi thông qua các công cụ IaC như:
    • Terraform
    • Ansible
    • Pulumi
    • AWS CloudFormation

    Các tệp cấu hình IaC có thể được viết theo hai phong cách:

    Declarative (khai báo)

    Mô tả trạng thái cuối cùng mà hạ tầng cần đạt được. Bạn chỉ cần nói "Tôi muốn có gì", công cụ IaC sẽ tự tính toán các bước cần thực hiện.

    Imperative (mệnh lệnh)

    Mô tả chi tiết từng bước để đạt được trạng thái mong muốn. Bạn sẽ chỉ định "Phải làm như thế nào" để hệ thống được triển khai.

    Các tệp cấu hình này thường được lưu trữ trong các hệ thống quản lý phiên bản như Git, giúp các nhóm phát triển:
    • Làm việc cộng tác.
    • Theo dõi lịch sử thay đổi.
    • Dễ dàng quay trở lại các phiên bản ổn định khi cần.

    Một ví dụ quen thuộc với Terraform


    Ví dụ dưới đây minh họa cách sử dụng Terraform để triển khai một máy ảo EC2 trên AWS.

    Toàn bộ quy trình chỉ gồm bốn lệnh quen thuộc:
    terraform init
    terraform plan
    terraform apply
    terraform destroy

    Ý nghĩa của từng lệnh:
    • terraform init: Khởi tạo thư mục làm việc và tải xuống các Provider cần thiết.
    • terraform plan: Phân tích cấu hình và hiển thị những thay đổi sẽ được thực hiện nhưng chưa áp dụng.
    • terraform apply: Triển khai hoặc cập nhật hạ tầng theo cấu hình.
    • terraform destroy: Xóa toàn bộ tài nguyên đã tạo khi không còn sử dụng.

    Nhìn đơn giản chỉ có bốn lệnh, nhưng phía sau đó Terraform có thể tạo đồng thời:
    • VPC
    • Subnet
    • Route Table
    • Internet Gateway
    • EC2
    • Load Balancer
    • Security Group
    • IAM Role
    • Database
    • Auto Scaling Group

    ...với hàng trăm hoặc hàng nghìn tài nguyên chỉ trong vài phút.
    Infrastructure as Code mang lại những khả năng gì?

    1. Automation (Tự động hóa)


    Đây là lợi ích đầu tiên và cũng là điều khiến IaC trở thành tiêu chuẩn của Cloud Computing.

    IaC tự động hóa toàn bộ quá trình triển khai và cấu hình hạ tầng, giảm đáng kể việc thao tác thủ công.

    Lợi ích bao gồm:
    • Triển khai nhanh hơn.
    • Giảm lỗi cấu hình.
    • Tích hợp dễ dàng vào quy trình CI/CD.
    • Tự động mở rộng hạ tầng theo nhu cầu của ứng dụng và lưu lượng truy cập.

    Ví dụ, nếu doanh nghiệp cần mở rộng từ 10 Web Server lên 100 Web Server, trước đây quản trị viên có thể phải cấu hình từng máy trong nhiều giờ hoặc nhiều ngày.

    Với IaC, bạn chỉ cần thay đổi một vài dòng trong mã nguồn rồi chạy lại pipeline. Toàn bộ hạ tầng sẽ được triển khai theo đúng thiết kế đã định nghĩa.
    2. Version Control (Quản lý phiên bản)


    Một thay đổi nhỏ trong hạ tầng đôi khi cũng có thể khiến toàn bộ hệ thống ngừng hoạt động.

    Vì vậy, IaC quản lý hạ tầng giống hệt cách các lập trình viên quản lý mã nguồn.

    Nhờ lưu trữ trong Git hoặc các hệ thống Version Control khác, mọi thay đổi đều được ghi nhận đầy đủ.

    Điều này mang lại nhiều lợi ích:
    • Theo dõi lịch sử thay đổi.
    • Hỗ trợ Code Review.
    • Làm việc nhóm hiệu quả.
    • Có Audit Trail đầy đủ.
    • Dễ dàng khôi phục về trạng thái ổn định nếu xảy ra sự cố.

    Nếu một thay đổi làm hỏng hệ thống, chỉ cần git revert hoặc quay lại commit trước đó thay vì phải nhớ mình đã cấu hình thủ công những gì trên từng máy chủ.
    3. Repeatability (Khả năng tái tạo)


    Đây là điểm mà rất nhiều doanh nghiệp đánh giá cao khi triển khai IaC.

    Một trong những ưu điểm lớn nhất của IaC là đảm bảo việc triển khai hạ tầng luôn nhất quán trên mọi môi trường.

    Ví dụ:
    • Development
    • Testing
    • Staging
    • Production

    Tất cả đều được triển khai từ cùng một bộ mã nguồn.

    Nhờ đó loại bỏ hiện tượng kinh điển:
    "Chạy trên máy tôi thì bình thường."

    Đồng thời hạn chế tối đa Configuration Drift — tình trạng các máy chủ ban đầu giống nhau nhưng sau nhiều lần cấu hình thủ công lại dần khác nhau, khiến việc vận hành và xử lý sự cố trở nên khó khăn.
    4. Testability (Khả năng kiểm thử)


    Một ưu điểm rất lớn của IaC là hạ tầng cũng có thể được kiểm thử giống như phần mềm.

    Mã nguồn hạ tầng có thể được kiểm tra trước khi triển khai.

    Quá trình này bao gồm:
    • Kiểm tra cú pháp (Syntax Validation).
    • Unit Test cho các module.
    • Integration Test.
    • Kiểm thử trên môi trường Docker hoặc Vagrant.

    Một số công cụ phổ biến:
    • Test Kitchen
    • Terratest
    • Docker
    • Vagrant

    Nhờ đó, rất nhiều lỗi có thể được phát hiện ngay trong pipeline trước khi ảnh hưởng đến môi trường Production.
    Một quy trình IaC điển hình


    Trong các doanh nghiệp hiện đại, quy trình triển khai hạ tầng thường diễn ra như sau:
    Viết mã Terraform


    Đưa vào Git Repository


    Code Review


    CI/CD Pipeline


    terraform init


    terraform plan


    Kiểm tra thay đổi


    terraform apply


    Cloud Infrastructure
    (AWS, Azure, GCP, VMware...)

    Toàn bộ quy trình đều có thể được tự động hóa, kiểm soát phiên bản và tích hợp vào hệ thống DevOps.
    Vì sao IaC trở thành nền tảng của Cloud hiện đại?


    Hãy tưởng tượng doanh nghiệp của bạn có:
    • 500 Virtual Machine
    • 300 VPC
    • 2.000 Security Group
    • Hàng nghìn Route Table, Subnet và Load Balancer

    Nếu mọi thứ đều được cấu hình thủ công, chỉ một sai sót nhỏ cũng có thể gây ra sự cố diện rộng và rất khó xác định nguyên nhân.

    Infrastructure as Code giải quyết bài toán đó bằng cách coi hạ tầng như một sản phẩm phần mềm: có mã nguồn, có kiểm thử, có quy trình phê duyệt, có lịch sử thay đổi và có khả năng khôi phục khi cần.

    Đó cũng là lý do vì sao IaC đã trở thành một thành phần không thể thiếu trong các mô hình Cloud Native, DevOps, Platform EngineeringGitOps.

    Ngày nay, Infrastructure as Code không còn là một kỹ thuật "nên có" mà đã trở thành chuẩn vận hành của các hệ thống hiện đại. Các kỹ năng về Terraform, Ansible, Pulumi hay CloudFormation gần như là yêu cầu cơ bản đối với Cloud Engineer, DevOps Engineer, Platform EngineerSite Reliability Engineer (SRE). Khi hạ tầng được quản lý bằng code, doanh nghiệp có thể triển khai nhanh hơn, vận hành ổn định hơn, kiểm soát thay đổi tốt hơn và sẵn sàng mở rộng ở quy mô mà phương pháp cấu hình thủ công khó có thể đáp ứng.
    Attached Files
    Đặng Quang Minh, CCIE#11897 (Enterprise Infrastructure, Wireless, Automation, AI), CCSI#31417

    Email : dangquangminh@vnpro.org
    https://www.facebook.com/groups/vietprofessional/
Working...
X