AWS CloudFormation là gì
AWS CloudFormation là dịch vụ Infrastructure as Code (IaC) của AWS, cho phép bạn mô tả toàn bộ hạ tầng (infrastructure) bằng template dưới dạng code. Thay vì tạo thủ công từng tài nguyên (EC2, VPC, RDS, S3, v.v.) trên Console, bạn có thể định nghĩa tất cả trong một file JSON hoặc YAML, sau đó để CloudFormation tự động triển khai và quản lý.
Điều này giúp đảm bảo tính lặp lại, tự động hóa và kiểm soát phiên bản cho hạ tầng AWS, tương tự như cách bạn quản lý mã nguồn trong phần mềm.
Infrastructure as Code (IaC) là gì
Infrastructure as Code (IaC) là phương pháp quản lý và cung cấp hạ tầng công nghệ thông tin (IT infrastructure) thông qua mã nguồn (code), thay vì thực hiện thủ công qua giao diện đồ họa (GUI). IaC giúp tự động hóa việc tạo, cập nhật và xóa tài nguyên, đảm bảo tính nhất quán và giảm thiểu lỗi do con người.
Kiến trúc và khái niệm chính
- Template
- File định nghĩa hạ tầng (JSON/YAML).
- Bao gồm:
- Parameters: đầu vào (ví dụ: tên instance type).
- Resources: danh sách tài nguyên cần tạo.
- Outputs: giá trị trả về sau khi stack triển khai (ví dụ: IP public).
- Stack
- Một tập hợp tài nguyên được triển khai từ template.
- Bạn có thể create, update, delete cả stack để quản lý vòng đời hạ tầng.
- Change Set
- Bản xem trước (preview) các thay đổi khi update stack.
- Giúp tránh việc update gây ảnh hưởng không mong muốn.
- Drift Detection
- Phát hiện sự khác biệt giữa cấu hình trong stack và thực tế hạ tầng hiện tại.
Lợi ích
- Tự động hóa hoàn toàn việc triển khai tài nguyên.
- Nhất quán: mọi môi trường (dev, staging, production) đều giống nhau.
- Quản lý phiên bản (version control): Template có thể lưu trong Git.
- Tích hợp CI/CD: Kết hợp với CodePipeline, CodeBuild để triển khai tự động.
- Khả năng mở rộng: Hỗ trợ Nested Stacks, Cross-Stack References.
Ví dụ đơn giản (YAML)
AWSTemplateFormatVersion: "2010-09-09"
Description: Sample CloudFormation Template tạo một EC2 Instance
Parameters:
InstanceType:
Type: String
Default: t2.micro
Description: Kiểu EC2 Instance
Resources:
MyEC2Instance:
Type: AWS::EC2::Instance
Properties:
InstanceType: !Ref InstanceType
ImageId: ami-0abcdef1234567890 # AMI ví dụ
Tags:
- Key: Name
Value: DemoInstance
Outputs:
InstanceId:
Description: ID của EC2 được tạo
Value: !Ref MyEC2InstanceSo sánh với các công cụ IaC khác
| Công cụ | Đặc điểm chính |
|---|---|
| AWS CloudFormation | Native AWS, tích hợp sâu với dịch vụ AWS, hỗ trợ Drift Detection, Change Set. |
| Terraform | Multi-cloud, ngôn ngữ HCL, cộng đồng lớn. |
| CDK (Cloud Development Kit) | Viết IaC bằng ngôn ngữ lập trình (Python, TypeScript, Java, .NET). |