如何在 Azure DevOps 发布管道中使用存储帐户中存储的 Terraform 输出变量?
How to use Terraform output variables stored in an storage account in Azure DevOps release pipelines?
在 Whosebug 上有与此类似的问题,但其中 none 解决了我在使用 Azure 存储帐户保留输出时使用 Terraform 的问题。
这是我的场景,听起来很熟悉:
我的 Terraform 脚本提供了一个带有功能键的 Azure HTTP-triggered 功能。此外,此 Terraform 脚本提供了一个调用上述 HTTP-triggered 函数的 Web 应用程序。 HTTP-triggered 函数的密钥存储在 Web 应用程序的 appsettings.json
文件中,以将其包含在对 HTTP-triggered 函数的 HTTP headers 调用中。
以下代码片段说明了如何在 terraform 中配置 HTTP-triggered 函数:
resource "azurerm_function_app" "myhttpfunc" {
name = var.funcname
location = "${azurerm_resource_group.rc.location}"
resource_group_name = "${azurerm_resource_group.rc.name}"
app_service_plan_id = "${azurerm_app_service_plan.funcsserviceplan.id}"
storage_account_name = "${azurerm_storage_account.funcstorage.name}"
storage_account_access_key = "${azurerm_storage_account.funcstorage.primary_access_key}"
}
访问函数键的输出变量如下:
output "funchostkeys" {
value = data.azurerm_function_app_host_keys.myhttpfunc
sensitive = true
}
我假设此输出和其他输出将出现在 terraform.tfstate
托管在专用 Azure 存储帐户上的某个时刻。
我的问题是,如何通过将配置条目替换为输出变量中生成的 terraform 来获取 Azure 发布管道中的特定输出以操纵 appsettings.json
文件?
例如 this post 建议按照以下行将 terraform 的输出生成到一个文件,但在我的情况下这似乎不是一个选项,因为我的 terraform 脚本利用 Azure 存储来保留输出。
terraform output -json > outputs.json
根据您的要求,您可以尝试使用以下命令输出变量:
terraform output -raw funchostkeys
然后您可以使用 logging command 将值设置为管道变量。
例如:Powershell 脚本
- powershell: |
echo ##vso[task.setvariable variable=varname]$(terraform output -raw funchostkeys)
displayName: 'PowerShell Script'
然后你可以使用Replace token task来使用管道变量来替换appsettings.json中的值。
您可以在 appsettings.json 中定义 #{variablename}#
。当你运行管道时,输出值将被设置在目标位置。
在 Whosebug 上有与此类似的问题,但其中 none 解决了我在使用 Azure 存储帐户保留输出时使用 Terraform 的问题。
这是我的场景,听起来很熟悉:
我的 Terraform 脚本提供了一个带有功能键的 Azure HTTP-triggered 功能。此外,此 Terraform 脚本提供了一个调用上述 HTTP-triggered 函数的 Web 应用程序。 HTTP-triggered 函数的密钥存储在 Web 应用程序的 appsettings.json
文件中,以将其包含在对 HTTP-triggered 函数的 HTTP headers 调用中。
以下代码片段说明了如何在 terraform 中配置 HTTP-triggered 函数:
resource "azurerm_function_app" "myhttpfunc" {
name = var.funcname
location = "${azurerm_resource_group.rc.location}"
resource_group_name = "${azurerm_resource_group.rc.name}"
app_service_plan_id = "${azurerm_app_service_plan.funcsserviceplan.id}"
storage_account_name = "${azurerm_storage_account.funcstorage.name}"
storage_account_access_key = "${azurerm_storage_account.funcstorage.primary_access_key}"
}
访问函数键的输出变量如下:
output "funchostkeys" {
value = data.azurerm_function_app_host_keys.myhttpfunc
sensitive = true
}
我假设此输出和其他输出将出现在 terraform.tfstate
托管在专用 Azure 存储帐户上的某个时刻。
我的问题是,如何通过将配置条目替换为输出变量中生成的 terraform 来获取 Azure 发布管道中的特定输出以操纵 appsettings.json
文件?
例如 this post 建议按照以下行将 terraform 的输出生成到一个文件,但在我的情况下这似乎不是一个选项,因为我的 terraform 脚本利用 Azure 存储来保留输出。
terraform output -json > outputs.json
根据您的要求,您可以尝试使用以下命令输出变量:
terraform output -raw funchostkeys
然后您可以使用 logging command 将值设置为管道变量。
例如:Powershell 脚本
- powershell: |
echo ##vso[task.setvariable variable=varname]$(terraform output -raw funchostkeys)
displayName: 'PowerShell Script'
然后你可以使用Replace token task来使用管道变量来替换appsettings.json中的值。
您可以在 appsettings.json 中定义 #{variablename}#
。当你运行管道时,输出值将被设置在目标位置。