Возможно, мне чего-то очень базового здесь не хватает. Приходя из GCP и AWS, Azure Functions в некоторых аспектах ... отличаются.
Что
Что я пытаюсь сделать, так это иметь Azure Function, срабатывающую по очереди службы Service Bus. Или, шаг назад, я публикую в предмет Event Grid и мне нужна функция, чтобы надежно обрабатывать все сообщения, опубликованные на этот предмет. Так что моя мысль была поставить очередь в качестве входящего ящика, потому что я предполагаю, что сообщение пропадет, если я запущу функцию напрямую через AEG, но функция не сможет его обработать (?).
Я не хочу управлять строками подключения, если не обязан. Так что я попробовал аутентификацию на основе идентичности, а также сервис-коннектор. Но ни с одним из них моя функция не срабатывает на сообщения в очереди.
Как
Я удалю, вероятно, нерелевантные части инфраструктуры.
# тема
ресурс "azurerm_eventgrid_topic" "this" {
имя = "моятема"
схема_ввода = "CloudEventSchemaV1_0"
# ...
}
пространство имен службы шины …
очередь
ресурс “azurerm_servicebus_queue” “this” {
имя = “мояочередь”
идентификатор_пространства_имен = azurerm_servicebus_namespace.xyz.id
dead_lettering_on_message_expiration = true
enable_partitioning = false
…
}
azurerm_service_plan Linux Y1
приложение функций
ресурс “azurerm_linux_function_app” “this” {
имя = “myfunctionapp”
…
ключ_доступа_к_учетной_записи = azurerm_storage_account.xyz.primary_access_key
идентификатор_плана_обслуживания = azurerm_service_plan.this.id
public_network_access_enabled = true
builtin_logging_enabled = true
https_only = false
identity {
type = “SystemAssigned”
}
site_config {
application_stack {
python_version = “3.11”
}
always_on = false
app_scale_limit = 20
pre_warmed_instance_count = 0
cors {
allowed_origins = [“https://portal.azure.com”]
}
}
app_settings = {
“AzureWebJobsFeatureFlags” = “EnableWorkerIndexing”
# что я попробовал первым
“AZURE_SERVICEBUS_FULLYQUALIFIEDNAMESPACE” = “${azurerm_servicebus_namespace.this.name}.servicebus.windows.net”
# на основе идентичности
“ServiceBusConnection__fullyQualifiedNamespace” = “${azurerm_servicebus_namespace.this.name}.servicebus.windows.net”
“AZURE_STORAGEBLOB_RESOURCEENDPOINT” = # …
}
sticky_settings {
# на самом деле не знаю, что это
app_setting_names = [
“AZURE_STORAGEBLOB_RESOURCEENDPOINT”,
“AZURE_SERVICEBUS_FULLYQUALIFIEDNAMESPACE”,
]
}
lifecycle {
ignore_changes = [
app_settings[“WEBSITE_RUN_FROM_PACKAGE”]
]
}
}
развертывание azurerm_function_app_function через tf на самом деле просто не работает, я разворачиваю через VSC
подписка