Configuring Providers - Terraform by HashiCorp (2023)

Providers are responsible in Terraform for managing the lifecycleof a resource: create,read, update, delete.

Most providers require some sort of configuration to provideauthentication information, endpoint URLs, etc. Where explicit configurationis required, a provider block is used within the configuration asillustrated in the following sections.

By default, resources are matched with provider configurations by matchingthe start of the resource name. For example, a resource of typevsphere_virtual_machine is associated with a provider called vsphere.

This page assumes you're familiar with theconfiguration syntaxalready.

» Example

A provider configuration looks like the following:

provider "aws" { access_key = "foo" secret_key = "bar" region = "us-east-1"}

» Description

A provider block represents a configuration for the provider named in itsheader. For example, provider "aws" above is a configuration for theaws provider.

Within the block body (between { }) is configuration for the provider.The configuration is dependent on the type, and is documentedfor each provider.

The arguments alias and version, if present, are special argumentshandled by Terraform Core for their respective features described above. Allother arguments are defined by the provider itself.

A provider block may be omitted if its body would be empty. Using a resourcein configuration implicitly creates an empty provider configuration for itunless a provider block is explicitly provided.

(Video) How to Write a Modern Terraform Provider: Tools and Patterns

» Initialization

Each time a new provider is added to configuration -- either explicitly viaa provider block or by adding a resource from that provider -- it's necessaryto initialize that provider before use. Initialization downloads and installsthe provider's plugin and prepares it to be used.

Provider initialization is one of the actions of terraform init. Runningthis command will download and initialize any providers that are not alreadyinitialized.

For more information, seethe terraform init command.

» Provider Versions

Providers are released on a separate rhythm from Terraform itself, and thushave their own version numbers. For production use, it is recommended toconstrain the acceptable provider versions via configuration, to ensure thatnew versions with breaking changes will not be automatically installed byterraform init in future.

When terraform init is run without provider version constraints, itprints a suggested version constraint string for each provider:

The following providers do not have any version constraints in configuration,so the latest version was installed.To prevent automatic upgrades to new major versions that may contain breakingchanges, it is recommended to add version = "..." constraints to thecorresponding provider blocks in configuration, with the constraint stringssuggested below.* version = "~> 1.0"

To constrain the provider version as suggested, add a version argument tothe provider configuration block:

provider "aws" { version = "~> 1.0" access_key = "foo" secret_key = "bar" region = "us-east-1"}

This special argument applies to all providers.terraform providers can be used toview the specified version constraints for all providers used in thecurrent configuration.

The version attribute value may either be a single explicit version ora version constraint expression. Constraint expressions use the followingsyntax to specify a range of versions that are acceptable:

(Video) Terraform Providers

  • >= 1.2.0: version 1.2.0 or newer
  • <= 1.2.0: version 1.2.0 or older
  • ~> 1.2.0: any non-beta version >= 1.2.0 and < 1.3.0, e.g. 1.2.X
  • ~> 1.2: any non-beta version >= 1.2.0 and < 2.0.0, e.g. 1.X.Y
  • >= 1.0.0, <= 2.0.0: any version between 1.0.0 and 2.0.0 inclusive

When terraform init is re-run with providers already installed, it willuse an already-installed provider that meets the constraints in preferenceto downloading a new version. To upgrade to the latest acceptable versionof each provider, run terraform init -upgrade. This command also upgradesto the latest versions of all Terraform modules.

» Multiple Provider Instances

You can define multiple configurations for the same provider in order to supportmultiple regions, multiple hosts, etc. The primary use case for this isusing multiple cloud regions. Other use-cases include targeting multipleDocker hosts, multiple Consul hosts, etc.

To include multiple configurations for a given provider, include multipleprovider blocks with the same provider name, but set the alias field to aninstance name to use for each additional instance. For example:

# The default provider configurationprovider "aws" { # ...}# Additional provider configuration for west coast regionprovider "aws" { alias = "west" region = "us-west-2"}

A provider block with out alias set is known as the default providerconfiguration. When alias is set, it creates an additional providerconfiguration. For providers that have no required configuration arguments, theimplied empty configuration is also considered to be a default providerconfiguration.

Resources are normally associated with the default provider configurationinferred from the resource type name. For example, a resource of typeaws_instance uses the default (un-aliased) aws provider configurationunless otherwise stated.

