Bird
Raised Fist0
Terraformcloud~10 mins

Provider caching and mirrors 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 - Provider caching and mirrors
Terraform Init Starts
Check Provider Source
Is Mirror Configured?
NoDownload from Original Source
Yes
Redirect to Mirror URL
Download Provider
Cache Provider Locally
Use Cached Provider for Terraform Run
Terraform Run Continues
Terraform checks if a mirror is configured for a provider source. If yes, it downloads from the mirror and caches it locally for faster future use.
Execution Sample
Terraform
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.0"
    }
  }
  provider_installation {
    filesystem_mirror {
      path    = "/terraform-mirror"
      include = ["hashicorp/aws"]
    }
    direct {
      exclude = ["hashicorp/aws"]
    }
  }
}
This Terraform configuration sets up a local filesystem mirror for the AWS provider and uses direct download for others.
Process Table
StepActionProvider SourceMirror Configured?Download LocationCache Status
1Terraform init startshashicorp/awsYesRedirect to /terraform-mirrorNo
2Check local cachehashicorp/awsYesLocal cache checkNo
3Download providerhashicorp/awsYesFrom /terraform-mirrorNo
4Cache provider locallyhashicorp/awsYesCached at /terraform-cacheYes
5Use cached providerhashicorp/awsYesFrom /terraform-cacheYes
6Terraform run continueshashicorp/awsYesUsing cached providerYes
7Check another providercustom/providerNoDownload from original sourceNo
8Download providercustom/providerNoFrom original sourceNo
9Cache provider locallycustom/providerNoCached at /terraform-cacheYes
10Use cached providercustom/providerNoFrom /terraform-cacheYes
11Terraform run continuescustom/providerNoUsing cached providerYes
💡 Terraform finishes initialization using cached providers or downloads if not cached.
Status Tracker
VariableStartAfter Step 3After Step 4After Step 5Final
cache_status_awsNoNoYesYesYes
cache_status_customNoNoNoYesYes
Key Moments - 3 Insights
Why does Terraform redirect to a mirror URL instead of the original provider source?
Terraform redirects to the mirror URL when a mirror is configured for that provider source, as shown in execution_table step 1, to speed up downloads and reduce external calls.
What happens if a provider is not included in the mirror configuration?
If a provider is not included in the mirror configuration, Terraform downloads it directly from the original source, as seen in execution_table steps 7 and 8.
How does caching improve Terraform runs?
Caching stores downloaded providers locally (execution_table step 4), so subsequent runs use the cached version (step 5), making initialization faster and offline-capable.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, at which step does Terraform cache the AWS provider locally?
AStep 4
BStep 5
CStep 3
DStep 6
💡 Hint
Check the 'Cache provider locally' action for AWS provider in execution_table.
According to variable_tracker, what is the cache status of the custom provider after step 5?
ANo
BYes
CUnknown
DNot applicable
💡 Hint
Look at cache_status_custom column after step 5 in variable_tracker.
If the mirror configuration is removed, how would the download location for the AWS provider change in the execution_table?
AIt would fail to download
BIt would remain the same as /terraform-mirror
CIt would change to direct download from original source
DIt would download from cache only
💡 Hint
Refer to execution_table steps 1 and 7 for mirror vs no mirror download locations.
Concept Snapshot
Terraform Provider Caching & Mirrors:
- Configure mirrors to redirect provider downloads.
- Terraform downloads from mirror if configured.
- Providers are cached locally after download.
- Cached providers speed up future runs.
- Providers not in mirror download directly.
- Use 'provider_installation' block to set mirrors.
Full Transcript
This visual execution shows how Terraform handles provider caching and mirrors during initialization. Terraform first checks if a mirror is configured for a provider source. If yes, it redirects the download to the mirror location. The provider is then downloaded and cached locally. Subsequent Terraform runs use the cached provider to speed up initialization. Providers not included in the mirror configuration are downloaded directly from their original sources and cached similarly. This process improves efficiency and reliability of Terraform runs.

Practice

(1/5)
1. What is the main purpose of provider caching in Terraform?
easy
A. To encrypt provider plugins for security
B. To store provider plugins locally and speed up Terraform runs
C. To delete unused providers automatically
D. To force Terraform to always download providers from the internet

Solution

  1. Step 1: Understand provider caching concept

    Provider caching means saving provider plugins on your local machine so Terraform doesn't need to download them every time.
  2. Step 2: Identify the benefit of caching

    This local storage speeds up Terraform runs by avoiding repeated downloads.
  3. Final Answer:

    To store provider plugins locally and speed up Terraform runs -> Option B
  4. Quick Check:

    Provider caching = local storage for speed [OK]
