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

Возможно, я упускаю что-то очень базовое здесь. Приходя из GCP и AWS, Azure Functions отличаются в некоторых аспектах.
Что
Я пытаюсь сделать так, чтобы Azure Function запускалась при получении сообщения из очереди Service Bus. Или, на шаг назад, я публикую сообщение в событийную сеть и мне нужна функция для обработки всех сообщений, опубликованных в эту тему. Поэтому я решил поставить очередь в качестве входящего ящика, потому что я предполагаю, что сообщение исчезает, если я запускаю функцию через AEG напрямую, но функция не может его обработать(?).
Я не хочу управлять строками подключения, если нет необходимости. Поэтому я попробовал аутентификацию на основе идентичности, а также подключение через устройство службы. Но ни с одним из них моя функция не запускается при получении сообщений в очереди.
Как
Я уберу, вероятно, незначимые части инфраструктуры.
Функция развернута через VSC:

@app.function_name(name="myfunc")
@app.service_bus_queue_trigger(
    arg_name="msg",
    queue_name="myqueue",
    connection="ServiceBusConnection__fullyQualifiedNamespace",
)
def test_function(msg: func.ServiceBusMessage):
    # что угодно, просто логирование, чтобы увидеть, вызывается ли функция
    pass

host.json - на самом деле я не знаю, какие параметры применяются и что они точно делают. Я также не понимаю что такое “Functions 2.x” и “Extension 5.x” это
Когда я публикую сообщение в тему AEG, оно попадает в очередь, но функция так и не вызывается.
Как заставить это работать? Я прочитал, что Consumption plan, возможно, пока не поддерживает очереди Service Bus (еще)? Возможно, Azure не абстрагирует масштабирование до нуля и просто никогда не sondaget очередь? Действительно ли мне нужно добавлять триггер HTTP и таймер, чтобы эта вещь действительно работала? Плохая ли у меня вся установка?
Дополнительный вопрос - в чем разница между сервисным коннектором и простым доступом на основе идентичности через назначение ролей (как управляемыми пользователями, так и системными)?


Ваша ситуация звучит довольно сложной, но давайте попробуем разобраться и найти решение для вашей проблемы с Azure Functions и Service Bus Queue.

Основные шаги для настройки функции Azure, триггеруемой очередью Service Bus:

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

  2. Настройки подключения: Вы указали connection="ServiceBusConnection__fullyQualifiedNamespace". Это означает, что в настройках приложения должна быть запись, соответствующая этому ключу, содержащая строку подключения или параметры подключения.

  3. Файл host.json: Этот файл используется для конфигурации вашей функции. Важно, чтобы он был настроен правильно, особенно если вы используете новые версии функции или расширения. Убедитесь, что у вас есть правильные настройки для Service Bus.

Пример настроек host.json:

{
  "version": "2.0",
  "extensions": {
    "serviceBus": {
      "prefetchCount": 0,
      "messageHandlerOptions": {
        "autoComplete": true,
        "maxConcurrentCalls": 16,
        "maxAutoRenewDuration": "00:05:00"
      }
    }
  }
}

Настройка Managed Identity:

  1. Включение Managed Identity для функции: Перейдите в портал Azure, найдите вашу функцию и включите Managed Identity в разделе “Identity”.

  2. Настройка доступа к Service Bus:

    • Перейдите в ваш Service Bus, выберите очередь, к которой должна быть подключена функция.
    • В разделе “Access Control (IAM)” добавьте роль “Azure Service Bus Data Receiver” для вашей Managed Identity.

Публикация сообщения в очередь:

Если вы хотите отправлять сообщения в очередь, убедитесь, что ваш Event Grid настроен на правильную отправку сообщений в Service Bus Queue. Можно сделать это через портал Azure или через Azure CLI.

Дополнительные шаги и проверки:

  1. Проверка логов: Логи функции могут содержать информацию о том, почему она не запускается. Перейдите в раздел “Monitor” на портале Azure для вашей функции и проверьте логи.

  2. Тестирование локально: Попробуйте запустить вашу функцию локально с использованием Azure Functions Core Tools и отправьте тестовое сообщение в очередь.

Различия между методами аутентификации:

  • Service Principal (служебный коннектор): Позволяет вашей функции использовать заранее созданный и настроенный сервисный принципал для доступа к ресурсам Azure.
  • Managed Identity: Упрощает управление доступом, так как Azure автоматически создает и управляет идентичностью для вашей функции. Вам нужно только назначить роли для этой идентичности, чтобы предоставить доступ к ресурсам.

Оба метода могут быть использованы, но Managed Identity обычно проще в настройке и управлении.

Если все эти шаги выполнены, и ваша функция все еще не запускается, попробуйте добавить HTTP-триггер и таймер для периодической проверки очереди. Это не идеальное решение, но может помочь выявить проблемы с триггерами.