resource tạo và quản lý vòng đời; data chỉ đọc thứ đã tồn tại, không tạo, không sửa, không xoá.
hcl
data "aws_vpc" "shared" {
tags = { Name = "platform-vpc" } # do team infra quản lý
}
resource "aws_security_group" "api" {
vpc_id = data.aws_vpc.shared.id # chỉ tham chiếu
}Đây là cách nối các state độc lập mà không gộp chúng: team platform sở hữu VPC, team application chỉ đọc và không có quyền sửa.
Hai cái bẫy:
- data được đọc lúc plan. Nếu nó phụ thuộc resource tạo trong cùng lần apply, plan sẽ ra (known after apply) và có khi phải tách hai lần apply.
- data "aws_ami" { most_recent = true } rất tiện nhưng làm plan đổi theo thời gian dù code không đổi, AMI mới ra là EC2 bị replace ngoài ý muốn. Pin AMI ID cho production.