如何从Terraform模块返回功能应用键

问题描述

我正在创建一个Webapp和一个函数。 Web应用程序调用功能。 我的地形结构就是这样

main.tf
variable.tf
module/webapp
module/function
在main.tf中的

,我调用module / function来创建函数,然后再调用module / webapp来创建webapp。 我需要在webpp的配置中提供功能键。

terraform Azurerm提供程序2.27.0添加功能键作为数据源。 https://github.com/terraform-providers/terraform-provider-azurerm/pull/7902 这是在terraform文档中对其进行描述的方式。 https://www.terraform.io/docs/providers/azurerm/d/function_app_host_keys.html

data "azurerm_function_app_host_keys" "example" {
  name                = "example-function"
  resource_group_name = azurerm_resource_group.example.name
}

如何准确地将这些密钥返回到主模块?我尝试了以下操作,但它返回了代码后的错误

resource "azurerm_function_app" "myfunc" {
  name                      = var.function_app
  location                  = var.region
...
  tags                      = var.tags
}

output "hostname" {
  value = azurerm_function_app.actico.default_hostname
}

output "functionkeys" {
  value = azurerm_function_app.actico.azurerm_function_app_host_keys
}

Error: unsupported attribute
This object has no argument,nested block,or exported attribute named
"azurerm_function_app_host_keys".

另一种尝试似乎更有希望。在主模块中添加一个数据元素,希望它将在创建函数获取键之后执行。但出现400错误

in main module

data "azurerm_function_app_host_keys" "keymap" {
  name                = var.function_app_name
  resource_group_name = var.resource_group_name

  depends_on = [module.function_app]
}


Error making Read request on AzureRM Function App Hostkeys "FunctionApp": web.AppsClient#ListHostKeys: Failure responding to request: 

StatusCode=400 -- Original Error: autorest/azure: Service returned an error. Status=400 Code="BadRequest" Message="Encountered an error (ServiceUnavailable) from host runtime." Details=[{"Message":"Encountered an error (ServiceUnavailable) from host runtime."},{"Code":"BadRequest"},{"ErrorEntity":{"Code":"BadRequest","Message":"Encountered an error 
(ServiceUnavailable) from host runtime."}}]

谢谢

陶基尔

解决方法

从我收集到的信息来看,您所做的是正确的,您将需要将这些值传递到main.tf中的webapp模块中,如下所示:

module webapp {
    ...
    func_hostname = module.function.hostname
    functionkeys  = module.function.functionkeys
}

并在您的webapp模块中设置变量

variable func_hostname {
   type = string
}
variable functionkeys {
   type = string
}

我看到的是您正在尝试从不存在的azurerm_function_app中返回azurerm_function_app_host_keys。

尝试从数据源返回密钥。

,

我对此做了一些测试,有两件事。看来您需要部署功能或重新启动功能应用程序才能生成密钥。如果您部署了该功能然后尝试获取密钥,那么它似乎没有等待。在功能启动和按键可用之间存在延迟。此外,这也与Terraform有关。我遇到了V12的问题,请参见#26074。

我回到使用我编写的模块(底部链接),这等待密钥可用。

https://github.com/hashicorp/terraform/issues/26074 https://github.com/eltimmo/terraform-azure-function-app-get-keys

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...