Terraform客户端库是否必须用Go编写 无Go客户端如何开发新Provider
Terraform Provider开发相关问题解答
1. Terraform客户端库是否始终需要使用Go语言编写?
Terraform Core确实是Go语言编写的静态编译二进制文件,官方提供的插件开发工具链(包括Terraform Plugin Framework和旧版SDKv2)都是基于Go生态构建的,也是生产级Provider开发的首选方案,但这并非强制要求:
Terraform Core和插件之间通过gRPC协议完成通信,只要实现了对应版本的插件gRPC接口,理论上可以使用任意支持gRPC的编程语言开发插件。不过非Go语言开发的插件缺少官方工具链支持,需要自行处理插件生命周期管理、协议兼容、状态序列化等大量底层逻辑,落地成本极高,目前行业内几乎没有生产级非Go Provider的落地案例。
2. 若要为某一目标API创建全新的Terraform Provider,而该目标API暂无对应的Go客户端库,应当如何处理?
可以根据场景选择以下几种处理方案:
- 优先选择自行开发目标API的Go客户端库:你可以按照API的接口规范,手动封装或者借助Go生态的OpenAPI/Swagger代码生成工具自动生成客户端代码,将客户端逻辑和Provider逻辑解耦,后续维护性和扩展性都更好。
- 轻量场景可以直接在Provider代码中封装API调用:如果目标API的接口数量少、逻辑非常简单,可以跳过独立客户端库的封装,直接在Provider的资源CRUD方法中通过Go标准库的
net/http包构造请求、处理响应即可。 - 临时非生产场景可以基于官方
ExternalProvider桥接:如果不需要生产级稳定性,也可以使用官方的External Provider,通过执行本地任意语言编写的脚本调用目标API,无需编写Go代码即可快速实现简单的资源管理能力,但该方案的状态管理、错误处理能力都远弱于原生Provider。
内容的提问来源于stack exchange,提问作者Randy Shu
相关产品推荐
相关产品推荐

