Terraform AzureRM 提供程序开发指南
开发环境准备
要开发 Terraform AzureRM 提供程序,需要准备以下基础环境:
核心工具要求
- Terraform 核心:建议使用 1.x 版本(0.12.x 及以上版本也兼容)
- Go 语言:需要 1.22.x 版本用于构建提供程序插件
Windows 开发者额外需求
Windows 平台开发者还需要安装:
- Git Bash:提供 Unix 风格的命令行环境
- GNU Make:确保将其 bin 目录添加到 PATH 环境变量中
安装建议:
- 安装 Git Bash 时,在"Adjusting your PATH environment"步骤选择"Use Git and optional Unix tools from Windows Command Prompt"
- 可通过 Chocolatey 包管理器一键安装:
choco install make golang terraform -y
Windows 常见问题解决:
- 行尾格式问题:执行
git config --global core.autocrlf false
- 长文件名问题:执行
git config --system core.longpaths true
开发环境搭建
项目克隆与初始化
- 创建工作目录结构:
mkdir -p $GOPATH/src/github.com/hashicorp
cd $GOPATH/src/github.com/hashicorp
- 克隆项目仓库:
git clone git@github.com:hashicorp/terraform-provider-azurerm
cd terraform-provider-azurerm
- 安装依赖工具:
make tools
构建与测试
- 编译提供程序:
make build
编译后的二进制文件将输出到 $GOPATH/bin/terraform-provider-azurerm
- 跨平台编译(示例为 Windows):
GOOS=windows GOARCH=amd64 make build
- 运行单元测试:
make test
- 运行验收测试(会实际创建 Azure 资源):
make acctests SERVICE='<服务名>' TESTARGS='-run=<测试名>' TESTTIMEOUT='60m'
其中:
<服务名>
对应azurerm/internal/services/
下的目录名<测试名>
可以是完整测试名或正则表达式
测试环境配置
运行验收测试前必须设置以下环境变量:
export ARM_CLIENT_ID="your-client-id"
export ARM_CLIENT_SECRET="your-client-secret"
export ARM_SUBSCRIPTION_ID="your-subscription-id"
export ARM_TENANT_ID="your-tenant-id"
export ARM_TEST_LOCATION="eastus" # 主要测试区域
export ARM_TEST_LOCATION_ALT="westus" # 次要测试区域
export ARM_TEST_LOCATION_ALT2="centralus" # 第三测试区域
注意:验收测试会实际创建 Azure 资源,可能产生费用。
本地开发使用
编译后的提供程序需要配置 Terraform 优先使用本地版本:
- 创建或编辑
~/.terraformrc
文件 - 添加以下内容(路径替换为你的实际路径):
provider_installation {
dev_overrides {
"hashicorp/azurerm" = "/path/to/your/go/bin"
}
direct {}
}
开发辅助工具
资源ID生成器
在服务包的 resourceids.go
文件中添加指令:
//go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=Server -id=/subscriptions/.../servers/Server1
执行 make generate
后会生成:
- 资源ID结构体和格式化器
- 资源ID解析器
- 资源ID验证器
- 对应的单元测试
文档脚手架生成
- 数据源文档:
make scaffold-website BRAND_NAME="Resource Group" RESOURCE_NAME="azurerm_resource_group" RESOURCE_TYPE="data"
- 资源文档:
make scaffold-website BRAND_NAME="Resource Group" RESOURCE_NAME="azurerm_resource_group" RESOURCE_TYPE="resource" RESOURCE_ID="..."
最佳实践建议
- 测试隔离:为每个测试创建独立的资源组,便于清理
- 并行测试:合理使用
t.Parallel()
提高测试效率 - 资源清理:确保测试包含完善的清理逻辑
- 环境管理:使用不同的服务主体进行开发和测试
- 日志调试:设置
TF_LOG=DEBUG
环境变量获取详细日志
通过以上配置和工具,开发者可以高效地进行 Terraform AzureRM 提供程序的开发和测试工作。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考