We’re pleased to announce the release of the Terraform Plugin SDK, a standalone Go module for developing Terraform providers.
Terraform providers are the crucial component that allow Terraform to represent almost any infrastructure type or service API as a resource in a simple, declarative configuration language. They are central to the day-to-day experience of using Terraform.
With the release of Terraform 0.10, Terraform providers were split from the Terraform Core codebase, and are since versioned separately. This change unlocked the potential for a thriving ecosystem of Terraform providers: the core providers maintained by HashiCorp, and the large number of high-quality third-party providers developed by our partners and the open-source community.
We want to maintain the excellent practitioner experience that Terraform is known for, while making provider development easier and safer.
Until now, the Plugin SDK was part of the Terraform Core codebase. Developers writing Terraform providers needed to import Terraform Core (https://github.com/hashicorp/terraform) as a library, and make use of an implicit SDK living mainly in the helper/
directory. Splitting the Plugin SDK out of the Core codebase, like the providers in 0.10, allows us to give it more meaningful versions, and iterate more quickly on features and bug fixes.
While the critical types and interfaces for developing providers are well documented in the code, there is a high barrier to entry in determining which parts of Core pertain to the Terraform CLI, and which are available for developing providers. Additionally, importing Terraform Core pulls in a large number of Go dependencies that are unnecessary for developing Terraform providers.
The Terraform Plugin SDK extracts this implicit SDK from Terraform Core into a standalone Go module. Terraform providers no longer need to import Terraform Core, and should import the Terraform Plugin SDK instead, whose API surface is explicitly available for Terraform provider functionality. We hope this change lowers the barrier to entry for creating Terraform providers.
Terraform Plugin SDK v1.0.0 is designed for maximum compatibility with existing providers importing Terraform Core v0.12. The SDK is versioned separately from Core. Improvements to the SDK will start from this baseline, following a Semantic Versioning scheme compatible with Go modules. The informal SDK within the Core repository is now deprecated, and will be removed in a future version.
The interface between the Terraform Plugin SDK and Terraform Core is a gRPC wire protocol described in a single protobuf file. For more technical details, please see the plugin-protocol documentation. Currently, providers are the only type of plugin supported by the Plugin SDK.
If you are a Terraform provider developer, we recommend that you switch from Terraform Core to the Terraform Plugin SDK. The Terraform team has created a migrator CLI tool to make this a simple process.
For a step-by-step guide, please see our documentation: https://www.terraform.io/docs/extend/plugin-sdk.html
How one technologist’s Terraform certification journey helped him refresh his career as a practitioner after being a CTO at a small firm.
Terraform Cloud Operator for Kubernetes adds more Day 2 operations. Users can now start runs using workspace resource annotations.
The newest enhancements to HashiCorp Terraform Cloud’s run task feature empower users to seamlessly expand their use of essential third-party integrations.