Chuyển tới nội dung

Meta-Arguments – Lý thuyết

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 count có 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ừ map hoặc set
  • 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

For_each

Dựa vào số lượng

Dựa vào key

Index số

Key rõ ràng

Dễ bị xáo trộn

Ổn định lâu dài

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_on chỉ 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 resource
  • create_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

Liên hệ