Функция Azure не запускается через очередь службы Service Bus

Возможно, мне чего-то очень базового здесь не хватает. Приходя из 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

подписка

Исходя из предоставленного текста, в вашем случае есть проблема с тем, что ваша Azure Function не срабатывает на сообщения в очереди, даже после настроек с помощью аутентификации на основе идентичности и сервис-коннектора. Ниже приведены некоторые возможные области улучшения:

  1. Проверьте правильность настроек подключения к сервису Service Bus:
    Убедитесь, что все значения, такие как полностью квалифицированное пространство имен для подключения Service Bus, указаны правильно в настройках вашего приложения функций.

  2. Проверьте права доступа:
    Убедитесь, что ваша функция имеет необходимые права доступа для чтения из очереди Service Bus. Определите это через настройки ролей и разрешений в Azure Portal.

  3. Логирование:
    Включите подробное логирование для вашей функции, чтобы проверить, почему она не обрабатывает сообщения в очереди. Просмотрите журналы для обнаружения возможных ошибок или проблем в логике обработки сообщений.

  4. Тестовые сообщения:
    Создайте тестовые сообщения и отправьте их в очередь Service Bus, чтобы убедиться, что ваша функция правильно реагирует и обрабатывает их.

  5. Пересмотрите конфигурацию Event Grid:
    Убедитесь, что ваша функция правильно подписана на события в Event Grid, и что все ключевые шаги настройки для обработки сообщений из предмета Event Grid выполнены правильно.

Следование этим рекомендациям может помочь вам идентифицировать и исправить проблему с обработкой сообщений в вашей Azure Function. Если у вас есть дополнительные вопросы или уточнения, пожалуйста, не стесняйтесь задать их.

Из вашего сообщения можно понять, что у вас возникли проблемы с настройкой Azure Functions для обработки сообщений из очереди Service Bus или событий из Event Grid в Azure. Ниже я приведу некоторые рекомендации и корректировки, которые могут помочь вам решить эти проблемы:

  1. Использование идентичности функции (Managed Identity):
    Убедитесь, что ваша функция имеет правильные разрешения для доступа к очереди Service Bus. Для этого присвойте идентичности функции необходимые разрешения на уровне очереди.

  2. Настройка подключения к Service Bus:
    Вам необходимо установить правильные настройки в разделе app_settings вашего ресурса Azure Function. Вместо ${azurerm_servicebus_namespace.this.name} введите реальное имя вашего Service Bus Namespace.

  3. Проверка библиотеки Azure Functions:
    Убедитесь, что ваша функция использует правильные библиотеки для работы с Service Bus. В Python это может быть, например, библиотека azure-servicebus.

  4. Логирование ошибок:
    Добавьте механизм логирования ошибок в вашу функцию, чтобы вы могли отслеживать, почему она не срабатывает на сообщения в очереди.

  5. Тестирование через Visual Studio Code:
    Попробуйте запустить и отлаживать вашу функцию через Visual Studio Code для более подробного анализа проблемы.

Если после корректировок ваша функция все равно не работает, вам может потребоваться более детально изучить документацию Azure Functions или обратиться в службу поддержки Azure для получения дополнительной помощи.