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

Posted

技术标签:

【中文标题】使用 terraform 输出恢复 Azure ARm 模板的输出值【英文标题】:Recover output value of Azure ARm template with terraform output 【发布时间】:2019-12-12 18:59:27 【问题描述】:

使用 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】:

对于您的问题,您需要注意 Terraform 仅支持 StringIntBool 类型。所以需要在模板中更改输出类型,然后才能在 Terraform 中输出。有关详细信息,请参阅outputs。 Terraform 中正确的输出如下:

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

【讨论】:

你救了我的命,确实是菜鸟的错误。使用这个 ARM 模板和 terraform,我需要将值类型设置为字符串。现在我恢复了我的价值。谢谢你,你拯救了我的一天

以上是关于使用 terraform 输出恢复 Azure ARm 模板的输出值的主要内容,如果未能解决你的问题,请参考以下文章

在 azure 后端存储中使用状态文件将 terraform 的输出传递到 Azure Devops Pipeline

远程 terraform 模块的输出变量

如何使用 Terraform 为 Azure 资源创建警报

使用 Azure 市场的 Terraform

Terraform 学习总结—— 简单记录 Azure CN 上 Terraform Provider 配置的一个坑

如何在 Azure Pipeline 上使用 Terraform 将文件上传到 Azure 存储?