You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:

  1. 本地执行以下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:值为上一步拿到的appId
  • ARM_CLIENT_SECRET:值为上一步拿到的password
  • ARM_TENANT_ID:值为上一步拿到的tenant
  • ARM_SUBSCRIPTION_ID:值为你的Azure订阅ID
  1. 现有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 10:42:22