Infrastructure as Code là gì?

IaC (Infrastructure as Code) là việc sử dụng code để quản lý và cung cấp cơ sở hạ tầng.

Như đã đề cập ở trên, thay vì xây dựng cơ sở hạ tầng theo cách thủ công như sử dụng giao diện người dùng (GUI) với các thao tác như nhấp chuột, nhập liệu, hoặc thực thi lệnh, IaC cho phép quản lý và cấp phát tự động các máy chủ, hệ điều hành, lưu trữ và các thành phần cơ sở hạ tầng khác từ code.

Tổng quan về Infrastructure as Code trong AWS

AWS provides a DevOps-focused way of creating and maintaining infrastructure. Similar to the way software developers write application code, AWS provides services that enable the creation, deployment and maintenance of infrastructure in a programmatic, descriptive, and declarative way. These services provide rigor, clarity, and reliability. The AWS services discussed in this paper are core to a DevOps methodology and form the underpinnings of numerous higher-level AWS DevOps principles and practices.

AWS sẽ cung cấp cách tạo và duy trì cơ sở hạ tầng tập trung vào DevOps. Tương tự như cách mà các nhà phát triển phần mềm viết code ứng dụng, AWS cung cấp các dịch vụ cho phép tạo, triển khai và duy trì cơ sở hạ tầng theo cách lập trình, mô tả và khai báo. Dịch vụ này giúp code trở nên chặt chẽ, rõ ràng và đáng tin cậy hơn.

Các dịch vụ AWS của IaC là cốt lõi trong DevOps và là nền tảng của các tiêu chuẩn về nguyên tắc và thực hành DevOps AWS.

Các dịch vụ IaC sau được cung cấp trên AWS:

  • AWS CloudFormation
  • AWS Cloud Development Kit (AWS CDK)
  • AWS Cloud Development Kit for Kubernetes
  • AWS Cloud Development Kit for Terraform
  • AWS Cloud Control API

Rủi ro khi không vận hành bằng IaC

Việc xây dựng cơ sở hạ tầng có thể được thực hiện thủ công nhưng chúng ta nên quản lý cơ sở hạ tầng bằng code.

Các rủi ro khi không sử dụng IaC:

  • Không đảm bảo xây dựng đúng theo tài liệu (xây dựng thủ công có thể xảy ra lỗi thao tác) → Có thể viết sai thông tin khi ghi chép lại.
  • Không đảm bảo tài liệu được cập nhật (thay đổi tài nguyên thực tế nhưng quên cập nhật tài liệu).
  • Không đảm bảo sự nhất quán giữa môi trường Development và môi trường Production (do thực hiện thủ công hai lần có thể có sai sót).
  • Sau khi tiếp quản từ người tiền nhiệm, ta có các tài liệu như sơ đồ cấu hình nhưng thiếu mô tả thay đổi cấu hình sau khi xây dựng, và cần phải kiểm tra thực tế từng dịch vụ.

Vì vậy để tiến đến gần hơn với trạng thái lý tưởng ta cần

  • Tài liệu mô tả cách cơ sở hạ tầng được mô tả giống cách nó được xây dựng.
  • Được đảm bảo rằng việc xây dựng đúng theo tài liệu.
  • Có thể xây dựng nhiều lần giống nhau từ tài liệu.

“Infrastructure as Code” thực hiện những lý tưởng này.

Tổng quan về AWS CloudFormation

CloudFormation là dịch vụ cho phép các nhà phát triển tạo ra các tài nguyên AWS một cách có thứ tự và có thể dự đoán được.

Sử dụng định dạng JSON hoặc YAML để viết vào các file văn bản. Template có cấu trúc và cú pháp cụ thể ứng với loại tài nguyên được tạo ra và quản lý.

Bạn có thể sử dụng các trình soạn thảo code như AWS Cloud9 để tạo các file tài nguyên bằng định dạng JSON hoặc YAML, khi check-in vào hệ thống quản lý phiên bản, CloudFormation sẽ xây dựng các dịch vụ được chỉ định một cách an toàn và có khả năng reproduce dù thực hiện bao nhiêu lần bởi bất kì ai.

IMG_256

Template của CloudFormation được triển khai dưới dạng stack trong môi trường AWS. Stack có thể được quản lý qua AWS Management Console, AWS Command Line Interface hoặc AWS CloudFormation API.

Nếu cần thay đổi các tài nguyên đang chạy trong stack, cần cập nhật stack đó. Trước khi thay đổi các tài nguyên, bạn có thể tạo một bản tóm tắt các thay đổi gọi là change set. Change set cho phép bạn xem trước các thay đổi ảnh hưởng như thế nào đối với tài nguyên đang chạy, đặc biệt là những tài nguyên quan trọng.

Tổng kết

Khi triển khai IaC, cho phép bạn sử dụng code để cung cấp và quản lý tài nguyên cơ sở hạ tầng IT và tạo ra các file cấu hình (thường là file JSON hoặc YAML), thông qua đó xác định được thông số của cơ sở hạ tầng. 

Tham khảo :

  1. 【初心者向け】Iac(Infrasturucture as Code)とは
  2. Infrastructure as code