我想使用环境变量配置两个azurerm提供程序
我试过这个:
variable "SUBSCRIPTION_ID" {
description = "Subscription ID where resources will be deployed."
}
variable "TENANT_ID" {
description = "Service Principal Tenant ID."
}
provider "azurerm" {
subscription_id = var.SUBSCRIPTION_ID
tenant_id = var.TENANT_ID
use_msi = true
features {}
}
#################################################################
# Tools provider
#################################################################
variable "TOOLS_SUBSCRIPTION_ID" {
description = "Subscription ID where Tools are located,"
}
variable "TOOLS_TENANT_ID" {
description = "Service Principal Tenant ID."
}
provider "azurerm" {
alias = "tools"
subscription_id = var.TOOLS_SUBSCRIPTION_ID
tenant_id = var.TOOLS_TENANT_ID
use_msi = true
features {}
}
已定义:
TF_VAR_SUBSCRIPTION_ID
TF_VAR_TENANT_ID
TF_VAR_TOOLS_SUBSCRIPTION_ID
TF_VAR_TOOLS_TENANT_ID
我检查了一下,所有值都存在。然而,我得到了这个错误:
│ Error: building AzureRM Client: 1 error occurred:
│ * A Client ID must be configured when authenticating as a Service Principal using a Client Secret.
│
│
│
│ with provider["registry.terraform.io/hashicorp/azurerm"],
│ on providers.tf line 17, in provider "azurerm":
│ 17: provider "azurerm" {
│
╵
╷
│ Error: building AzureRM Client: 1 error occurred:
│ * A Client ID must be configured when authenticating as a Service Principal using a Client Secret.
│
│
│
│ with provider["registry.terraform.io/hashicorp/azurerm"].tools,
│ on providers.tf line 48, in provider "azurerm":
│ 48: provider "azurerm" {
│
该代码是在已分配托管标识的Azure VM Scale集上运行的。
我做了另一个测试,对于单个提供者,我得到了相同的错误。通过环境变量TF_VAR_name
传递变量似乎有问题。
我使用这些版本:
- Terraform v1.0.11
- azurerm v2.98.0
错误表示尚未指定提供程序的client_id
参数。使用服务主体对AzureRM提供程序进行身份验证时,还需要指定client_id
,然后指定机密或证书(不确定此处的目标(。
provider "azurerm" {
subscription_id = var.SUBSCRIPTION_ID
tenant_id = var.TENANT_ID
client_id = var.CLIENT_ID
features {}
}
provider "azurerm" {
alias = "tools"
subscription_id = var.TOOLS_SUBSCRIPTION_ID
tenant_id = var.TOOLS_TENANT_ID
client_id = var.TOOLS_CLIENT_ID
features {}
}
这将解决您的问题,但您还需要指定上面链接文档中提到的客户端证书或机密。此外,use_msi
参数被提供程序配置忽略,因此提供程序将身份验证方法理解为服务主体,而不是托管服务标识。
还要注意,对于默认的提供程序配置,您可以使用像ARM_SUBSCRIPTION_ID
这样的本地身份验证环境变量,而不是Terraform变量,即var.SUBSCRIPTION_ID
。
我发现脚本集ARM_ACCESS_KEY
和ARM_CLIENT_SECRET
中的一个,由于这种情况,将其视为Service Prinicpal身份验证。一旦我去掉了那个部分,一切都很好。