#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"
При ее удалении ключи будут сгенерированы заново.