Функция Azure «Ключи хоста» не создана с помощью Terraform

#function #terraform #terraform-provider-azure

#функция #terraform #terraform-provider-azure

Вопрос:

если я создаю функцию Azure вручную через портал, создаются ключи приложения: введите описание изображения здесь

Если я попробую то же самое через terraform:

Приложение функции

   resource "azurerm_function_app" "resize_images" {
    name                      = format("%s%s%s%s", module.subscription_prefix.prefix, "pfunctionapp", lower(local.environment), "0001")
    location                  = azurerm_resource_group.azure_functions.location
    resource_group_name       = azurerm_resource_group.azure_functions.name
    app_service_plan_id       = module.app_service_plan.id
  
    # AzureRM 1.x needs this
    #storage_connection_string = local.azure_functions_storage_account_primary_connection_string
  
    # AzureRM 2.x needs this
    storage_account_name       = data.azurerm_storage_account.resize_storage.name
    storage_account_access_key = data.azurerm_storage_account.resize_storage.primary_access_key
  
    app_settings = {
      AzureWebJobsDashboard          = data.azurerm_storage_account.resize_storage.primary_connection_string
      AzureWebJobsStorage            = data.azurerm_storage_account.resize_storage.primary_connection_string
      BLOB_STORAGE_CONNECTION_STRING = data.azurerm_storage_account.resize_storage.primary_connection_string
      CONTAINER_NAME = "images"
      FUNCTIONS_EXTENSION_VERSION = "~3"
      WEBSITE_HTTPLOGGING_RETENTION_DAYS = "3"
      WEBSITE_RUN_FROM_PACKAGE = "1"
    }
  
    version = "~3"
  
    tags = local.tags
  }
  

Ключи приложения не создаются:
введите описание изображения здесь

В документации Terraform нет ничего о том, как создать эти ключи, но вы можете прочитать их как данные.

Может ли кто-нибудь указать мне правильное направление, в котором были созданы ключи ?!

Ответ №1:

По умолчанию ключи хранятся в контейнере для хранения больших двоичных объектов в учетной записи, предоставленной AzureWebJobsStorage настройкой. В вашем коде ключи действительно были автоматически сгенерированы в этой связанной учетной записи хранилища, но не отображались в пользовательском интерфейсе приложения Azure Function.

После моей проверки, если вы удалите WEBSITE_RUN_FROM_PACKAGE = "1" в app_settings , вы увидите ключи приложения по умолчанию в своем функциональном приложении. Когда вы добавляете WEBSITE_RUN_FROM_PACKAGE параметр в настройки своего функционального приложения, он позволяет вашему функциональному приложению запускаться из пакета. Я думаю, что это более или менее переопределяет поведение развертывания функции Azure по умолчанию. Прочтите это для получения дополнительной информации.

Комментарии:

1. Я думаю, вы правы, я вижу такое же поведение и с Bicep. Если вы развертываете ресурс приложения Azure Function с WEBSITE_RUN_FROM_PACKAGE установленным значением 1 , ключи хоста не будут отображаться до тех пор, пока в приложение не будет введен некоторый код. Или, в качестве альтернативы, установите 0 значение, а затем вернитесь к 1 нему. Это вызвало проблему с одним из наших развертываний, когда другой ресурс зависел от ключей хоста приложения функции.

Ответ №2:

У нас была эта ошибка, и мы все еще видели ее в последней версии azurerm (2.54), и для нас возврат к версии = «~ 1» не был вариантом. Ключи приложения создаются в хранилище больших двоичных объектов, но сгенерированное приложение-функция v3 не может их найти. Нам пришлось удалить старый большой двоичный объект, содержащий зашифрованные ключи, и добавить его в настройки приложения function app CONTAINER_NAME = "azure-webjobs-secrets" в terraform

Все настройки app_settings для приложения Terraformed Function выглядят следующим образом

    app_settings = {
     AzureWebJobsDashboard          = data.azurerm_storage_account.sg.primary_connection_string
     AzureWebJobsStorage            = data.azurerm_storage_account.sg.primary_connection_string
     CONTAINER_NAME = "azure-webjobs-secrets"
     FUNCTIONS_EXTENSION_VERSION = "~3"
     WEBSITE_HTTPLOGGING_RETENTION_DAYS = "3"
   }
  

Это исправило это для нас

Ответ №3:

Я не совсем уверен, что это полное решение проблемы, я все еще получаю его после удаления this app_setting .

Для меня это выглядит как проблема с синхронизацией, terraform создает функции, затем я запрашиваю ключи, но ключей нет, сбой terraform, я жду меньше минуты, и ключи есть, повторно запускаю apply и все работает…

Действительно пытаюсь найти решение этой проблемы.

ОБНОВЛЕНИЕ: таким образом, у поставщика Azure 2.45.1 истекает время ожидания при получении ключей. Однако поставщик 2.51.0 этого не делает…

Кажется, время ожидания было исправлено на последнем поставщике.

Ответ №4:

Для меня проблема заключалась в том, что функциональное приложение с тем же именем ранее было удалено из группы ресурсов, а старые ключи в учетной записи хранилища «блокировали» создание и / или обнаружение новых ключей. Удаление старых ключей из хранилища и повторное создание приложения функции с помощью Terraform устранили проблему.

Ответ №5:

Я столкнулся с той же проблемой, и в моем случае разница заключалась в удалении параметра версии:

 version = "~3"
  

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