Providers são plugins que permitem ao Terraform se comunicar com APIs externas: cloud providers (AWS, GCP, Azure), SaaS (GitHub, Datadog), ou até recursos locais. Cada provider expõe um conjunto de resources e data sources que podem ser usados nas configurações.

Configuração

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
    local = {
      source  = "hashicorp/local"
      version = "~> 2.0"
    }
  }
}
 
provider "aws" {
  region = "us-east-1"
}

O bloco terraform.required_providers declara a dependência; o bloco provider configura o comportamento (região, credenciais, etc.).

Providers comuns

ProviderUso
hashicorp/awsAmazon Web Services
hashicorp/googleGoogle Cloud Platform
hashicorp/azurermMicrosoft Azure
hashicorp/localArquivos e recursos locais
hashicorp/nullResources sem ação real (útil para scripts)
hashicorp/randomGeração de valores aleatórios
hashicorp/kubernetesClusters Kubernetes

Versionamento

O operador ~> (pessimistic constraint) permite apenas patches: ~> 5.0 aceita 5.x mas não 6.0. Sempre fixe versões de providers em produção.

Múltiplos providers do mesmo tipo

Use alias para configurar o mesmo provider com configurações diferentes (ex: múltiplas regiões AWS):

provider "aws" {
  alias  = "us_east"
  region = "us-east-1"
}
 
provider "aws" {
  alias  = "eu_west"
  region = "eu-west-1"
}
 
resource "aws_s3_bucket" "europe" {
  provider = aws.eu_west
  bucket   = "meu-bucket-europa"
}

Ver também: terraform-resources | terraform