📖 Scenario: You have an existing AWS S3 bucket created outside Terraform. You want to manage it using Terraform without recreating it.
🎯 Goal: Learn how to write Terraform configuration for an existing AWS S3 bucket and import it into Terraform state using the terraform import command.
📋 What You'll Learn
Create a Terraform configuration file defining an AWS S3 bucket resource with the exact bucket name.
Set a variable for the bucket name.
Use the terraform import command to import the existing bucket into Terraform state.
Verify the imported resource is managed by Terraform.
💡 Why This Matters
🌍 Real World
Often, cloud resources are created manually or by other tools. Importing them into Terraform lets you manage them as code without recreating.
💼 Career
Knowing how to import existing infrastructure is essential for cloud engineers and DevOps professionals to maintain infrastructure as code.
Progress0 / 4 steps
1
Create Terraform configuration for the S3 bucket
Create a file named main.tf and write a Terraform resource block for an AWS S3 bucket named exactly my-existing-bucket. Use the resource name aws_s3_bucket.existing_bucket.
Terraform
Hint
Use the resource block with type aws_s3_bucket and name existing_bucket. Set the bucket attribute to "my-existing-bucket".
2
Add a variable for the bucket name
Create a variable named bucket_name in a file named variables.tf with type string and default value "my-existing-bucket".
Terraform
Hint
Define a variable block with name bucket_name, type string, and default "my-existing-bucket". Use var.bucket_name in the resource bucket attribute.
3
Import the existing S3 bucket into Terraform state
Run the command terraform import aws_s3_bucket.existing_bucket my-existing-bucket in your terminal to import the existing bucket into Terraform state.
Terraform
Hint
Use the terraform import command with the resource address aws_s3_bucket.existing_bucket and the bucket name my-existing-bucket.
4
Verify the imported resource in Terraform state
Add the command terraform state list to verify that aws_s3_bucket.existing_bucket is now managed by Terraform.
Terraform
Hint
Use terraform state list to see all resources Terraform manages. Confirm aws_s3_bucket.existing_bucket is listed.
Practice
(1/5)
1. What is the main purpose of the terraform import command?
easy
A. To connect existing cloud resources to Terraform management
B. To create new resources in the cloud
C. To delete resources managed by Terraform
D. To update Terraform version
Solution
Step 1: Understand the command's role
The terraform import command is used to bring existing resources under Terraform's control without recreating them.
Step 2: Differentiate from other commands
Unlike commands that create or delete resources, import only connects existing ones to Terraform state.
Final Answer:
To connect existing cloud resources to Terraform management -> Option A
Quick Check:
Import = Connect existing resources [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 S3 bucket named my-bucket into Terraform resource aws_s3_bucket.example?
easy
A. terraform import my-bucket aws_s3_bucket.example
B. terraform import aws_s3_bucket.example my-bucket
C. terraform import aws_s3_bucket.example aws_s3_bucket.my-bucket
D. terraform import example aws_s3_bucket.my-bucket
Solution
Step 1: Identify correct command order
The syntax is terraform import <resource_address> <resource_id>. Here, resource address is aws_s3_bucket.example and ID is my-bucket.
Step 2: Match options to syntax
terraform import aws_s3_bucket.example my-bucket matches the correct order: resource address first, then resource ID.
Final Answer:
terraform import aws_s3_bucket.example my-bucket -> Option B
3. Given this Terraform import command: terraform import aws_instance.web i-1234567890abcdef0 What will Terraform do after running this command?
medium
A. Create a new AWS instance with ID i-1234567890abcdef0
B. Delete the AWS instance i-1234567890abcdef0
C. Add the existing AWS instance i-1234567890abcdef0 to Terraform state under aws_instance.web
D. Update the AWS instance i-1234567890abcdef0 with Terraform configuration
Solution
Step 1: Understand import effect on state
The import command adds an existing resource to Terraform's state file without creating or deleting it.
Step 2: Clarify what happens to the resource
The resource remains unchanged in the cloud; Terraform just tracks it as aws_instance.web.
Final Answer:
Add the existing AWS instance i-1234567890abcdef0 to Terraform state under aws_instance.web -> Option C
Quick Check:
Import adds resource to state, no creation or deletion [OK]
Hint: Import updates state, not cloud resources [OK]
Common Mistakes:
Thinking import creates or deletes resources
Assuming import applies configuration changes
Confusing import with terraform apply
4. You ran terraform import aws_s3_bucket.example my-bucket but got an error: Resource aws_s3_bucket.example not found in configuration. What is the likely cause?
medium
A. The import command syntax is incorrect
B. The bucket my-bucket does not exist in AWS
C. Terraform version is outdated
D. The resource aws_s3_bucket.example is missing in Terraform files
Solution
Step 1: Analyze error message
The error says the resource address is not found in configuration, meaning Terraform files lack aws_s3_bucket.example.
Step 2: Confirm resource presence
Before import, Terraform must know the resource block to map the imported resource correctly.
Final Answer:
The resource aws_s3_bucket.example is missing in Terraform files -> Option D
Quick Check:
Resource must exist in config before import [OK]
Hint: Define resource in config before importing [OK]
Common Mistakes:
Ignoring missing resource block
Assuming import creates resource block
Blaming AWS resource existence first
5. You imported an existing AWS security group with terraform import aws_security_group.sg sg-0a1b2c3d4e5f6g7h8. After import, your Terraform configuration does not match the actual security group rules. What should you do next?
hard
A. Manually update your Terraform configuration to match the imported resource
B. Run terraform apply immediately to fix the resource
C. Delete the imported resource from state and re-import
D. Nothing, Terraform will auto-sync configuration
Solution
Step 1: Understand import limitations
Import adds the resource to state but does not update Terraform files to reflect actual settings.
Step 2: Align configuration with reality
You must manually edit Terraform configuration to match the imported resource's current rules to avoid unwanted changes on apply.
Final Answer:
Manually update your Terraform configuration to match the imported resource -> Option A
Quick Check:
Update config after import to match resource [OK]
Hint: Edit config to match imported resource before apply [OK]
Common Mistakes:
Expecting terraform apply to fix config automatically
Deleting and re-importing unnecessarily
Ignoring config mismatch risks
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.