📖 Scenario: You are managing cloud resources using Terraform. You have multiple existing cloud resources that were created outside Terraform. To manage them efficiently, you want to import these resources into Terraform state in bulk.This project will guide you step-by-step to create a Terraform configuration and a bulk import script to import multiple resources at once.
🎯 Goal: Build a Terraform configuration for multiple cloud resources and create a bulk import script that imports these resources into Terraform state efficiently.
📋 What You'll Learn
Create a Terraform configuration file with multiple resource blocks
Define a list variable with resource IDs to import
Write a shell script to loop over the resource IDs and import them into Terraform state
Add a Terraform output to confirm imported resources
💡 Why This Matters
🌍 Real World
Cloud engineers often need to manage existing cloud resources with Terraform. Bulk import strategies save time and reduce errors when bringing many resources under Terraform management.
💼 Career
Knowing how to bulk import resources into Terraform state is a valuable skill for cloud infrastructure automation and management roles.
Progress0 / 4 steps
1
Create Terraform configuration with multiple resources
Create a Terraform configuration file named main.tf that defines three aws_s3_bucket resources with the exact names bucket1, bucket2, and bucket3. Use the aws provider and set the region to us-east-1 in a provider block.
Terraform
Hint
Start by defining the AWS provider with region us-east-1. Then add three aws_s3_bucket resource blocks with the exact names bucket1, bucket2, and bucket3.
2
Define a list variable with bucket names to import
Add a Terraform variable named bucket_names of type list(string) with the exact values ["bucket1", "bucket2", "bucket3"] in a file named variables.tf.
Terraform
Hint
Define a variable block named bucket_names with type list(string) and set the default to the list of bucket names.
3
Write a shell script to bulk import buckets into Terraform state
Create a shell script named bulk_import.sh that loops over the list bucket_names and runs the Terraform import command for each bucket. Use the exact variable name bucket in the loop and import each bucket with the command terraform import aws_s3_bucket.${bucket} ${bucket}.
Terraform
Hint
Write a bash for loop iterating over bucket1, bucket2, bucket3 and run terraform import for each bucket using the variable bucket.
4
Add Terraform output to confirm imported buckets
Add a Terraform output named imported_buckets that outputs the list of bucket names from the variable bucket_names.
Terraform
Hint
Add an output block named imported_buckets that outputs the variable bucket_names.
Practice
(1/5)
1. What is the main purpose of using bulk import strategies in Terraform?
easy
A. To automatically generate Terraform code for new resources
B. To create new resources faster than usual
C. To delete multiple resources simultaneously
D. To efficiently bring many existing resources under Terraform management at once
Solution
Step 1: Understand Terraform import
Terraform import lets you bring existing cloud resources into Terraform state so you can manage them.
Step 2: Recognize bulk import purpose
Bulk import strategies help import many resources quickly instead of one by one.
Final Answer:
To efficiently bring many existing resources under Terraform management at once -> Option D
Quick Check:
Bulk import = manage many existing resources [OK]
Hint: Bulk import means importing many existing resources at once [OK]
Common Mistakes:
Thinking bulk import creates new resources
Confusing import with resource deletion
Assuming import auto-generates Terraform code
2. Which Terraform command is used to import a resource into the state file?
easy
A. terraform import
B. terraform plan
C. terraform init
D. terraform apply
Solution
Step 1: Recall Terraform commands
terraform apply creates or updates resources, terraform init initializes, terraform plan previews changes.
Step 2: Identify import command
terraform import is the command that brings existing resources into Terraform state.
Final Answer:
terraform import -> Option A
Quick Check:
Import command = terraform import [OK]
Hint: Import existing resources with 'terraform import' command [OK]
Common Mistakes:
Using terraform apply to import
Confusing init with import
Trying terraform plan to import
3. Given this script snippet to bulk import AWS EC2 instances:
for id in i-12345678 i-87654321; do terraform import aws_instance.example_$id $id; done
What will be the result after running this script?
medium
A. Terraform will create new instances instead of importing
B. Only the first instance will be imported, second will fail
C. Both instances will be imported with resource names aws_instance.example_i-12345678 and aws_instance.example_i-87654321
D. The script will cause a syntax error and not run
Solution
Step 1: Analyze the for loop
The loop iterates over two instance IDs: i-12345678 and i-87654321.
Step 2: Understand terraform import usage
Each iteration runs terraform import with resource name aws_instance.example_$id and the ID as argument, importing both instances.
Final Answer:
Both instances will be imported with resource names aws_instance.example_i-12345678 and aws_instance.example_i-87654321 -> Option C
Quick Check:
Loop imports both instances correctly [OK]
Hint: Loop imports each resource with unique name using ID [OK]
Common Mistakes:
Assuming only one import runs
Thinking terraform creates new instances
Believing script syntax is invalid
4. You wrote a bulk import script but get errors: "Error: Resource name must not contain '-'". What is the likely cause?
medium
A. Using resource names with dashes (-) which Terraform disallows
B. Missing terraform init before import
C. Incorrect AWS credentials causing import failure
Terraform resource names must use underscores (_) not dashes (-).
Step 2: Identify cause of error
The error says resource name must not contain '-', so using dashes in resource names causes this error.
Final Answer:
Using resource names with dashes (-) which Terraform disallows -> Option A
Quick Check:
Resource names cannot have '-' [OK]
Hint: Use underscores (_) in resource names, not dashes (-) [OK]
Common Mistakes:
Ignoring naming rules and using dashes
Assuming missing init causes this error
Blaming credentials for naming errors
5. You want to bulk import 100 existing Azure VMs into Terraform. Which approach best follows Terraform bulk import best practices?
hard
A. Run terraform import once with all VM IDs separated by commas
B. Write a script that loops over VM IDs, runs terraform import for each, and maintains matching Terraform config files
C. Manually import each VM one by one using terraform import command
D. Create new Terraform resources and delete existing VMs to sync state
Solution
Step 1: Understand bulk import best practice
Bulk import works best with automation scripts looping over resource IDs to import each resource.
Step 2: Match Terraform configuration
Terraform requires matching resource blocks in config files for imported resources to manage them properly.
Step 3: Evaluate options
Write a script that loops over VM IDs, runs terraform import for each, and maintains matching Terraform config files uses scripting and matching config, Run terraform import once with all VM IDs separated by commas is invalid syntax, Manually import each VM one by one using terraform import command is slow manual work, Create new Terraform resources and delete existing VMs to sync state deletes resources which is unsafe.
Final Answer:
Write a script that loops over VM IDs, runs terraform import for each, and maintains matching Terraform config files -> Option B
Quick Check:
Automate import with matching config files [OK]
Hint: Automate imports with scripts and matching config files [OK]
Common Mistakes:
Trying to import multiple IDs in one command
Manually importing many resources without automation
Deleting resources instead of importing
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.