Terraform Cloud运行报az未在$PATH找到的Azure CLI错误排查
报错根因
- 你配置了
terraform cloud块后,Terraform默认会将plan、apply操作调度到Terraform Cloud托管的远程环境运行,代码根本不在你本地设备执行 - 你本地安装的Azure CLI、本地执行
az login拿到的登录态只存在于本地,不会同步到Terraform Cloud的远程运行环境 - Terraform Cloud默认的标准运行镜像没有预装Azure CLI,所以azurerm provider尝试调用Azure CLI完成认证时,直接抛出找不到
az可执行文件的错误 - 不需要尝试在Terraform Cloud运行环境里安装Azure CLI或者手动配置PATH,这是完全错误的解决方向
可行解决方案
二选一即可,优先选第一种。
方案1:服务主体+环境变量认证(官方推荐,适配远程运行场景)
这是Terraform Cloud对接Azure最稳定的方式,完全不依赖Azure CLI:
- 本地执行以下Azure CLI命令创建服务主体,授予订阅贡献者权限:
az ad sp create-for-rbac --name "terraform-cloud-sp" --role Contributor --scopes /subscriptions/替换为你的Azure订阅ID
命令执行完成后会返回JSON结果,记录其中的appId(客户端ID)、password(客户端密钥)、tenant(租户ID)三个值。
2. 打开Terraform Cloud中你配置的dev工作区,进入Variables配置页面,添加如下4个环境变量,所有变量都勾选Sensitive选项避免明文泄露:
ARM_CLIENT_ID:值为上一步拿到的appIdARM_CLIENT_SECRET:值为上一步拿到的passwordARM_TENANT_ID:值为上一步拿到的tenantARM_SUBSCRIPTION_ID:值为你的Azure订阅ID
- 现有Terraform代码不需要做任何修改,重新触发运行即可,azurerm provider会自动读取这些环境变量完成认证,不会再触发Azure CLI相关报错。
方案2:关闭远程执行,使用本地环境运行
如果你想直接复用本地已经配置好的Azure CLI和登录态,不需要在云端跑任务,可以直接修改versions.tf中的cloud块,添加本地执行模式配置:
terraform { cloud { organization = "myorg" workspaces { name = "dev" } # 新增这行,指定执行模式为本地 execution_mode = "local" } required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.10.0" } } required_version = ">= 1.2.3" }
修改完成后本地重新执行terraform init,后续所有plan、apply操作都会在你本地设备运行,直接调用本地安装的Azure CLI完成认证,不会再出现找不到az的问题。
避坑提示
- Terraform Cloud的标准运行环境是临时创建的,每次任务执行完就会销毁,即使你通过自定义脚本在运行时安装Azure CLI,下次运行还得重新装,而且本地的
az login登录态没法同步到云端,完全没必要走这条路 - 如果使用方案1的服务主体认证,后续如果需要操作更高权限的Azure资源,记得给对应的服务主体分配对应范围的权限即可,默认的Contributor权限足够覆盖你当前示例中创建资源组的需求
内容的提问来源于stack exchange,提问作者dcvl
相关产品推荐
相关产品推荐

