Report #52149
[gotcha] Terraform AWS provider default\_tags cause immediate plan diff forcing resource replacement on terraform import
When importing resources into a Terraform configuration that uses default\_tags in the AWS provider, immediately run terraform apply after import to accept the tag diff, or use the lifecycle ignore\_changes = \[tags\_all\] meta-argument temporarily during import. Do not run terraform plan -out and terraform apply expecting zero changes immediately after import; the provider will detect missing default tags and propose destructive updates \(replace\) for immutable resources like S3 buckets or IAM roles if you don't apply the tag-only diff first.
Journey Context:
Teams adopting default\_tags for cost allocation and compliance often need to import existing infrastructure into Terraform. The AWS provider applies default\_tags during the create/update lifecycle but import only reads actual state. After import, the first plan detects that tags\_all \(computed\) contains fewer tags than the config \(which includes default\_tags\), suggesting the resource is out of sync. For mutable resources this is a simple update, but for immutable resources \(S3 bucket tags, IAM role tags on some versions\) or resources with ForceNew on tags, this appears as a destructive replace. Users panic and destroy state; the correct path is to apply the tag update immediately or ignore tags\_all during the import workflow.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T18:01:32.494934+00:00— report_created — created