Terraform Resources

Working with Terraform resources and data sources.

Data Sources

data "aws_ami" "ubuntu" {
    most_recent = true
    
    filter {
        name = "name"
        values = ["ubuntu/images/*"]
    }
}

# Use data source
ami = data.aws_ami.ubuntu.id

Resource Dependencies

resource "aws_eip" "ip" {
    instance = aws_instance.web.id # implicit dependency
}

resource "aws_instance" "app" {
    depends_on = [aws_db_instance.db] # explicit dependency
}

Count & For Each

# Count
resource "aws_instance" "server" {
    count = 3
    ami = "ami-123"
    instance_type = "t2.micro"
}

# For Each
resource "aws_instance" "server" {
    for_each = toset(["dev", "prod"])
    tags = { Name = each.key }
}

Lifecycle Rules

lifecycle {
    create_before_destroy = true # create new before deleting old
    prevent_destroy = false # prevent accidental deletion
    ignore_changes = [tags] # ignore specific changes
}