带有 azure CLI 的 Terraform - 错误构建帐户

Posted

技术标签:

【中文标题】带有 azure CLI 的 Terraform - 错误构建帐户【英文标题】:Terraform with azure CLI - error building account 【发布时间】:2020-06-03 08:39:34 【问题描述】:

使用提供程序块

provider "azurerm" 
  subscription_id = var.subscription_id
  version         = "=1.44"

成功登录后

az login

运行

terraform plan

我收到以下错误:

Error: Error building account: Error getting authenticated object ID: Error parsing json result from the Azure CLI: Error waiting for the Azure CLI: exit status 2

on main.tf line 21, in provider "azurerm":
21: provider "azurerm" 

更新:

如果我将提供程序块更改为:

provider "azurerm" 
 version = "~> 1.43"

并设置环境变量

ARM_USE_MSI=true
ARM_SUBSCRIPTION_ID=<...>
ARM_TENANT_ID=<...>
HTTP_PROXY=<...>
HTTPS_PROXY=<...>
http_proxy=<...>
https_proxy=<...>

在执行 terraform plan 之后,我收到以下错误:

与 169.254.169.254 的连接失败。没有路由到主机。

在我看来,服务端点 IP 被“硬编码”到 terraform 客户端中,这很奇怪。

【问题讨论】:

过时的 terrafrom\cli? Terraform v0.12.20 + provider.azurerm v1.44.0 + provider.random v2.2.1 azure-cli (2.0.33) 你在 VM 中使用 CLI 吗?您如何使用 CLI 登录?虚拟机身份或服务主体? @CharlesXu:与此同时,我发现删除 ARM_USE_MSI=true 可以解决我的问题。无论如何,感谢您的帮助! 对我来说,另一个 'az login' 有帮助 【参考方案1】:

即使我已经通过 az cli 登录,强制另一个:

az login

帮我解决了这个问题。

【讨论】:

【参考方案2】:

删除变量

ARM_USE_MSI=true

解决了我的问题。

此变量告诉 terraform 使用托管服务标识。请参阅docs。问题是,从那时起使用的 Azure 实例元数据服务端点(在上述 IP 上可用)只能从 VM 内访问,而我正在从桌面运行 terraform。

【讨论】:

也许你可以展示更多的东西。例如,它解决您的问题的原因。【参考方案3】:
az login --tenant TENANT_ID

使用租户 ID 解决

最初,我尝试使用“az login”登录,但收到您发布的类似错误。

【讨论】:

以上是关于带有 azure CLI 的 Terraform - 错误构建帐户的主要内容,如果未能解决你的问题,请参考以下文章

Terraform AZ CLI 本地执行命令限制

带有 graphql cli 的 Azure node.js 相对路径

如何将 Azure DevOps Extension for Azure CLI 与 Azure DevOps Server 一起使用?

terraform 模块依赖于 Azure

使用 Azure 市场的 Terraform

Terraform 学习总结—— 简单记录 Azure CN 上 Terraform Provider 配置的一个坑