Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Remote state data source for cross-project
📖 Scenario: You are managing infrastructure for two separate projects in Terraform. Project A creates a network, and Project B needs to use the network's ID from Project A to create a virtual machine inside that network.
🎯 Goal: Learn how to use Terraform's remote state data source to access outputs from one project in another project.
📋 What You'll Learn
Create a Terraform backend configuration for Project A's state
Output the network ID from Project A
Configure Project B to read Project A's remote state
Use the network ID from Project A in Project B's resource
💡 Why This Matters
🌍 Real World
Many organizations split infrastructure into multiple Terraform projects for separation of concerns. Sharing outputs via remote state allows projects to connect resources safely.
💼 Career
Understanding remote state data sources is essential for Terraform users working in teams or managing complex infrastructure across multiple projects.
Progress0 / 4 steps
1
Create Project A's network and output
In Project A's Terraform configuration, create a resource called aws_vpc named main_network with cidr_block set to "10.0.0.0/16". Then create an output called network_id that outputs aws_vpc.main_network.id.
Terraform
Hint
Use resource "aws_vpc" "main_network" to create the network and output "network_id" to expose its ID.
2
Configure backend for Project A state storage
Add a terraform block with a backend configuration using s3 backend. Set bucket to "project-a-terraform-state", key to "network/terraform.tfstate", and region to "us-east-1".
Terraform
Hint
Use the terraform block with backend "s3" and set the bucket, key, and region exactly as given.
3
Configure Project B to read Project A's remote state
In Project B's Terraform configuration, create a data block of type terraform_remote_state named project_a. Set the backend to s3 with bucket as "project-a-terraform-state", key as "network/terraform.tfstate", and region as "us-east-1".
Terraform
Hint
Use data "terraform_remote_state" "project_a" with backend = "s3" and the correct config values.
4
Use Project A's network ID in Project B resource
Create a resource aws_instance named vm in Project B. Set ami to "ami-12345678", instance_type to "t2.micro", and subnet_id to data.terraform_remote_state.project_a.outputs.network_id.
Terraform
Hint
Create resource "aws_instance" "vm" and set subnet_id to the remote state output.
Practice
(1/5)
1. What is the main purpose of using a terraform_remote_state data source in Terraform?
easy
A. To store Terraform state files locally
B. To access outputs from another Terraform project's state
C. To create new resources in a different cloud provider
D. To encrypt Terraform state files automatically
Solution
Step 1: Understand remote state data source role
The terraform_remote_state data source allows one Terraform configuration to read outputs from another configuration's state file.
Step 2: Differentiate from other options
It does not store state locally, create new resources, or encrypt state automatically; it only reads existing state outputs.
Final Answer:
To access outputs from another Terraform project's state -> Option B
Quick Check:
Remote state data source = Access outputs [OK]
Hint: Remote state data source reads outputs from other projects [OK]
Common Mistakes:
Confusing remote state with local state storage
Thinking it creates resources instead of reading state
Assuming it encrypts state automatically
2. Which of the following is the correct syntax to define a terraform_remote_state data source for a backend stored in an S3 bucket named my-terraform-state?
easy
A. data "terraform_remote_state" "example" { backend = "local" config = { path = "my-terraform-state" } }
When running terraform plan, you get an error: Failed to load remote state. What is the most likely cause?
medium
A. Incorrect or missing permissions to access the Azure storage account
B. The backend type should be s3 instead of azurerm
C. The key parameter is not supported in azurerm backend
D. Terraform remote state data source cannot be used with Azure
Solution
Step 1: Verify backend and config correctness
The backend azurerm with given config keys is valid for Azure Blob Storage remote state.
Step 2: Identify common causes of load failure
Most common cause is missing or incorrect permissions to access the storage account or container.
Final Answer:
Incorrect or missing permissions to access the Azure storage account -> Option A
Quick Check:
Access permissions issue = Load failure [OK]
Hint: Check storage permissions if remote state load fails [OK]
Common Mistakes:
Assuming backend type is wrong when it is correct
Thinking key parameter is unsupported in azurerm backend
Believing remote state cannot be used with Azure
5. You manage two Terraform projects: network and app. The network project stores its state remotely in an S3 bucket with key network/terraform.tfstate. You want the app project to use the VPC ID output from network. Which configuration correctly sets up the remote state data source in app to access network outputs securely and follows best practices?
hard
A. data "terraform_remote_state" "network" {
backend = "s3"
config = {
bucket = "my-tf-state-bucket"
key = "network/terraform.tfstate"
region = "us-west-2"
}
}
B. data "terraform_remote_state" "network" {
backend = "s3"
config = {
bucket = "my-tf-state-bucket"
key = "app/terraform.tfstate"
region = "us-west-2"
}
}
C. data "terraform_remote_state" "network" {
backend = "local"
config = {
path = "../network/terraform.tfstate"
}
}