0Pricing
Terraform Infrastructure as Code · 课时

构建自定义提供程序

了解提供程序的工作方式,并使用 Terraform Plugin Framework 编写自定义提供程序,从而扩展 Terraform 的现有集成能力。

构建自定义提供程序 是 CoddyKit 上的免费 Terraform Infrastructure as Code 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Terraform Infrastructure as Code 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Terraform Infrastructure as Code 课程共包含 4 节课。

现有提供程序无法满足需求时

注册表覆盖了大多数平台,但企业经常运行没有提供程序支持的内部 API。自定义提供程序可以让 Terraform 使用相同的计划/apply 生命周期管理这些资源。

提供程序的工作方式

提供程序是一个独立的插件二进制文件,Terraform 会启动它,并通过 gRPC 与其通信。插件会将 Terraform 的 CRUD 操作转换为针对目标系统的 API 调用。

插件框架

HashiCorp 的现代 Terraform Plugin Framework(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 计划重新创建它。

验收测试

提供程序使用验收测试,在测试环境中运行真实的计划/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 与核心通信的插件。
  • 插件框架定义架构和 CRUD 方法。
  • 开发覆盖支持本地测试;验收测试用于验证行为。
  • 发布需要版本标签和经过签名的二进制文件。

常见问题解答

「构建自定义提供程序」课时是免费的吗?

是的 — 「构建自定义提供程序」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Terraform Infrastructure as Code 课程的其余内容,请升级到 CoddyKit PRO。 Terraform Infrastructure as Code 课程共包含 4 节课。

「构建自定义提供程序」这节课中我会学到什么?

了解提供程序的工作方式,并使用 Terraform Plugin Framework 编写自定义提供程序,从而扩展 Terraform 的现有集成能力。 你通过在浏览器中直接运行的动手代码来练习 Terraform Infrastructure as Code,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Terraform Infrastructure as Code 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Terraform Infrastructure as Code 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 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