1. Argument Attributes – Định nghĩa tài nguyên
- Argument là các cặp
key = value - Dùng mô tả chi tiết cấu hình của tài nguyên
- Phụ thuộc vào từng provider và loại resource
Ví dụ:
resource "aws_instance" "example" {
ami = "ami-abc12345"
instance_type = "t2.micro"
tags = {
Name = "Example-Instance"
}
}
Arguments xác định trạng thái mong muốn của tài nguyên.
2. Meta-Arguments trong Terraform
Có 5 meta-arguments chính
provider
count
for_each
depends_on
lifecycle
3. Provider – Xác định nhà cung cấp & môi trường
Mục đích:
- Chỉ định resource sử dụng provider nào
- Hỗ trợ multi-provider / multi-region
Ví dụ:
provider "aws" {
alias = "hanoi"
region = "ap-southeast-1"
}
resource "aws_instance" "server" {
provider = aws.hanoi
ami = "ami-12345"
}
Ghi chú:
Nếu không chỉ định, Terraform dùng provider mặc định3. Provider – Xác định nhà cung cấp và môi trường
provider meta-argument dùng khi có alias
4. Count – Tạo nhiều resource giống nhau
Mục đích:
- Tạo nhiều bản sao của cùng một resource
- Phù hợp khi các resource không cần định danh riêng
Ví dụ:
resource "aws_instance" "server" {
count = 3
tags = {
Name = "server-${count.index}"
}
}
Đặc điểm:
- Index bắt đầu từ
0 - Thay đổi
countcó thể gây resource recreation - Không phù hợp khi cần quản lý lâu dài từng resource
5. For_each – Tạo resource theo tập hợp có định danh
Mục đích:
- Tạo resource từ
maphoặcset - Mỗi resource có key riêng biệt
Ví dụ:
locals {
services = {
web = "web-server"
api = "api-server"
}
}
resource "aws_instance" "service" {
for_each = local.services
tags = {
Name = each.value
}
}
So sánh nhanh:
|
Count 3834_a41882-82> |
For_each 3834_894643-95> | 3834_55d029-fd> |
|---|---|---|
|
Dựa vào số lượng 3834_a8f433-91> |
Dựa vào key 3834_ed32fd-48> | 3834_cd9353-35> |
|
Index số 3834_36e75f-bd> |
Key rõ ràng 3834_5e9657-15> | 3834_c2bc21-6b> |
|
Dễ bị xáo trộn 3834_ad83da-78> |
Ổn định lâu dài 3834_5517e5-d9> | 3834_aa7ca7-c5> |
6. Depends_on – Thiết lập quan hệ phụ thuộc rõ ràng
Mục đích:
- Ép Terraform tạo resource theo thứ tự xác định
- Dùng khi dependency không thể suy ra tự động
Ví dụ:
resource "aws_instance" "app" {
depends_on = [aws_s3_bucket.data]
}
Lưu ý:
- Terraform tự động xử lý dependency qua reference
depends_onchỉ dùng khi thật sự cần thiết
7. Lifecycle – Kiểm soát vòng đời resource
Mục đích:
- Ngăn xóa tài nguyên quan trọng
- Kiểm soát thứ tự create / destroy
- Bỏ qua thay đổi không mong muốn
Các tuỳ chọn phổ biến:
resource "aws_instance" "critical" {
lifecycle {
prevent_destroy = true
create_before_destroy = true
ignore_changes = [tags]
}
}
Ý nghĩa:
prevent_destroy: ngăn hủy resourcecreate_before_destroy: tạo mới trước khi xóa cũignore_changes: bỏ qua thay đổi nhất định
8. Tổng kết
- Arguments: mô tả tài nguyên
- Meta-Arguments: điều khiển hành vi của Terraform
- Terraform hoạt động theo mô hình declarative
- Cấu hình đúng → Terraform tự sắp xếp thứ tự và hành động