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. 1.Import with correct ID format:
  2. 2.```bash
  3. 3.terraform import aws_instance.my_instance i-1234567890
  4. 4.terraform import aws_db_instance.mydb mydb
  5. 5.terraform import aws_s3_bucket.mybucket my-bucket-name
  6. 6.`
  7. 7.Use Terraform 1.5+ import blocks:
  8. 8.```hcl
  9. 9.import {
  10. 10.to = aws_instance.my_instance
  11. 11.id = "i-1234567890"
  12. 12.}
  13. 13.`
  14. 14.Then run terraform plan to generate the configuration.
  15. 15.For resources that import with diffs, use the plan output to generate config:
  16. 16.```bash
  17. 17.terraform import aws_instance.my_instance i-1234567890
  18. 18.terraform plan -generate-config-out=generated.tf
  19. 19.# Review and move generated config to your main config
  20. 20.`

Prevention - Document resource ID formats for each provider - Use import blocks (Terraform 1.5+) for better error messages - Test imports in isolated environments first - Use terraform-config-inspect to validate generated configs - Import resources one at a time for easier debugging