Modules
Nội dung đang được chuẩn bị. Quay lại sớm nhé!
Sắp có trong bài này
Module là gì?
- Tập hợp các
.tffiles trong một folder - Tái sử dụng hạ tầng như function trong lập trình
- Ví dụ: module
vpc, moduleec2-autoscaling, modulerds
Cấu trúc module chuẩn
modules/
└── vpc/
├── main.tf # Resources chính
├── variables.tf # Input variables
├── outputs.tf # Output values
└── README.md # Documentation
Gọi module
# Root module gọi child module
module "vpc" {
source = "./modules/vpc" # local path
# Hoặc từ Terraform Registry:
# source = "terraform-aws-modules/vpc/aws"
# version = "~> 5.0"
# Truyền variables vào module
vpc_cidr = "10.0.0.0/16"
environment = var.environment
}
# Dùng output của module
resource "aws_instance" "web" {
subnet_id = module.vpc.public_subnet_ids[0]
}
Terraform Registry Modules phổ biến
terraform-aws-modules/vpc/aws— VPC với subnets, IGW, NATterraform-aws-modules/eks/aws— EKS clusterterraform-aws-modules/rds/aws— RDS instanceterraform-aws-modules/s3-bucket/aws— S3 với best practices
Module Versioning
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "~> 5.0" # Pin version như provider
}
Module Composition — Lồng modules
root/
├── main.tf ← gọi module networking, compute, database
├── modules/
│ ├── networking/ ← VPC, subnets, security groups
│ ├── compute/ ← EC2, Auto Scaling, Load Balancer
│ └── database/ ← RDS, parameter groups, subnet groups
Best Practices
- Mỗi module có một mục đích rõ ràng
- Input variables đầy đủ type và description
- Output những gì module con cần
- README với usage examples
- Pin module versions trong production