Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从terraform模块返回功能应用程序密钥_Terraform_Azure Function App_Azure Rm - Fatal编程技术网

如何从terraform模块返回功能应用程序密钥

如何从terraform模块返回功能应用程序密钥,terraform,azure-function-app,azure-rm,Terraform,Azure Function App,Azure Rm,我正在创建一个webapp和一个函数。web应用程序调用该函数。 我的地形结构是这样的 main.tf variable.tf module/webapp module/function 在main.tf中,我调用module/function创建函数,然后调用module/webapp创建webapp。 我需要在webpp的配置中提供功能键 Terraform azurerm provider 2.27.0添加了功能键作为数据源。 terraform文档中就是这样描述的。 如何将这些键返回

我正在创建一个webapp和一个函数。web应用程序调用该函数。 我的地形结构是这样的

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

Terraform azurerm provider 2.27.0添加了功能键作为数据源。 terraform文档中就是这样描述的。

如何将这些键返回到主模块?我尝试了以下操作,但它返回代码后面的错误:

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."}}]
谢谢


Tauqir

根据我收集的信息,您所做的是正确的,您需要将这些值传递到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_函数_应用程序返回azurerm_函数_应用程序_主机_键


尝试从数据源返回密钥。

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

我已经回到使用我编写的模块(底部链接),这将等待密钥变得可用


“它不起作用。”它不是很具体。你到底是如何在main.tf中使用它们的?你收到了什么错误消息?我用error@Tauqir你解决了这个问题吗?我发现,如果您的功能设置为通过lifecycle系统忽略所有应用程序设置,您也会收到400个错误请求。你在函数应用程序创建中还添加了哪些内容?您可以检查Azure中的函数状态,以查看它是否已被授予主机密钥-如果未被授予主机密钥,则为故障。对我来说就是这样。
variable func_hostname {
   type = string
}
variable functionkeys {
   type = string
}