存储Terraform变量值的最佳方式,而无需在源代码管理中使用它们



我们用Terraform中的IaC进行了代码回购。这是在Github中,我们将提取代码,构建它,等等。然而,我们不希望我们的变量的值在Github本身中。因此,这可能是一个愚蠢的问题,但我们将变量所需的值存储在哪里?如果我的Terraform需要Azure订阅id,我将把订阅id存储在哪里?vars文件将不在源代码管理中。我们的目标是将代码拉入Azure Devops管道,这样管道就必须知道去哪里才能获得输入变量值。我希望这有道理?

您可以将您的秘密存储在Azure密钥库中,并使用azurerm_key_vault_secret在Terraform中检索它们。

data "azurerm_key_vault_secret" "example" {
name         = "secret-sauce"
key_vault_id = data.azurerm_key_vault.existing.id
}
output "secret_value" {
value = data.azurerm_key_vault_secret.example.value
}

https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/data-sources/key_vault_secret

最终必须有真相的来源。

您可以将您的值作为变量本身存储在管道定义中,并将它们传递到Terraform配置中。

通常它是tfvar文件(取决于目标环境(和管道中的一些变量的组合。如果您的管道中确实有vars,那么管道应该在代码中。

如果变量是敏感的,那么您需要连接到一个秘密管理工具来获取这些变量。

如果你有很多环境,比如说20个环境,除了一个ID之外,基础设施都是一样的——你可以有相同的管道定义(通常是JSON或YAML(,并为你构建的20个管道引用它,那么这20个管道中的每一个都会有唯一的值,以便在执行时使用。这个var作为缺失的部分被传递给Terraform。

还有其他关键价值财产跟踪系统,但Git在这方面肯定做得很好。

您可以使用Azure DevOps安全文件(pipelines->库(来存储每个环境的凭据。您可以使用所有凭据为每个环境创建一个tfvar文件,将其作为安全文件上传到Azure DevOps中,然后使用DownloadSecureFile@1任务在管道中下载。

最新更新