Terraform Advanced — Import Block (HCL)
Terraform 1.5+ introduced the import block — declarative imports written in HCL.
Import Block Syntax
import {
to = aws_s3_bucket.legacy
id = "my-existing-bucket"
}
resource "aws_s3_bucket" "legacy" {
bucket = "my-existing-bucket"
}
$ terraform plan
# Shows the import plan
$ terraform apply
# Imports the resource into state
Benefits Over CLI Import
| Feature | terraform import CLI |
import block |
|---|---|---|
| Declarative | ❌ | ✅ |
| Multiple resources | One at a time | All at once |
| Plan preview | ❌ | ✅ |
| Code reviewable | ❌ | ✅ (in Git) |
Works with for_each |
❌ | ✅ |
Import with for_each
locals {
existing_buckets = {
logs = "prod-app-logs"
assets = "prod-app-assets"
backups = "prod-app-backups"
}
}
import {
for_each = local.existing_buckets
to = aws_s3_bucket.this[each.key]
id = each.value
}
resource "aws_s3_bucket" "this" {
for_each = local.existing_buckets
bucket = each.value
}
What’s Next?
Auto-generate configuration from imports.