Adopting an existing resource used to be a command run against state, invisible to review and impossible to repeat.
import {
to = aws_s3_bucket.legacy_uploads
id = "acme-uploads-2019"
}
resource "aws_s3_bucket" "legacy_uploads" {
bucket = "acme-uploads-2019"
}
# terraform plan now shows: 1 to import, 0 to add,
# and any drift between the real resource and the config
# appears as a change in the same plan.
Seeing the drift in the plan is the improvement — the old command imported and then the next plan told you what was wrong, in a separate step nobody connected. -generate-config-out writes a starting configuration from the real resource, which is a first draft rather than a result: it emits every attribute including the defaults, and reviewing it down to what is intentional is the actual work.