问题描述
我正在创建一个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