Bird
Raised Fist0
Terraformcloud~10 mins

Multiple provider configurations in Terraform - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

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
Process Flow - Multiple provider configurations
Define default provider
↓
Define additional provider with alias
↓
Use provider in resource with or without alias
↓
Terraform applies resources using specified providers
↓
Resources created in correct cloud accounts/regions
This flow shows how Terraform sets up multiple providers, assigns aliases, and uses them in resources to manage infrastructure across different accounts or regions.
Execution Sample
Terraform
provider "aws" {
  region = "us-east-1"
}

provider "aws" {
  alias  = "west"
  region = "us-west-2"
}

resource "aws_s3_bucket" "east_bucket" {
  bucket = "my-east-bucket"
}

resource "aws_s3_bucket" "west_bucket" {
  provider = aws.west
  bucket   = "my-west-bucket"
}
This Terraform code configures two AWS providers for different regions and creates S3 buckets in each region using the appropriate provider.
Process Table
StepActionProvider ConfiguredResource CreatedRegion Used
1Load default provideraws (default)Noneus-east-1
2Load aliased provideraws.westNoneus-west-2
3Create resource east_bucketaws (default)aws_s3_bucket.east_bucketus-east-1
4Create resource west_bucketaws.westaws_s3_bucket.west_bucketus-west-2
5Apply completeBoth providers usedBoth buckets createdus-east-1 and us-west-2
💡 All resources created using their specified providers; execution ends.
Status Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4Final
provider.aws.regionundefinedus-east-1us-east-1us-east-1us-east-1us-east-1
provider.aws.west.regionundefinedundefinedus-west-2us-west-2us-west-2us-west-2
resource.aws_s3_bucket.east_bucketundefinedundefinedundefinedcreatedcreatedcreated
resource.aws_s3_bucket.west_bucketundefinedundefinedundefinedundefinedcreatedcreated
Key Moments - 3 Insights
Why do we need to use an alias for the second provider?
Because Terraform needs a way to distinguish between multiple configurations of the same provider. The alias lets us tell Terraform which provider to use for each resource, as shown in steps 2 and 4 of the execution_table.
What happens if we don't specify the provider for a resource?
Terraform uses the default provider configuration. In the example, the east_bucket resource uses the default provider (step 3), so it is created in us-east-1.
Can we have more than two provider configurations?
Yes, you can define as many provider configurations with different aliases as needed, each with its own settings. Just assign the correct alias to resources to control where they are created.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, which provider is used to create the west_bucket resource?
Aaws (default)
Baws.west
CNo provider specified
Daws.east
💡 Hint
Check step 4 in the execution_table where the west_bucket resource is created.
At which step does Terraform configure the provider for the us-west-2 region?
AStep 2
BStep 1
CStep 3
DStep 4
💡 Hint
Look at the provider configuration steps in the execution_table.
If we remove the alias from the second provider, what will happen when creating west_bucket?
ATerraform will create west_bucket in us-east-1
BTerraform will create west_bucket in us-west-2
CTerraform will throw an error due to duplicate provider
DTerraform will ignore west_bucket resource
💡 Hint
Consider how Terraform distinguishes multiple provider configs; see key_moments about alias usage.
Concept Snapshot
Terraform Multiple Provider Configurations:
- Define default provider without alias.
- Define additional providers with unique aliases.
- Assign provider to resources using 'provider = provider.alias'.
- Enables managing resources across regions/accounts.
- Avoids conflicts by clear provider references.
Full Transcript
This lesson shows how Terraform handles multiple provider configurations. First, a default provider is defined for one region. Then, an additional provider with an alias is defined for another region. Resources specify which provider to use by referencing the alias or default. Terraform applies resources to the correct regions accordingly. Key points include the need for aliases to distinguish providers and how resources without a provider use the default. This allows managing infrastructure across multiple cloud regions or accounts in one Terraform project.

Practice

(1/5)
1. What is the main purpose of using multiple provider configurations in Terraform?
easy
A. To reduce the size of Terraform state files
B. To speed up Terraform plan execution
C. To manage resources in different cloud accounts or regions
D. To automatically backup Terraform configurations

Solution

  1. Step 1: Understand provider role

    Providers in Terraform define where resources are created, such as cloud accounts or regions.
  2. Step 2: Purpose of multiple providers

    Using multiple providers allows managing resources across different accounts or regions simultaneously.
  3. Final Answer:

    To manage resources in different cloud accounts or regions -> Option C
  4. Quick Check:

    Multiple providers = manage multiple accounts/regions [OK]
