Создание ресурса

Тема дорожной карты · Terraform

Написание кастомных ресурсов Terraform означает реализацию схемы resource и CRUD lifecycle-функций внутри провайдера Terraform с помощью HashiCorp Go SDK или нового terraform-plugin-framework, чтобы авторы HCL могли управлять любым API-объектом так же, как нативными ресурсами AWS, Azure, GCP или Kubernetes. Каждый кастомный ресурс Terraform объявляет схему атрибутов с типами, признаками обязательности и вычисляемости, затем сопоставляет функции Create, Read, Update и Delete с соответствующими REST или gRPC API-вызовами, обеспечивая детерминированное поведение terraform apply, terraform plan и terraform destroy. Функция Read является наиболее критичной: она согласовывает актуальный ответ API провайдера с файлом состояния Terraform, обеспечивая точное обнаружение дрейфа и корректный diff при terraform plan в случае внеполосных изменений. Написание кастомных ресурсов Terraform также требует обработки timeouts, поддержки import через terraform import и валидаторов customdiff, чтобы ограничения на этапе планирования предотвращали попадание некорректных конфигураций в terraform apply. Тестирование кастомных ресурсов с помощью приёмочных тестов terraform-plugin-testing и Terratest гарантирует корректное поведение ресурса в циклах создания, обновления и удаления до публикации провайдера в Terraform Registry или распространения внутренним потребителям платформы.

Как это работает

Создание ресурса — написание своего Terraform-провайдера на Go через Terraform Plugin Framework (современный, с 2022) или старый SDK v2. Провайдер реализует Schema, Configure, CRUD-методы (Create, Read, Update, Delete) на каждый ресурс. Публикуется в Terraform Registry (публично) или хостится приватно. Тестируется acceptance-тестами против реального или mock-API.

Когда применять

Свой провайдер — только когда (а) у целевой системы нет существующего Terraform-провайдера, (б) поддержка инфры через Terraform реально лучше другого инструмента (Helm chart, кастомный CLI, Pulumi). Для внутренних микросервисов часто проще конфигурация через Helm/Kustomize, чем провайдер. Кастомный провайдер — реальный софт с реальной стоимостью поддержки.

Типичные ошибки

Ловушки Создание ресурса: пишут провайдер, когда хватило бы Kubernetes-оператора или простого CLI; не обрабатывают Read корректно (drift-detection ломается); нет версионирования (каждый релиз — пересборка latest); пропуск acceptance-тестов (тонкие баги едут к юзерам провайдера).

Связанные понятия

Полезные ресурсы