📖 Scenario: You are managing cloud resources using Terraform. Sometimes, resources are created outside Terraform, and you need to bring them under Terraform management without recreating them. This process is called importing state.In this project, you will create a Terraform configuration for an AWS S3 bucket, then simulate importing an existing bucket into Terraform state, and verify the import by checking the Terraform state file.
🎯 Goal: Build a Terraform configuration for an AWS S3 bucket, add a variable for the bucket name, import an existing bucket into Terraform state, and verify the import by inspecting the Terraform state file.
📋 What You'll Learn
Create a Terraform configuration file defining an AWS S3 bucket resource named my_bucket with a specific bucket name.
Add a Terraform variable named bucket_name to configure the bucket name.
Write the Terraform import command to import an existing S3 bucket into the my_bucket resource state.
Verify the import by checking the Terraform state file for the my_bucket resource.
💡 Why This Matters
🌍 Real World
Importing existing cloud resources into Terraform is common when migrating to infrastructure as code or managing legacy resources.
💼 Career
Cloud engineers and DevOps professionals often need to import resources to maintain consistent infrastructure management and avoid resource duplication.
Progress0 / 4 steps
1
Create Terraform configuration for AWS S3 bucket
Create a Terraform configuration file named main.tf that defines an AWS S3 bucket resource called my_bucket with the bucket name set to "example-bucket-terraform-import". Use the aws_s3_bucket resource type and set the bucket attribute exactly as shown.
Terraform
Hint
Use the resource block with type aws_s3_bucket and name my_bucket. Set the bucket attribute to the exact bucket name.
2
Add a Terraform variable for the bucket name
Add a Terraform variable named bucket_name in a file named variables.tf with type string and default value "example-bucket-terraform-import". Then update the bucket attribute in the my_bucket resource in main.tf to use this variable.
Terraform
Hint
Define a variable block with name bucket_name, type string, and default value matching the bucket name. Use var.bucket_name in the resource.
3
Write the Terraform import command
Write the exact Terraform CLI command to import the existing AWS S3 bucket named example-bucket-terraform-import into the Terraform resource aws_s3_bucket.my_bucket. The command should start with terraform import.
Terraform
Hint
The import command format is terraform import <resource_type>.<resource_name> <resource_id>.
4
Verify the import by inspecting Terraform state
Write the Terraform CLI command to show the state details of the resource aws_s3_bucket.my_bucket. The command should start with terraform state show.
Terraform
Hint
Use terraform state show <resource_type>.<resource_name> to view the imported resource details.
Practice
(1/5)
1. What is the main purpose of terraform import in Terraform?
easy
A. To create new resources in the cloud
B. To update Terraform version
C. To delete resources from the cloud
D. To bring existing cloud resources into Terraform state management
Solution
Step 1: Understand Terraform state
Terraform state tracks resources it manages. Existing resources outside Terraform are unknown to it.
Step 2: Role of terraform import
The terraform import command adds existing resources to Terraform state without creating or deleting them.
Final Answer:
To bring existing cloud resources into Terraform state management -> Option D
Quick Check:
Import = Add existing resource to state [OK]
Hint: Import links existing resources to Terraform state [OK]
Common Mistakes:
Thinking import creates new resources
Confusing import with terraform apply
Assuming import deletes resources
2. Which of the following is the correct syntax to import an AWS EC2 instance with ID i-1234567890abcdef0 into Terraform resource aws_instance.example?
easy
A. terraform import aws_instance i-1234567890abcdef0.example
B. terraform import aws_instance.example i-1234567890abcdef0
C. terraform import i-1234567890abcdef0 aws_instance.example
D. terraform import example.aws_instance i-1234567890abcdef0
Solution
Step 1: Identify correct command order
The syntax is terraform import <resource_address> <resource_id>.
Step 2: Match resource address and ID
Resource address is aws_instance.example, ID is i-1234567890abcdef0. So terraform import aws_instance.example i-1234567890abcdef0 matches syntax correctly.
Final Answer:
terraform import aws_instance.example i-1234567890abcdef0 -> Option B
Hint: Resource address first, then resource ID in import command [OK]
Common Mistakes:
Swapping resource address and ID
Using dot in wrong place
Missing resource type or name
3. After running terraform import aws_s3_bucket.mybucket my-bucket-name, what will terraform plan show if the Terraform configuration matches the imported bucket exactly?
medium
A. Plan to delete the imported bucket.
B. Plan to create a new S3 bucket.
C. No changes. Terraform state matches configuration.
D. Error: Resource not found.
Solution
Step 1: Understand import effect
Import adds existing resource to state but does not change configuration files.
Step 2: Compare state and config
If configuration matches the imported resource exactly, terraform plan shows no changes needed.
Final Answer:
No changes. Terraform state matches configuration. -> Option C
Quick Check:
Matching config and state = no changes [OK]
Hint: Plan shows no changes if config matches imported state [OK]
Common Mistakes:
Expecting terraform plan to create or delete after import
Confusing import with apply
Ignoring configuration mismatch
4. You ran terraform import aws_db_instance.db1 db-1234 but terraform plan shows the instance will be destroyed and recreated. What is the most likely cause?
medium
A. The Terraform configuration does not match the imported resource attributes
B. The import command was run with wrong resource ID
C. Terraform state file is corrupted
D. Terraform version is outdated
Solution
Step 1: Analyze import and plan mismatch
If plan wants to destroy and recreate, it means config differs from imported resource state.
Step 2: Confirm configuration matches resource
Mismatch in attributes causes Terraform to think resource needs replacement.
Final Answer:
The Terraform configuration does not match the imported resource attributes -> Option A
Quick Check:
Config mismatch causes resource replacement plan [OK]
Hint: Mismatch between config and imported resource causes replacement plan [OK]
Common Mistakes:
Assuming import ID error always causes plan changes
Blaming Terraform version without checking config
Ignoring attribute differences
5. You want to import multiple existing AWS security groups into Terraform. Which approach ensures correct import and verification?
hard
A. Run terraform import for each security group, then run terraform plan to verify state matches configuration
B. Run terraform apply directly to create new security groups
C. Delete existing security groups and recreate with Terraform
D. Edit the Terraform state file manually to add security groups
Solution
Step 1: Import each existing security group
Use terraform import with correct resource address and IDs for each group.
Step 2: Verify with terraform plan
Run terraform plan to check if imported state matches configuration and no unexpected changes occur.
Final Answer:
Run terraform import for each security group, then run terraform plan to verify state matches configuration -> Option A
Quick Check:
Import each resource, then verify with plan [OK]
Hint: Import individually and verify with plan to avoid surprises [OK]
Common Mistakes:
Skipping plan after import
Trying to create duplicates with apply
Manually editing state file causing errors
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.