📖 Scenario: You are managing cloud infrastructure using Terraform. You want to import existing cloud resources into your Terraform state to manage them as code. However, you need to understand the limitations and considerations when importing resources.
🎯 Goal: Build a Terraform configuration that demonstrates importing an existing resource with proper setup and considerations.
📋 What You'll Learn
Create a Terraform resource block for an AWS S3 bucket
Define a variable for the bucket name
Write the import command as a comment
Add a lifecycle block to ignore changes to the bucket's ACL
💡 Why This Matters
🌍 Real World
Importing existing cloud resources into Terraform is common when adopting infrastructure as code for resources created manually or by other tools.
💼 Career
Understanding import limitations and lifecycle management is essential for cloud engineers and DevOps professionals to maintain reliable infrastructure code.
Progress0 / 4 steps
1
Create a Terraform resource for an AWS S3 bucket
Create a Terraform resource block named aws_s3_bucket with the resource name example_bucket. Set the bucket attribute to the string my-existing-bucket.
Terraform
Hint
Use the resource block with type aws_s3_bucket and name example_bucket. Set the bucket attribute exactly as shown.
2
Add a variable for the bucket name
Add a Terraform variable named bucket_name of type string with a default value of my-existing-bucket. Then update the bucket attribute in the aws_s3_bucket.example_bucket resource to use this variable.
Terraform
Hint
Define a variable block with the name bucket_name. Use var.bucket_name in the resource.
3
Add the import command as a comment
Add a comment line at the end of the file with the exact Terraform import command to import the existing S3 bucket resource aws_s3_bucket.example_bucket using the bucket name variable var.bucket_name. The command should be: terraform import aws_s3_bucket.example_bucket my-existing-bucket.
Terraform
Hint
Add a comment with the exact import command shown.
4
Add lifecycle block to ignore ACL changes
Add a lifecycle block inside the aws_s3_bucket.example_bucket resource to ignore changes to the acl attribute by setting ignore_changes = ["acl"].
Terraform
Hint
Inside the resource block, add a lifecycle block with ignore_changes set to ["acl"].
Practice
(1/5)
1. What is the main purpose of the terraform import command?
easy
A. To delete resources from the cloud provider
B. To create new resources from scratch
C. To bring existing resources under Terraform management without recreating them
D. To update Terraform itself to the latest version
Solution
Step 1: Understand the role of terraform import
The terraform import command is used to take resources that already exist outside Terraform and bring them into Terraform's control without deleting or recreating them.
Step 2: Differentiate from other commands
Creating new resources is done with terraform apply, deleting is done with terraform destroy, and updating Terraform is unrelated to resource import.
Final Answer:
To bring existing resources under Terraform management without recreating them -> Option C
Quick Check:
terraform import = bring existing resources under control [OK]
Hint: Import means adopt existing resources, not create new ones [OK]
Common Mistakes:
Thinking import creates new resources
Confusing import with resource deletion
Assuming import updates Terraform version
2. Which of the following is required before running terraform import for a resource?
easy
A. The resource must be deleted first
B. The resource must be created by Terraform previously
C. Terraform must be initialized with terraform init after import
D. The resource configuration must exist in the Terraform files
Solution
Step 1: Check Terraform import requirements
Before importing, Terraform needs a matching resource block in the configuration files to map the imported resource to.
Step 2: Understand other options
The resource should not be deleted before import; terraform init is run before import, not after; and the resource does not need to be created by Terraform previously.
Final Answer:
The resource configuration must exist in the Terraform files -> Option D
Quick Check:
Config must exist before import [OK]
Hint: Write resource config first, then import [OK]
What happens if you run terraform import aws_s3_bucket.mybucket my-existing-bucket?
medium
A. Terraform imports the existing S3 bucket and manages it without changes
B. Terraform deletes the existing bucket and creates a new one
C. Terraform throws an error because the bucket name is missing
D. Terraform creates a duplicate bucket with a different name
Solution
Step 1: Match resource config and import command
The resource block matches the bucket name used in the import command, so Terraform will link the existing bucket to this resource.
Step 2: Understand import behavior
Import does not delete or recreate resources; it only brings them under Terraform management.
Final Answer:
Terraform imports the existing S3 bucket and manages it without changes -> Option A
Quick Check:
Import links existing resource without changes [OK]
Hint: Import links existing resource, no deletion [OK]
Common Mistakes:
Assuming import deletes or recreates resource
Confusing import with apply
Using wrong resource ID format
4. You run terraform import aws_instance.web i-1234567890abcdef0 but get an error saying the resource ID format is invalid. What is the most likely cause?
medium
A. Terraform was not initialized with terraform init
B. The resource ID does not match the expected format for the AWS provider
C. The resource configuration block is missing in Terraform files
D. The AWS instance does not exist in the cloud
Solution
Step 1: Check resource ID format
Terraform import requires the resource ID to match the provider's expected format exactly. An invalid format causes errors.
Step 2: Differentiate from other causes
Missing config causes different errors; uninitialized Terraform causes different errors; non-existent resource causes not found errors, not format errors.
Final Answer:
The resource ID does not match the expected format for the AWS provider -> Option B
Quick Check:
Invalid ID format causes import error [OK]
Hint: Check provider docs for correct ID format before import [OK]
Common Mistakes:
Ignoring ID format requirements
Assuming missing config causes format error
Skipping terraform init before import
5. You want to import multiple existing resources of the same type but with different IDs into Terraform. Which approach best handles this scenario?
hard
A. Write separate resource blocks with unique names and import each resource individually
B. Write one resource block and import all IDs at once using a comma-separated list
C. Use a single resource block with a list of IDs and import once
D. Import resources without any configuration blocks and Terraform will auto-discover them
Solution
Step 1: Understand Terraform resource uniqueness
Each resource block must have a unique name to represent a single resource instance in Terraform.
Step 2: Import multiple resources properly
To import multiple resources, create multiple resource blocks with unique names and import each resource ID separately.
Step 3: Eliminate incorrect options
Terraform does not support importing multiple IDs at once in one resource block or auto-discovery without config.
Final Answer:
Write separate resource blocks with unique names and import each resource individually -> Option A
Quick Check:
One resource block per resource, import individually [OK]
Hint: One resource block per resource, import separately [OK]
Common Mistakes:
Trying to import multiple IDs in one resource block
Assuming Terraform auto-discovers resources
Using comma-separated IDs in import command
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.