Hint: Caching means saving locally to avoid repeated downloads [OK]
Common Mistakes:
  • Thinking caching deletes providers
  • Confusing caching with encryption
  • Assuming caching forces downloads
2. Which block is used in Terraform configuration to specify a local directory for provider caching?
easy
A. direct
B. cache_location
C. filesystem_mirror
D. provider_cache

Solution

  1. Step 1: Recall Terraform provider mirror blocks

    Terraform uses filesystem_mirror blocks to define local directories for caching providers.
  2. Step 2: Confirm correct block name

    The direct block is for direct downloads, not caching. Other options are invalid.
  3. Final Answer:

    filesystem_mirror -> Option C
  4. Quick Check:

    Local cache directory = filesystem_mirror [OK]
Hint: Filesystem mirror means local cache folder [OK]
Common Mistakes:
  • Confusing direct with caching block
  • Using non-existent block names
  • Assuming provider_cache is valid
3. Given this Terraform CLI configuration snippet:
provider_installation {
  filesystem_mirror {
    path    = "/cache/providers"
  }
  direct {
    exclude = ["hashicorp/aws"]
  }
}

What happens when Terraform needs the hashicorp/aws provider?
medium
A. Terraform downloads hashicorp/aws directly from the internet
B. Terraform uses the cached version from /cache/providers
C. Terraform throws an error because hashicorp/aws is excluded
D. Terraform ignores the provider and continues without it

Solution

  1. Step 1: Analyze the filesystem_mirror and direct blocks

    The filesystem_mirror caches providers locally except those excluded in direct.
  2. Step 2: Understand the exclude setting

    The direct block excludes hashicorp/aws, so Terraform will not use the cache for it.
  3. Step 3: Determine provider source

    Terraform downloads hashicorp/aws directly from the internet.
  4. Final Answer:

    Terraform downloads hashicorp/aws directly from the internet -> Option A
  5. Quick Check:

    Exclude means direct download [OK]
Hint: Exclude in direct means download from internet [OK]
Common Mistakes:
  • Assuming excluded providers use cache
  • Thinking exclusion causes errors
  • Believing providers are ignored if excluded
4. You configured a filesystem_mirror path but Terraform still downloads providers from the internet. What is the most likely cause?
medium
A. The filesystem_mirror path is incorrect or inaccessible
B. Terraform does not support provider caching
C. You forgot to install Terraform CLI
D. The provider version is not specified in configuration

Solution

  1. Step 1: Check filesystem_mirror path validity

    If the path is wrong or Terraform cannot access it, caching won't work and providers download from the internet.
  2. Step 2: Rule out other causes

    Terraform supports caching, CLI must be installed, and version absence doesn't force downloads if cache is valid.
  3. Final Answer:

    The filesystem_mirror path is incorrect or inaccessible -> Option A
  4. Quick Check:

    Invalid cache path causes downloads [OK]
Hint: Check cache path accessibility first [OK]
Common Mistakes:
  • Assuming Terraform lacks caching support
  • Ignoring filesystem permissions
  • Blaming missing provider version
5. You want to speed up Terraform runs in a team by caching providers locally but still allow direct downloads for some custom providers. Which configuration correctly achieves this?
hard
A.
provider_installation {
  direct {
    include = ["customcorp/custom"]
  }
  filesystem_mirror {
    path = "/team/cache"
  }
}
B.
provider_installation {
  direct {
    path = "/team/cache"
  }
  filesystem_mirror {
    exclude = ["customcorp/custom"]
  }
}
C.
provider_installation {
  filesystem_mirror {
    exclude = ["customcorp/custom"]
  }
  direct {
    path = "/team/cache"
  }
}
D.
provider_installation {
  filesystem_mirror {
    path = "/team/cache"
  }
  direct {
    exclude = ["customcorp/custom"]
  }
}

Solution

  1. Step 1: Understand correct block usage

    filesystem_mirror defines the local cache path; direct defines providers to download directly.
  2. Step 2: Check correct syntax and order

    provider_installation {
      filesystem_mirror {
        path = "/team/cache"
      }
      direct {
        exclude = ["customcorp/custom"]
      }
    }
    correctly sets filesystem_mirror with path and direct with exclude list for custom providers.
  3. Step 3: Identify incorrect options

    Other options misuse keys or swap path and exclude incorrectly.
  4. Final Answer:

    provider_installation {
      filesystem_mirror {
        path = "/team/cache"
      }
      direct {
        exclude = ["customcorp/custom"]
      }
    }
    -> Option D
  5. Quick Check:

    Cache path in filesystem_mirror, exclude in direct [OK]
Hint: Cache path in filesystem_mirror, exclude in direct block [OK]
Common Mistakes:
  • Swapping path and exclude keys
  • Putting exclude in filesystem_mirror
  • Misplacing blocks order