linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Уроки
  • How it works
  • База знаний
  • Шпаргалка
  • Capstone
  • Собеседование
home/terraform/kb/Провайдеры/tf-provider-block

kb/providers ── Провайдеры ── beginner

Блок provider: кому Terraform будет звонить

Блок provider настраивает плагин: в какой регион AWS обращаться, какие endpoints использовать, какие credentials брать. Один такой блок на провайдера в большинстве случаев хватит.

view as markdown

Что такое provider в Terraform

Provider, это плагин-посредник между Terraform и облаком. AWS Provider знает, как разговаривать с AWS API. Google Cloud Provider, с GCP. Есть провайдеры для GitHub (управлять репозиториями), Cloudflare (DNS), даже для домашнего роутера.

Каждому провайдеру нужна конфигурация: куда обращаться, с какими ключами, в какой регион. Это и делает блок provider.

Минимальный пример

hcl
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.60"
    }
  }
}
provider "aws" {
  region = "us-east-1"
}

Тут два блока:

  • terraform { required_providers { ... } }, мета-блок. Говорит «нужен AWS-провайдер версии 5.60 или выше в рамках мажорной 5». Это читает terraform init, чтобы знать что качать. См. tf-init.
  • provider "aws", настройка скачанного плагина. Здесь, только регион.

AWS credentials в этом примере не указаны. Terraform возьмёт их из стандартных мест (env vars, ~/.aws/credentials). См. aws-provider.

Зачем нужен alias

Иногда одного провайдера мало. Классический случай. Нужно ресурсы в двух разных регионах AWS:

hcl
provider "aws" {
  region = "us-east-1"
}
provider "aws" {
  alias  = "europe"
  region = "eu-central-1"
}
# Ресурс в дефолтном регионе us-east-1
resource "aws_s3_bucket" "us" {
  bucket = "my-us-bucket"
}
# Ресурс в Европе, явная отсылка к alias
resource "aws_s3_bucket" "eu" {
  provider = aws.europe
  bucket   = "my-eu-bucket"
}

Один провайдер без alias, «дефолтный». Любой ресурс без указания provider = идёт в него. Все остальные, через aws.имя_alias'а.

default_tags, пишите так

AWS-провайдер умеет автоматически клеить теги на все ресурсы:

hcl
provider "aws" {
  region = "us-east-1"
  default_tags {
    tags = {
      Project     = "my-project"
      Environment = "dev"
      ManagedBy   = "terraform"
    }
  }
}

Теперь каждый созданный ресурс получит эти теги без вашего участия. Это спасает деньги (теги нужны для биллинг-аналитики), упрощает уборку (aws s3api list-buckets --query ... --tag-key Environment Value dev), и помогает FinOps.

Если у конкретного ресурса есть свой tags = {...}, они смержатся с default_tags. Свои перевесят default_tags при совпадении ключа.

Version constraints

В required_providers версию можно указать по-разному:

ЗаписьЧто значит
"5.60.0"Ровно 5.60.0, никаких отклонений.
"= 5.60.0"То же самое явно.
">= 5.60.0"Не ниже 5.60.0. Опасно, может потянуть несовместимую 6.x.
"~> 5.60"5.60.x, 5.61.x, ... Но не 6.x. Pessimistic, безопасный default.
"~> 5.60.0"Только 5.60.x. Очень строго.
">= 5.60, < 6.0"Эквивалент ~> 5.60, явно.

Стандарт в нормальных проектах, ~> X.Y. Это автоматические минорные обновления (баг-фиксы, новые ресурсы), но без рисков мажора. См. tf-version-constraints.

Подводные камни

  • Одинаковый provider "aws" {} дважды без alias, ошибка. Можно либо один без alias, либо несколько с разными alias.

  • required_providers обязателен. Если он отсутствует, Terraform не знает что качать в init. Раньше работало по умолчанию через hashicorp/aws, теперь это deprecated.

  • provider блок может быть пустым: provider "aws" {}, валидно, если все настройки берутся из env/файлов credentials.

  • Endpoints (см. localstack-provider) надо указывать осторожно, в проде они должны исчезнуть, иначе можете случайно отправить запрос в неправильный кластер.

  • Не коммитьте credentials в блок provider. Никогда не пишите access_key = "AKIA..." в HCL. Используйте env vars или роли IAM. Единственное исключение: захардкоженные "test" для LocalStack в учебных задачах.

§ команды

bash
terraform providers

Показывает дерево всех провайдеров, которые использует ваш проект: включая транзитивные из модулей.

bash
terraform providers lock -platform=linux_amd64 -platform=darwin_arm64

Перегенерировать lockfile для нескольких платформ: если ваша команда на разных OS.

§ см. также

  • tf-initterraform init: первая команда в любом проектеterraform init скачивает плагины-провайдеры (AWS, GCP и т.д.), создаёт файл с зафиксированными версиями (lockfile) и подготавливает рабочую директорию. Без этого ни plan, ни apply не запустятся.
  • aws-providerAWS Provider: настройки и где Terraform берёт ключиAWS-провайдер ищет credentials в нескольких местах подряд: env-переменные, ~/.aws/credentials, IAM-роль инстанса. Чаще всего достаточно `aws configure` локально или роль на EC2, больше ничего не настраивать.
  • localstack-providerLocalStack: учебный AWS, который живёт в DockerLocalStack эмулирует AWS API локально, в Docker-контейнере. Terraform думает что работает с настоящим AWS, но никаких реальных ресурсов не создаётся и денег не тратится. Идеально для учёбы и тестов.
  • tf-version-constraintsVersion constraints в Terraform: required_version и провайдерыrequired_version фиксирует, какие версии terraform запускают этот код. required_providers.version, то же для провайдеров. Pessimistic оператор ~> 5.60, стандарт, разрешает минорные апдейты, запрещает мажорные.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки