[EPIC] Expand Terraform support
- Dominant language
- Go
- Stars
- 569
- Forks
- 364
- Avg merge
- 2d 19h
- Merged PRs (30d)
- 136
Description
## Problem statement
Terraform is the most-requested IaC alternative in `azd`, and the existing in-core Terraform support provides a solid foundation. To take it further, with deeper feature coverage and a faster release cadence, we're considering a provisioning providers framework that lets Terraform live as a first-class extension. This unlocks community and partner ownership, so Terraform-specific improvements can ship independently of `azd` core releases.
This is the same approach we're taking with the extension framework across the board: `azd` provides the platform, and ecosystem partners provide the depth. The result is a better experience for Terraform users and a scalable model for supporting additional IaC providers over time.
## Vision
Expand Terraform support and consider what it could look like as the first provisioning extension built on `azd`'s provisioning providers framework shipped as a community-owned extension, installable via `azd extension install terraform`, with its own release cadence and feature depth. The core `azd` team maintains the provisioning providers framework; the Terraform community and partners own the Terraform-specific implementation. This becomes the playbook for other IaC providers (Pulumi, CDK, etc.) to follow.
## Who this helps
- **Terraform users** who use `azd` for the developer workflow (init, up, deploy) with Terraform as their IaC provider. They get the same quality experience as Bicep users, including proper plan/apply flows, state management, and variable handling, with improvements shipping on the extension's own release cadence.
- **Platform engineers** who standardize on `azd` for team workflows and want teams to choose Bicep or Terraform based on their infrastructure preferences, with both paths working equally well.
- **Community and partner contributors** who want to build and maintain the Terraform extension with a clear framework, SDK, and submission pipeline, without needing core team involvement for releases.
- **The `azd` core team**, who can focus engineering investment on Bicep and the framework while the community drives Terraform-specific depth.
## Goals (in scope)
- Spike on a **provisioning providers framework** in `azd` that allows IaC engines to be plugged in as extensions
- Ship **Terraform as the first provisioning extension** built on this framework, proving the model works
- Terraform extension supports core workflows: `azd up`, `azd provision`, `azd deploy` with Terraform plan/apply
- Clear ownership model: community and partners own the Terraform extension going forward
- Extension installable via standard extension commands (`azd extension install`)
## Non-goals (out of scope)
- Feature parity with Bicep in core `azd`; Terraform extension will have a focused initial scope, not everything Bicep does
- Owning ongoing Terraform improvements on the core team; the whole point is community ownership
- Supporting every Terraform feature on day one; the extension ships incrementally
- Building Pulumi, CDK, or other IaC extensions initially; Terraform is the proof point
## Success criteria
- [ ] Provisioning providers framework POC that allows us to evaluate this approach
## Dependencies
- **Extension Framework GA (Pillar 3)**: The Terraform extension must be built on the extension framework. This is a hard dependency: the provisioning providers framework is an application of the extension framework. Extension Framework API freeze in April gates this work.
- **Existing Terraform issues**: 16 sub-issues under #7465 represent known gaps. The extension needs to address the most critical ones to be viable.
- **Community/partner engagement**: Long-term success depends on finding owners outside the core team. This engagement needs to start early, even if the extension isn't fully community-owned yet.
| Month | Milestone |
|-------|-----------|
| **April–May** | **Provisioning providers framework.** Design and implement the framework that allows IaC engines to plug into `azd` as extensions. Coordinate with Extension Framework GA timeline (Pillar 3). Review existing Terraform gaps (#7465 sub-issues) to inform extension scope. |
| **June** | **Terraform extension prototype.** First provisioning extension running on the framework. Core workflows (`azd up`, `azd provision`) working with Terraform. Extension installable and documented. Community ownership decision (yes/no/defer) with fallback plan if no community interest. |
Contributor guide
Assessment
This issue has not been assessed yet.