如何在terraform中获取powershell环境变量值

问题描述 投票:0回答:2

在 Ubuntu (20.04) 上运行 powershell (7.4.1) 和 terraform (1.7.5)。我创建了一个 powershell 配置文件,在其中设置了一些环境变量供 terraform 在执行时使用。

例如,在“Microsoft.PowerShell_profile.ps1”中我已设置。

$env:DA_SUBSCRIPTION_ID="abcd1234"
gci env:DA_*

当我运行

pwsh
时,我可以看到打印到控制台的值。

Name                           Value
----                           -----
DA_SUBSCRIPTION_ID             abcd1234`

然后我有一个 terraform 文件“providers.tf”(以及其他 tf 文件),其内容如下。

provider "azurerm" {
  features {}
  subscription_id = "${env.DA_SUBSCRIPTION_ID}"
}

现在,在 powershell 控制台中,当我运行

terraform validate
时。 我得到回复:

A managed resource "env" "DA_SUBSCRIPTION_ID" has not been declared in the root module.

可能很简单,但在引用 powershell 配置文件中设置的环境变量时,我无法找到正确的语法。

有人可以给我关于如何正确执行此操作的建议吗?

谢谢。

powershell terraform
2个回答
0
投票

首先,您必须在 Terraform 中声明一个变量。

variable "DA_SUBSCRIPTION_ID" {
  type = string
}

provider "azurerm" {
  features {}
  subscription_id = var.DA_SUBSCRIPTION_ID
}

然后,您可以在 shell 中使用

TF_VAR_
前缀设置环境变量。 Terraform 在其自身进程的环境中搜索名为
TF_VAR_
的环境变量,后跟声明的变量的名称。

$env:TF_VAR_DA_SUBSCRIPTION_ID="abcd1234"
terraform plan

0
投票

不需要声明这样的变量。只要您在 PowerShell 环境中定义

ARM_SUBSCRIPTION_ID
,Terraform 就会将其用于提供程序配置,请参阅 Azure 提供程序文档。

但是,如果您想显式设置不同的变量来设置订阅 ID,@vrdse 的建议是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.