0Pricing
Terraform Infrastructure as Code · Урок

Создание пользовательских провайдеров

Расширьте Terraform за пределы существующих интеграций: разберитесь в работе провайдеров и создайте собственный провайдер с помощью Terraform Plugin Framework.

«Создание пользовательских провайдеров» — бесплатный урок Terraform Infrastructure as Code на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Terraform Infrastructure as Code, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Terraform Infrastructure as Code содержит 4 уроков всего.

Когда существующих провайдеров недостаточно

Реестр охватывает большинство платформ, но предприятия часто используют внутренние API, для которых нет провайдера. Пользовательский провайдер позволяет Terraform управлять такими ресурсами в рамках того же жизненного цикла plan/apply.

Как работают провайдеры

Провайдер — это отдельный двоичный подключаемый модуль, который Terraform запускает и с которым взаимодействует через gRPC. Подключаемый модуль преобразует операции CRUD Terraform в вызовы API целевой системы.

Фреймворк подключаемых модулей

Современный Terraform Plugin Framework от HashiCorp (Go) — рекомендуемый способ создания провайдеров, заменяющий более старый SDKv2. Провайдеры пишутся на Go.

import (
  "github.com/hashicorp/terraform-plugin-framework/provider"
)

Определение провайдера

Тип провайдера объявляет своё имя, а также предлагаемые им ресурсы и источники данных.

type widgetProvider struct{}

func (p *widgetProvider) Metadata(_ context.Context, _ provider.MetadataRequest, resp *provider.MetadataResponse) {
  resp.TypeName = "widget"
}

Схема ресурса

Каждый ресурс объявляет схему атрибутов с типами и метаданными. Именно это пользователи задают в HCL.

resp.Schema = schema.Schema{
  Attributes: map[string]schema.Attribute{
    "name": schema.StringAttribute{Required: true},
    "id":   schema.StringAttribute{Computed: true},
  },
}

Реализация CRUD

Ресурс реализует Create, Read, Update и Delete. Каждый метод вызывает ваш API и записывает результат обратно в состояние Terraform.

func (r *widgetResource) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) {
  // call API, then save state
}

Read поддерживает актуальность состояния

Метод Read обновляет состояние на основе реального API. Если удалённый ресурс исчез, удалите его из состояния, чтобы Terraform запланировал его повторное создание.

Приёмочное тестирование

Провайдеры используют приёмочные тесты, которые выполняют настоящие циклы plan/apply в тестовом окружении. Их запуск регулируется переменной окружения, поэтому они не выполняются случайно.

TF_ACC=1 go test ./... -v

Локальная переадресация для разработки

Чтобы протестировать провайдер до публикации, используйте переопределение для разработки в конфигурации CLI, чтобы Terraform загрузил локальный двоичный файл вместо скачивания его из реестра.

provider_installation {
  dev_overrides {
    "acme/widget" = "/home/dev/go/bin"
  }
  direct {}
}

Публикация провайдера

Опубликуйте провайдер в реестре: создайте тег для выпуска и подпишите двоичные файлы ключом GPG. После этого потребители объявляют его в required_providers.

terraform {
  required_providers {
    widget = {
      source  = "acme/widget"
      version = "~> 1.0"
    }
  }
}

Что учитывать при сопровождении

Провайдер — это долгосрочное обязательство: необходимо поддерживать изменения API, совместимость версий и документацию. Для разовых задач источник данных external или скрипт может быть проще полноценного провайдера.

Быстрая проверка

Проверьте свои знания пользовательских провайдеров.

Итоги: расширение Terraform

Вы научились создавать пользовательские провайдеры:

  • Провайдеры — это подключаемые модули Go, взаимодействующие с ядром через gRPC.
  • Plugin Framework определяет схемы и методы CRUD.
  • Переопределения для разработки позволяют тестировать локально, а приёмочные тесты проверяют поведение.
  • Для публикации нужны теги и подписанные двоичные файлы.

Часто задаваемые вопросы

Урок «Создание пользовательских провайдеров» бесплатный?

Да — полный текст урока «Создание пользовательских провайдеров» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Terraform Infrastructure as Code, подпишись на CoddyKit PRO. Курс Terraform Infrastructure as Code содержит 4 уроков всего.

Чему я научусь в уроке «Создание пользовательских провайдеров»?

Расширьте Terraform за пределы существующих интеграций: разберитесь в работе провайдеров и создайте собственный провайдер с помощью Terraform Plugin Framework. Ты практикуешь Terraform Infrastructure as Code с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Terraform Infrastructure as Code?

Предыдущий опыт не требуется. Terraform Infrastructure as Code на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Создание пользовательских провайдеров»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Terraform Infrastructure as Code?

Да. Каждый урок Terraform Infrastructure as Code включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Шаблоны мультиоблачной и гибридной инфраструктуры
  2. Политики Sentinel для управления
  3. Terraform Cloud и Enterprise
  4. Создание пользовательских провайдеров
← Назад к Terraform Infrastructure as Code