Introduction Importing existing infrastructure into Terraform state is essential for bringing manually-created resources under IaC management. Import failures block this migration and can leave resources unmanaged.
Symptoms - `terraform import` returns: "Cannot import non-existent remote object" - Error: "Resource type aws_xxx has no import support" - Error: "provider produced inconsistent result after import" - Resource imports but plan shows immediate changes - Multiple resources fail import with different errors
Common Causes - Resource ID format incorrect (wrong ARN vs ID format) - Resource does not exist in the cloud provider - Terraform provider does not support import for that resource type - Resource configuration in .tf does not match actual resource - Import block syntax error (Terraform 1.5+)
Step-by-Step Fix 1. **Find the correct resource ID**: ```bash # AWS: Use the resource ID, not ARN (for most resources) aws ec2 describe-instances --instance-ids i-1234567890 --query 'Reservations[0].Instances[0].InstanceId' aws rds describe-db-instances --db-instance-identifier mydb --query 'DBInstances[0].DbiResourceId' ```
- 1.Import with correct ID format:
- 2.```bash
- 3.terraform import aws_instance.my_instance i-1234567890
- 4.terraform import aws_db_instance.mydb mydb
- 5.terraform import aws_s3_bucket.mybucket my-bucket-name
- 6.
` - 7.Use Terraform 1.5+ import blocks:
- 8.```hcl
- 9.import {
- 10.to = aws_instance.my_instance
- 11.id = "i-1234567890"
- 12.}
- 13.
` - 14.Then run
terraform planto generate the configuration. - 15.For resources that import with diffs, use the plan output to generate config:
- 16.```bash
- 17.terraform import aws_instance.my_instance i-1234567890
- 18.terraform plan -generate-config-out=generated.tf
- 19.# Review and move generated config to your main config
- 20.
`