Chuyển tới nội dung chính

Resources & Data Sources

Nội dung đang được chuẩn bị. Quay lại sớm nhé!

Sắp có trong bài này

Resource Block

resource "aws_s3_bucket" "app_assets" {
bucket = "my-app-assets-${var.environment}"

tags = local.common_tags
}
  • aws_s3_bucket — resource type (provider_resourcetype)
  • "app_assets" — local name, dùng để reference trong code
  • Reference: aws_s3_bucket.app_assets.id, .arn, .bucket...

Data Sources — Đọc hạ tầng có sẵn

# Lấy thông tin AMI mới nhất
data "aws_ami" "amazon_linux" {
most_recent = true
owners = ["amazon"]

filter {
name = "name"
values = ["amzn2-ami-hvm-*-x86_64-gp2"]
}
}

# Dùng data source
resource "aws_instance" "web" {
ami = data.aws_ami.amazon_linux.id
instance_type = "t2.micro"
}

Implicit vs Explicit Dependencies

# Implicit — Terraform tự detect qua reference
resource "aws_instance" "web" {
subnet_id = aws_subnet.main.id # implicit dependency
}

# Explicit — dùng depends_on khi không có reference
resource "aws_instance" "worker" {
depends_on = [aws_iam_role_policy.worker_policy]
}

count — Tạo nhiều resources

resource "aws_instance" "web" {
count = var.instance_count
ami = data.aws_ami.amazon_linux.id
instance_type = "t2.micro"

tags = {
Name = "web-${count.index + 1}"
}
}
# Reference: aws_instance.web[0].id, aws_instance.web[*].id

for_each — Tạo từ map/set

variable "s3_buckets" {
default = {
assets = "my-app-assets"
backups = "my-app-backups"
logs = "my-app-logs"
}
}

resource "aws_s3_bucket" "buckets" {
for_each = var.s3_buckets
bucket = each.value
# each.key, each.value
}

Lifecycle Rules

resource "aws_instance" "db" {
lifecycle {
create_before_destroy = true # Tạo mới trước khi xóa cũ (zero downtime)
prevent_destroy = true # Chặn xóa (bảo vệ production data)
ignore_changes = [tags] # Bỏ qua thay đổi tags (do external system)
}
}