Как вернуть функциональные клавиши приложения из модуля terraform

Я создаю веб-приложение и функцию. Веб-приложение вызывает функцию. моя терраформная структура такая

main.tf
variable.tf
module/webapp
module/function

в main.tf я вызываю модуль / функцию для создания функции, а затем вызываю модуль / 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."}}]

Спасибо,

Таукир


person Tauqir    schedule 27.10.2020    source источник
comment
это не работает. это не очень конкретно. Как именно вы их использовали в main.tf? Какие сообщения об ошибках вы получали?   -  person Marcin    schedule 27.10.2020
comment
Обновил вопрос с ошибкой   -  person Tauqir    schedule 27.10.2020
comment
@Tauqir ты это решил? Я обнаружил, что вы также получаете 400 неверных запросов, если ваша функция настроена на игнорирование всех настроек приложения через систему жизненного цикла. Что еще вы вложили в создание приложения-функции? Вы можете проверить статус функции в Azure, чтобы узнать, был ли ей предоставлен ключ хоста - если нет, это ошибка. Так и случилось со мной.   -  person The Senator    schedule 19.02.2021


Ответы (2)


Я провел небольшое тестирование, и есть две вещи. Похоже, вам нужно развернуть функцию или перезапустить приложение-функцию, чтобы оно сгенерировало ключи. Если вы развертываете функцию, а затем пытаетесь получить ключи, похоже, это не ждет. Между запуском функции и доступностью клавиш есть задержка. Также есть проблемы с терраформой вокруг этого. У меня была проблема с V12, см. № 26074.

Я вернулся к использованию написанного мной модуля (нижняя ссылка), он ждет, пока не станет доступен ключ.

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

person Tim Tharratt    schedule 27.11.2020

То, что вы делаете, правильно из того, что я могу понять, вам нужно будет передать значения в модуль webapp в вашем main.tf следующим образом:

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

и настройте переменные в вашем модуле webapp

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

Я вижу, что вы пытаетесь вернуть azurerm_function_app_host_keys из несуществующего azurerm_function_app.

Попробуйте вернуть ключи из источника данных.

person Martin Kemp    schedule 27.10.2020