在 terraform 云中运行的 azure cli $Path 错误

dcv*_*cvl 6 terraform terraform-provider-azure terraform-cloud

第一次设置 terraform cloud 并收到此错误。不知道为什么在我的本地计算机上安装了 azure CLI 并设置了路径,但我认为与在 terraform 云平台中设置它有关。

Error: building AzureRM Client: please ensure you have installed Azure CLI version 2.0.79 or newer. Error parsing json result from the Azure CLI: launching Azure CLI: exec: "az": executable file not found in $PATH.
with provider["registry.terraform.io/hashicorp/azurerm"]
on versions.tf line 21, in provider "azurerm":

provider "azurerm" {
Run Code Online (Sandbox Code Playgroud)

我当前的tf代码

版本.tf

terraform {

  cloud {
    organization = "myorg"

    workspaces {
      name = "dev"
    }
  }

  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~>3.10.0"
    }
  }

  required_version = ">= 1.2.3"
}

provider "azurerm" {
  features {}
}
Run Code Online (Sandbox Code Playgroud)

变量.tf

variable "tenant_id" {
    description = "tenant id for azure subscription"
}
Run Code Online (Sandbox Code Playgroud)

主.tf

resource "azurerm_resource_group" "testrg" {
  name     = "test-rg"
  location = "Central US"
}
Run Code Online (Sandbox Code Playgroud)

没有做任何花哨的事情,但不确定如何克服 azure CLI 错误。我知道在 terraform 云平台中可以在哪里设置变量,但不知道在哪里为 azure cli 设置 $Path ,甚至不知道如何在 terraform 云中安装 azure cli。在我的本地计算机上,我使用 az login 登录具有足够订阅权限的帐户。

Mon*_*nic 10

我正在尝试将 kavya Saraboju 的答案“浓缩”到对我有帮助的最低限度,该答案在形式上是正确的。

如果错误消息与实际问题有任何关系,它似乎非常令人困惑。我必须在 Terraform Cloud 中设置环境变量ARM_CLIENT_IDARM_TENANT_IDARM_CLIENT_SECRET和。ARM_SUBSCRIPTION_ID转到 Terraform Cloud 的 Web 管理面板,选择您的工作区,单击“变量”并设置所有必需的值:

在此输入图像描述

请阅读此处如何获取这些变量的值。

我也是 Terraform 和 Azure 的初学者,但无论如何我希望这个答案能够帮助任何偶然发现这个问题的人。

而且,本教程中全面描述了我的解决方案。


kav*_*yaS 6

看起来,您正在尝试使用登录az login。这适用于本地 terraform 运行。 要在 terraform 云实例中进行身份验证,您可能需要使用 Terraform Cloud 工作区变量。

请确保完成以下步骤:

  1. 请检查您是否已创建服务主体。如果您使用的是 Azure 云(例如美国政府)。在第一步中,您需要配置 Azure CLI 以使用该云。

    $ az cloud set --name AzureUSGovernment
    
    Run Code Online (Sandbox Code Playgroud)

    然后使用 az login 登录并检查列出的订阅并进行设置。

    $ az login
    $ az account list
    $ az account set --subscription="SUBSCRIPTION_ID"
    
    Run Code Online (Sandbox Code Playgroud)

    现在,请尝试创建服务主体,该服务主体将有权实际管理上一步中设置的特定指定订阅中的资源。

    $ az ad sp create-for-rbac --role="Contributor" --scopes="/subscriptions/SUBSCRIPTION_ID"
    
    Run Code Online (Sandbox Code Playgroud)

    您可以在其中获取租户 idclientId等,稍后可以将其用作环境变量。本文档介绍如何使用 azure-cli 创建服务主体 | TerraformRegistry 将详细指导您

  2. 现在在 terraform cloudworkers 中,由于我们无法使用 az 登录,因此我们可以注销它并根据前面步骤中获得的值设置如下所示的环境变量。

    $ export ARM_CLIENT_ID="xxxxxxxxxx"
    $ export ARM_SUBSCRIPTION_ID="xxxxxxx"
    $ export ARM_TENANT_ID="xxxxxx"
    $ export ARM_CLIENT_SECRET="xxxxxxx"
    
    Run Code Online (Sandbox Code Playgroud)

    请参阅在 Terraform 中配置服务主体

  3. 然后您可以指定 Terraform 和 Provider 块

    terraform {
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "=3.0.0"
        }
      }
    }
    
    # Configure the Microsoft Azure Provider
    provider "azurerm" {
      features {}
    }
    
    Run Code Online (Sandbox Code Playgroud)

    然后尝试运行 terraform init >terraform planterraform apply 这可能可以进行身份​​验证并使 terraform 使用服务主体运行。

参考将 Azure Provider 与 Terraform Cloud 结合使用 - Terraform - HashiCorp 讨论

还要检查您是否有最新版本的 terraform,如果没有安装并尝试使用它。