The provider argument within any resource or data block overrides thisdefault behavior and allows an additional provider configuration to beselected using its alias:

resource "aws_instance" "foo" { provider = "aws.west" # ...}

The value of the provider argument is always the provider name and analias separated by a period, such as "aws.west" above.

Provider configurations may also be passed from a parent module into achild module, as described inProviders within Modules.

(Video) Terraform for Beginners 2023 - #03 - How to use Terraform providers

» Interpolation

Provider configurations may use interpolation syntaxto allow dynamic configuration:

provider "aws" { region = "${var.aws_region}"}

Interpolation is supported only for the per-provider configuration arguments.It is not supported for the special alias and version arguments.

Although in principle it is possible to use any interpolation expression withina provider configuration argument, providers must be configurable to performalmost all operations within Terraform, and so it is not possible to useexpressions whose value cannot be known until after configuration is applied,such as the id of a resource.

It is always valid to use input variablesand data sources whose configurationsdo not in turn depend on as-yet-unknown values. Local valuesmay also be used, but currently may cause errors when running terraform destroy.

» Third-party Plugins

At present Terraform can automatically install only the providers distributedby HashiCorp. Third-party providers can be manually installed by placingtheir plugin executables in one of the following locations depending on thehost operating system:

  • On Windows, in the sub-path terraform.d/plugins beneath your user's"Application Data" directory.
  • On all other systems, in the sub-path .terraform.d/plugins in youruser's home directory.

terraform init will search this directory for additional plugins duringplugin initialization.

The naming scheme for provider plugins is terraform-provider-NAME_vX.Y.Z,and Terraform uses the name to understand the name and version of a particularprovider binary. Third-party plugins will often be distributed with anappropriate filename already set in the distribution archive so that it canbe extracted directly into the plugin directory described above.

» Provider Plugin Cache

By default, terraform init downloads plugins into a subdirectory of theworking directory so that each working directory is self-contained. As aconsequence, if you have multiple configurations that use the same providerthen a separate copy of its plugin will be downloaded for each configuration.

Given that provider plugins can be quite large (on the order of hundreds ofmegabytes), this default behavior can be inconvenient for those with slowor metered Internet connections. Therefore Terraform optionally allows theuse of a local directory as a shared plugin cache, which then allows eachdistinct plugin binary to be downloaded only once.

(Video) Best Practices Using Honeycomb and Terraform Provider With Hashicorp

To enable the plugin cache, use the plugin_cache_dir setting inthe CLI configuration file.For example:

# (Note that the CLI configuration file is _not_ the same as the .tf files# used to configure infrastructure.)plugin_cache_dir = "$HOME/.terraform.d/plugin-cache"

This directory must already exist before Terraform will cache plugins;Terraform will not create the directory itself.

Please note that on Windows it is necessary to use forward slash separators(/) rather than the conventional backslash (\) since the configurationfile parser considers a backslash to begin an escape sequence.

Setting this in the configuration file is the recommended approach for apersistent setting. Alternatively, the TF_PLUGIN_CACHE_DIR environmentvariable can be used to enable caching or to override an existing cachedirectory within a particular shell session:

export TF_PLUGIN_CACHE_DIR="$HOME/.terraform.d/plugin-cache"

When a plugin cache directory is enabled, the terraform init command willstill access the plugin distribution server to obtain metadata about whichplugins are available, but once a suitable version has been selected it willfirst check to see if the selected plugin is already available in the cachedirectory. If so, the already-downloaded plugin binary will be used.

If the selected plugin is not already in the cache, it will be downloadedinto the cache first and then copied from there into the correct locationunder your current working directory.

When possible, Terraform will use hardlinks or symlinks to avoid storinga separate copy of a cached plugin in multiple directories. At present, thisis not supported on Windows and instead a copy is always created.

The plugin cache directory must not be the third-party plugin directoryor any other directory Terraform searches for pre-installed plugins, sincethe cache management logic conflicts with the normal plugin discovery logicwhen operating on the same directory.

(Video) Building Terraform Providers with Dynamic Resource Types

Please note that Terraform will never itself delete a plugin from theplugin cache once it's been placed there. Over time, as plugins are upgraded,the cache directory may grow to contain several unused versions which must bemanually deleted.


How do you use providers in Terraform? ›

Provider Installation
  1. Terraform Cloud and Terraform Enterprise install providers as part of every run.
  2. Terraform CLI finds and installs providers when initializing a working directory. It can automatically download providers from a Terraform registry, or load them from a local mirror or cache.

How do I specify a provider version in Terraform? ›

You can use the following formats to specify a range of versions:
  1. >= 1.0. 0 - Versions greater than or equal to the 1.0. ...
  2. <= 1.0. 0 - Versions lesser than or equal to 1.0. ...
  3. > = 1.0. ...
  4. ~> 1.0. 0 - Any non-beta version greater than or equal to 1.0. ...
  5. ~> 1.1 - Any non beta version greater than equal to 1.1. 0 and lesser than 2.0.

How do I specify a provider in Terraform module? ›

Provider configurations can be defined only in a root Terraform module. Providers can be passed down to descendent modules in two ways: either implicitly through inheritance, or explicitly via the providers argument within a module block.

How do you initialize any provider in Terraform? ›

  1. Initialize Terraform Configuration.
  2. Create a Terraform Plan.
  3. Apply Terraform Configuration.
  4. Customize Terraform Configuration with Variables.
  5. Output Data from Terraform.
  6. Manage Terraform Versions.
  7. Lock and Upgrade Provider Versions.
  8. Target Resources.

Can we have 2 providers in Terraform? ›

We can't write two or more providers with the same name i.e. two AWS providers. If there's any such need the terraform has provided a way to do that which is to use alias argument. Note: A provider block without an alias argument is the default configuration for that provider.

How many ways you can configure provider versions? ›

There are two ways for you to manage provider versions in your configuration.

Is provider configuration mandatory in Terraform? ›

A provider configuration block is required in every Terraform configuration.

How do I manually install Terraform provider? ›

Download And Manually Install the Terraform Binary. Download the appropriate Terraform binary package for the provided lab server VM (Linux 64-bit) using the wget command. Unzip the downloaded zip file. Place the unzipped Terraform binary in the path of the VM operating system so the binary is accessible system-wide.

How many types of providers are there in Terraform? ›

Terraform officially supports around 130 providers.

What is the difference between Terraform provider and module? ›

Every supported service or infrastructure platform has a provider that defines which resources are available and performs API calls to manage those resources. Modules are reusable Terraform configurations that can be called and configured by other configurations.

What is the difference between provider and provisioner in Terraform? ›

Provider development teams often prioritize features based on interest, so opening an issue is a way to record your interest in the feature. Provisioners are used to execute scripts on a local or remote machine as part of resource creation or destruction.

Where does Terraform store providers? ›

If no acceptable versions are installed and the plugin is one of the providers distributed by HashiCorp, Terraform downloads the newest acceptable version from the Terraform Registry and saves it in a subdirectory under . terraform/providers/ .

How do you initialize any provider? ›

Simply add a constructor in your provider : class StepInfo extends ChangeNotifier { StepInfo() { this. addToList = new VaccStep(); } [...] } Save this answer.

How do you create a Terraform configuration? ›

  1. Install Terraform. You should have version 12 (at minimum) installed for this lab.
  2. Install the Turbot Terraform Provider. The Terraform Turbot provider is available via the Hashicorp provider registry.
  3. Set up your Turbot Credentials.
  4. Install the aws-s3 mod.

How do I run Terraform provider locally? ›

Running Terraform Plan Locally
  1. Enter your AWS SSO credentials. Get your AWS SSO credentials as detailed here, choose option 1 and paste the credentials into the terminal window you are working from. ...
  2. Install Terraform. ...
  3. Run Terraform plan.

Who maintains Terraform providers? ›

Terraform providers are published and maintained by a variety of sources, including HashiCorp, HashiCorp Technology Partners, and the Terraform community. The Registry uses tiers and badges to denote the source of a provider.

What is the difference between Terraform provider and Ansible? ›

Terraform is a provisioning tool. Ansible is a configuration management tool. It follows a declarative Infrastructure as a Code approach. It follows both declarative & procedural approach.

What is the purpose of providers in Terraform? ›

Terraform uses providers to provision resources, which describe one or more infrastructure objects like virtual networks and compute instances. Each provider on the Terraform Registry has documentation detailing available resources and their configuration options.

What language is Terraform written in? ›

Image of What language is Terraform written in?
Go is a statically typed, compiled high-level programming language designed at Google by Robert Griesemer, Rob Pike, and Ken Thompson. It is syntactically similar to C, but with memory safety, garbage collection, structural typing, and CSP-style concurrency.

How do you write a Terraform script? ›

Terraform: Create Scripts and State Files with Resource Discovery
  1. Create state files for existing resources in the Console, and then add those resources to a Terraform setup.
  2. Duplicate your existing infrastructure in a new tenancy or region.
  3. Detect state drift for updated resources.
Mar 15, 2023

What happens when a Terraform plan is executed? ›

The terraform plan command creates an execution plan, which lets you preview the changes that Terraform plans to make to your infrastructure. By default, when Terraform creates a plan it: Reads the current state of any already-existing remote objects to make sure that the Terraform state is up-to-date.

How many providers does Terraform support? ›

HashiCorp Terraform now supports more than 3,000 integrations with more than 250 partners, including Amazon Web Services (AWS), Microsoft Azure, Google Cloud, Confluent, Datadog, MongoDB, Palo Alto Networks, ServiceNow, and Zscaler.

Can multiple Terraform providers be used within a single Terraform configuration file? ›

Yes, you can use multiple providers in one tf file. To use same provider with different settings (e.g. different credentials) you can use alias attribute: You can optionally define multiple configurations for the same provider, and select which one to use on a per-resource or per-module basis.

What is the rate limit for Terraform provider? ›

API Rate Limiting

By default, requests to the Terraform Cloud API from a single user or IP address are limited to 30 requests per second to prevent abuse or hogging of resources.

Which provider is required for Google Terraform? ›

By default, Terraform will always import resources using the google provider. To import resources with google-beta , you need to explicitly specify a provider with the -provider flag, similarly to if you were using a provider alias.

What are the two CLI configuration files in Terraform? ›

CLI Configuration File (. terraformrc or terraform. rc)
  • On Windows, the file must be named terraform. rc and placed in the relevant user's %APPDATA% directory. ...
  • On all other systems, the file must be named . terraformrc (note the leading period) and placed directly in the home directory of the relevant user.

What are the benefits of providers in Terraform? ›

Terraform can store local variables, including passwords and cloud tokens on Terraform registry in encrypted form. Furthermore, the configuration files of Terraform define the infrastructure resources to be managed. Besides, it can create an applicable plan, alongside executing and managing it continuously.

What is the difference between Terraform provider and Kubernetes operator? ›

Terraform - what's the difference? Both Kubernetes and Terraform are open-source projects in the DevOps space. While Kubernetes is an orchestration tool for managing containers, Terraform lets you define your infrastructure as code, whether your applications run as containers or a giant monolith.

What are the two main components of Terraform? ›

Terraform lets you define and manage your entire infrastructure via configuration files and version control. It accomplishes this by using the two main components of Terraform architecture: Core and Providers.

Can a Terraform module have multiple sources? ›

You are correct that each module block can have only one source address. However, you can have multiple module blocks that all refer to the same source address, which declares multiple instances of the same module.

Can I call a module from another module in Terraform? ›

We can call a Terraform module from other modules. Calling a module from another module lets you include the child module's resources into the codebase. Modules can also be called multiple times within the same configuration or in separate configurations, allowing resource configurations to be packaged and reused.

What is a local provider in Terraform? ›

The Local provider is used to manage local resources, such as files. Use the navigation to the left to read about the available resources. Note. Terraform primarily deals with remote resources which are able to outlive a single Terraform run, and so local resources can sometimes violate its assumptions.

What is difference between configuring and provisioning? ›

Provisioning: In IT, provisioning is the process of creating infrastructure and making it available to end users. Configuration: It is the process of configuring the provisioned IT infrastructure resources. For example, installing and configuring a database on a server or configuring network and firewall settings.

What is the difference between Terraform plan and Terraform apply? ›

Plan lets you preview any changes before you apply them. Apply executes the changes defined by your Terraform configuration to create, update, or destroy resources.

How do I call API from provider? ›

Handling api requests with Flutter Provider
  1. Install the package. Run the command to get the package.
  2. import the package in to your file.
  3. import 'package:provider/provider. dart'; This is my data model to get the data from post api of jsonplaceholder. ...
  4. void main() { runApp( ...
  5. class MyApp extends StatelessWidget { @override.

What is the difference between BLoC and provider? ›

Provider is a simple and flexible solution that uses the InheritedWidget to manage the state of an app. BLoC is a more complex but powerful solution that uses reactive programming and streams to manage the state of an app.

What is the best way to initialize variable? ›

The way of initializing a variable is very similar to the use of PARAMETER attribute. More precisely, do the following to initial a variable with the value of an expression: add an equal sign (=) to the right of a variable name. to the right of the equal sign, write an expression.

What is Terraform configuration? ›

A Terraform configuration is a complete document in the Terraform language that tells Terraform how to manage a given collection of infrastructure. A configuration can consist of multiple files and directories.

What is HashiCorp configuration language? ›

HashiCorp Configuration Language (HCL) is a unique configuration language. It was designed to be used with HashiCorp tools, notably Terraform, but HCL has expanded as a more general configuration language. It's visually similar to JSON with additional data structures and capabilities built-in.

What is the difference between Terraform init and plan? ›

Init – this is where you initialize your code to download the requirements mentioned in your code. Plan – this is where you review changes and choose whether to simply accept them. Apply – this is where you accept changes and apply them against real infrastructure.

How to configure Azure provider in Terraform? ›

  1. Configure your environment. Azure subscription: If you don't have an Azure subscription, create a free account before you begin.
  2. Open Cloud Shell. ...
  3. Install latest version of Terraform in Azure Cloud Shell. ...
  4. Verify the default Azure subscription. ...
  5. Authenticate Terraform to Azure.
Mar 19, 2023

Can you use Terraform without Internet? ›

Unless your configuration only uses APIs on your local network, terraform plan is always an online operation.

How do I manually run Terraform? ›

The usual way to run Terraform is to first switch to the directory containing the . tf files for your root module (for example, using the cd command), so that Terraform will find those files automatically without any extra arguments.

What is provider and what is their role in Terraform? ›

Providers are the plugins that Terraform uses to manage those resources. Every supported service or infrastructure platform has a provider that defines which resources are available and performs API calls to manage those resources.

Does Terraform require a provider? ›

Terraform relies on plugins called "providers" to interact with remote systems. Terraform configurations must declare which providers they require, so that Terraform can install and use them.

How many Terraform providers are there? ›

HashiCorp Terraform ecosystem passes 3,000 providers with over 250 partners. Get started in minutes with our productsA fully managed platform for Terraform, Vault, Consul, and more.

What is the difference between Terraform core and provider? ›

Terraform has several Provisioners built-in, while Providers are discovered dynamically as needed (See Discovery below). Terraform Core provides a high-level framework that abstracts away the details of plugin discovery and RPC communication so developers do not need to manage either.

Where do Terraform providers install? ›

How to get terraform to recognize third party provider. Third-party plugins can be manually installed into the user plugins directory, located at %APPDATA%\terraform. d\plugins on Windows and ~/. terraform.

Is it possible to configure aws with Terraform? ›

By creating a custom AWS CloudFormation resource for Terraform, you can control your on-premises and public cloud resources programmatically. You can access that resource directly through the CloudFormation console, or through the AWS Service Catalog, which gives you an extra layer of governance and control.

What programming language does Terraform provider use? ›

Go is currently the only programming language supported by HashiCorp for building Terraform providers.


1. From Terraform Configuration to a Deployed Cluster in One Click Using HashiCorp Terraform and Vault
2. HashiCorp Live: Using the HashiCorp Cloud Provider for Terraform
3. Creating a Terraform Provider for Just About Anything
4. Understanding the GitHub Provider for Terraform
5. Terraform explained in 15 mins | Terraform Tutorial for Beginners
(TechWorld with Nana)
6. HashiCorp Terraform MongoDB Atlas Provider | Demo


Top Articles
Latest Posts
Article information

Author: Geoffrey Lueilwitz

Last Updated: 10/07/2023

Views: 5941

Rating: 5 / 5 (60 voted)

Reviews: 83% of readers found this page helpful

Author information

Name: Geoffrey Lueilwitz

Birthday: 1997-03-23

Address: 74183 Thomas Course, Port Micheal, OK 55446-1529

Phone: +13408645881558

Job: Global Representative

Hobby: Sailing, Vehicle restoration, Rowing, Ghost hunting, Scrapbooking, Rugby, Board sports

Introduction: My name is Geoffrey Lueilwitz, I am a zealous, encouraging, sparkling, enchanting, graceful, faithful, nice person who loves writing and wants to share my knowledge and understanding with you.