使用Terraform输出恢复Azure ARm模板的输出值

时间:2019-08-05 09:12:39

标签: azure azure-devops azure-functions terraform terraform-provider-azure

使用terraform和Azure ARM模板,为了使用特定的Azure函数配置事件网格,我试图在terraform输出中恢复一些值。

实际上,我具有此ARm模板部署以具有特定功能的系统密钥:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "functionApp": {
            "type": "string",
            "defaultValue": ""
        }
    },
    "variables": {
        "functionAppId": "[resourceId('Microsoft.Web/sites', parameters('functionApp'))]"
    },
    "resources": [],
    "outputs": {
        "systemKeys": {
            "type": "object",
            "value": "[listkeys(concat(variables('functionAppId'), '/host/default'), '2018-11-01').systemKeys]"
        }
    }
}

我的部署运行良好,因为我可以在Azure门户中看到输出中像这样的json对象:

{
    "durabletask_extension": "ASensituveValueIDoNotShareForDurableTaskExtension==",
    "eventgrid_extension": "ASensituveValueIDoNotShareForEventGridExtension=="
}

现在的目的是在terraform输出中获得该值之一。 我尝试了这些,但出现了一些错误:

output "syst_key" {
    value = "${azurerm_template_deployment.function_keys.outputs["systemKeys"]}"
}

Error: on outputs.tf line 69, in output "syst_key":   
69:     value = "${azurerm_template_deployment.function_keys.outputs["systemKeys"]}"
    |----------------
    | azurerm_template_deployment.function_keys.outputs is empty map of string

output "syst_keys" {
  value = "${lookup(azurerm_template_deployment.function_keys.outputs, "systemKeys")}"
}

Error:  on outputs.tf line 77, in output "syst_key":   
77:     value = "${lookup(azurerm_template_deployment.function_keys.outputs, "systemKeys")}"
    |---------------- 
    | azurerm_template_deployment.function_keys.outputs is empty map of string

Call to function "lookup" failed: lookup failed to find 'systemKeys'.

为了在此功能上触发eventgrid,我必须从我的ARM部署模板中恢复systemKeys的terraform输出中的值。我知道部署工作正常,只是不知道如何使用terraform恢复这些值。

1 个答案:

答案 0 :(得分:1)

对于您的问题,您需要注意Terraform仅支持类型 String Int Bool 。因此,您需要在模板中更改输出类型,然后才能在Terraform中输出它们。有关更多详细信息,请参见outputs。在Terraform中正确的输出如下:

output "syst_key" {
    value = "${azurerm_template_deployment.function_keys.outputs["systemKeys"]}"
}