Hint: Multiple providers = multiple accounts or regions [OK]
Common Mistakes:
  • Thinking multiple providers speed up execution
  • Confusing providers with state file management
  • Assuming providers handle backups
2. Which Terraform syntax correctly defines a second AWS provider with an alias named east?
easy
A. provider "aws" { alias = "east" region = "us-east-1" }
B. provider "aws" { region = "us-east-1", alias = "east" }
C. provider "aws" { region = "us-east-1" } alias = "east"
D. provider "aws" alias = "east" { region = "us-east-1" }

Solution

  1. Step 1: Check provider block syntax

    The alias attribute must be inside the provider block, before or after region.
  2. Step 2: Validate provider "aws" { alias = "east" region = "us-east-1" }

    provider "aws" { alias = "east" region = "us-east-1" } correctly places alias = "east" inside the provider block with region.
  3. Final Answer:

    provider "aws" { alias = "east" region = "us-east-1" } -> Option A
  4. Quick Check:

    Alias inside provider block = correct syntax [OK]
Hint: Alias must be inside provider block braces [OK]
Common Mistakes:
  • Placing alias outside provider block
  • Using alias without quotes
  • Misordering block elements causing syntax errors
3. Given this Terraform snippet:
provider "aws" {
  region = "us-west-2"
}

provider "aws" {
  alias  = "east"
  region = "us-east-1"
}

resource "aws_s3_bucket" "bucket1" {
  bucket = "west-bucket"
}

resource "aws_s3_bucket" "bucket2" {
  provider = aws.east
  bucket   = "east-bucket"
}

Which region will bucket2 be created in?
medium
A. us-west-2
B. us-east-2
C. us-west-1
D. us-east-1

Solution

  1. Step 1: Identify provider for bucket2

    bucket2 uses provider = aws.east, which refers to the aliased provider with region us-east-1.
  2. Step 2: Confirm region of aliased provider

    The alias "east" is set with region = "us-east-1".
  3. Final Answer:

    us-east-1 -> Option D
  4. Quick Check:

    Aliased provider region = us-east-1 [OK]
Hint: Resource uses aliased provider region [OK]
Common Mistakes:
  • Assuming default provider region applies
  • Ignoring provider alias in resource
  • Confusing region names
4. What is wrong with this Terraform configuration snippet?
provider "aws" {
  region = "us-west-2"
}

provider "aws" {
  alias = "east"
  region = "us-east-1"
}

resource "aws_instance" "example" {
  provider = aws.east
  ami      = "ami-123456"
  instance_type = "t2.micro"
}

resource "aws_instance" "example2" {
  provider = aws.west
  ami      = "ami-654321"
  instance_type = "t2.micro"
}
medium
A. The provider alias 'east' is missing region
B. The alias 'west' is not defined for any provider
C. The resource 'example' is missing provider assignment
D. The provider block syntax is invalid

Solution

  1. Step 1: Check provider aliases defined

    Only alias 'east' is defined; no alias 'west' exists.
  2. Step 2: Identify usage of undefined alias

    Resource 'example2' uses provider = aws.west, which is undefined and causes an error.
  3. Final Answer:

    The alias 'west' is not defined for any provider -> Option B
  4. Quick Check:

    Undefined alias causes error [OK]
Hint: Check all provider aliases are defined before use [OK]
Common Mistakes:
  • Assuming default provider applies to aliased names
  • Missing alias attribute in provider block
  • Incorrect provider block syntax
5. You want to deploy resources to two AWS accounts: Account A in us-west-2 and Account B in us-east-1. You have two provider blocks with aliases west and east. How do you ensure that an S3 bucket resource is created in Account B using Terraform?
hard
A. Set provider = aws.east in the S3 bucket resource block
B. Set region = "us-east-1" inside the S3 bucket resource block
C. Use alias = "east" inside the S3 bucket resource block
D. Create a new provider block inside the S3 bucket resource

Solution

  1. Step 1: Understand provider alias usage

    To deploy to Account B, the resource must use the provider with alias 'east'.
  2. Step 2: Assign provider alias to resource

    Setting provider = aws.east in the resource block directs Terraform to use that provider configuration.
  3. Final Answer:

    Set provider = aws.east in the S3 bucket resource block -> Option A
  4. Quick Check:

    Resource provider = aliased provider [OK]
Hint: Assign provider alias in resource block to target account [OK]
Common Mistakes:
  • Trying to set region inside resource instead of provider
  • Using alias attribute inside resource block incorrectly
  • Defining provider block inside resource block