Расширение Dapr для Функции Azure

Расширение Dapr для Функции Azure — это набор средств и служб, которые позволяют разработчикам легко интегрировать Функции Azure с платформой распределенной среды выполнения приложений (Dapr).

Функции Azure — это служба вычислений на основе событий, которая предоставляет набор триггеров и привязок для легкого подключения к другим службам Azure. Dapr предоставляет набор стандартных блоков и рекомендаций по созданию распределенных приложений, включая микрослужбы, управление состоянием, паб/вложенный обмен сообщениями и многое другое.

Интеграция между Dapr и Functions позволяет создавать функции, реагирующие на события из Dapr или внешних систем.

Действие Направление Тип
Триггер входной привязки Dapr Н/П daprBindingTrigger
Триггер вызова службы Dapr Н/П daprServiceInvocationTrigger
Активация подписки на раздел Dapr Н/П daprTopicTrigger
Извлечение в состоянии Dapr для выполнения In daprState
Извлечение секретов Dapr для выполнения In daprSecret
Сохранение значения в состоянии Dapr выход daprState
Вызов другого приложения Dapr выход daprInvoke
Публикация сообщения в разделе Dapr выход daprPublish
Отправка значения в выходную привязку Dapr выход daprBinding

Установка расширения

Установленный пакет NuGet расширения зависит от режима C# в процессе или изолированном рабочем процессе, который вы используете в приложении-функции:

Это расширение доступно путем установки пакета NuGet версии 1.0.0.

С использованием .NET CLI:

dotnet add package Microsoft.Azure.WebJobs.Extensions.Dapr

Установка пакета

Вы можете добавить расширение, добавив или заменив следующий код в host.json файле:

{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[4.*, 5.0.0)"
  }
}

Включение Dapr

Можно настроить Dapr с помощью различных [аргументов и заметок][dapr-args] на основе контекста среды выполнения. Dapr можно настроить для Функции Azure через два канала:

  • Шаблоны инфраструктуры как кода (IaC), как в шаблонах Bicep или Azure Resource Manager (ARM)
  • Портал Azure

При использовании шаблона IaC укажите следующие аргументы в properties разделе определения ресурса приложения контейнера.

DaprConfig: {
  enabled: true
  appId: '${envResourceNamePrefix}-funcapp'
  appPort: 3001
  httpReadBufferSize: ''
  httpMaxRequestSize: ''
  logLevel: ''
  enableApiLogging: true
}

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

При настройке Dapr с помощью портал Azure перейдите к приложению-функции и выберите Dapr в меню слева:

Снимок экрана: поиск включения Dapr для приложения-функции в портал Azure.

Порты и прослушиватели Dapr

При активации функции из Dapr расширение автоматически предоставляет порт 3001 для прослушивания входящих запросов из бокового автомобиля Dapr.

Внимание

Порт 3001 предоставляется только и прослушивается, если триггер Dapr определен в приложении-функции. При использовании Dapr боковой кареты ожидает получения ответа от определенного порта перед завершением создания экземпляра. Не определяйте заметку dapr.io/port или --app-port если у вас нет триггера. Это может заблокировать приложение с бокового автомобиля Dapr.

Если вы используете только входные и выходные привязки, порт 3001 не должен быть предоставлен или определен.

По умолчанию, когда Функции Azure пытается взаимодействовать с Dapr, он вызывает Dapr через порт, разрешенный из переменной DAPR_HTTP_PORTсреды. Если эта переменная имеет значение NULL, по умолчанию используется порт 3500.

Можно переопределить адрес Dapr, используемый входными и выходными привязками, задав DaprAddress свойство в function.json привязке (или атрибут). По умолчанию используется http://localhost:{DAPR_HTTP_PORT}.

Приложение-функция по-прежнему предоставляет другой порт и конечную точку для таких вещей, как триггеры HTTP, которые локально по умолчанию по умолчанию, но в контейнере по умолчанию707180.

Типы привязки

Типы привязки, поддерживаемые для .NET, зависят от версии расширения и режима выполнения C#, что может быть одним из следующих типов:

Библиотека внутрипроцессных классов — это скомпилированная функция C#, которая выполняется в том же процессе, что и среда выполнения Функций.

Расширение Dapr поддерживает типы параметров в соответствии с таблицей ниже.

Привязка Типы параметров
Триггер Dapr daprBindingTrigger
daprServiceInvocationTrigger
daprTopicTrigger
Входные данные Dapr daprState
daprSecret
Выходные данные Dapr daprState
daprInvoke
daprPublish
daprBinding

Примеры использования этих типов см. в разделе репозитория GitHub для расширения.

Попробуйте использовать расширение Dapr для Функции Azure

Узнайте, как использовать расширение Dapr для Функции Azure с помощью предоставленных примеров.

Примеры Description
Краткое руководство Приступая к работе с привязкой Dapr Pub/sub и HttpTrigger.
Dapr Kafka Узнайте, как использовать расширение dapr Функции Azure с компонентом Dapr привязки Kafka.
В процессе .NET Узнайте, как использовать модель Функции Azure процесса для интеграции с несколькими компонентами Dapr в .NET, такими как вызов службы, pub/sub, привязки и управление состоянием.
Изолированный .NET Интеграция с компонентами Dapr в .NET с помощью модели выполнения Функции Azure вне proc (OOP).

Попробуйте использовать расширение Dapr для Функции Azure

Узнайте, как использовать расширение Dapr для Функции Azure с помощью предоставленных примеров.

Примеры Description
Функции Java Узнайте, как использовать расширение dapr Функции Azure с помощью Java.

Попробуйте использовать расширение Dapr для Функции Azure

Узнайте, как использовать расширение Dapr для Функции Azure с помощью предоставленных примеров.

Примеры Description
Краткое руководство Приступая к работе с привязкой Dapr Pub/sub и HttpTrigger.
Dapr Kafka Узнайте, как использовать расширение dapr Функции Azure с компонентом Dapr привязки Kafka.
JavaScript Запустите приложение-функцию Dapr JavaScript и интегрируйте с вызовом службы Dapr, pub/sub, привязками и управлением состояниями с помощью Функции Azure.

Попробуйте использовать расширение Dapr для Функции Azure

Узнайте, как использовать расширение Dapr для Функции Azure с помощью предоставленных примеров.

Примеры Description
Функции PowerShell Узнайте, как использовать расширение dapr Функции Azure с PowerShell.

Попробуйте использовать расширение Dapr для Функции Azure

Узнайте, как использовать расширение Dapr для Функции Azure с помощью предоставленных примеров.

Примеры Description
Dapr Kafka Узнайте, как использовать расширение dapr Функции Azure с компонентом Dapr привязки Kafka.
Python версии 1 Запустите приложение Python с расширением Dapr и используйте модель программирования Python версии 1 Функции Azure для интеграции с компонентами Dapr.
Python v2 Запустите приложение Dapr с помощью модели программирования Python версии 2 Функции Azure для интеграции с компонентами Dapr.

Устранение неполадок

В этом разделе описывается устранение неполадок, которые могут возникнуть при использовании расширения Dapr для Функции Azure.

Убедитесь, что Dapr включен в вашей среде

Если вы используете привязки и триггеры Dapr в Функции Azure, а Dapr не включен в вашей среде, может появиться сообщение об ошибке: чтобы включить Dapr в вашей среде: Dapr sidecar isn't present. Please see (https://aka.ms/azure-functions-dapr-sidecar-missing) for more information.

Проверка значения порта приложения в конфигурации Dapr

Расширение Dapr для Функции Azure запускает HTTP-сервер на порту 3001 по умолчанию. Этот порт можно настроить с помощью переменной DAPR_APP_PORTсреды.

Если при запуске приложения Функции Azure указано неверное значение порта приложения, может появиться сообщение об ошибке: Чтобы устранить это сообщение об ошибке: The Dapr sidecar is configured to listen on port {portInt}, but the app server is running on port {appPort}. This may cause unexpected behavior. For more information, visit [this link](https://aka.ms/azfunc-dapr-app-config-error).

  1. В параметрах Dapr приложения контейнера:

    • Если в коде используется триггер Dapr, убедитесь, что для порта приложения задано 3001 значение или значение переменной DAPR_APP_PORT среды.

    • Если в коде не используется триггер Dapr, убедитесь, что порт приложения не задан. Он должен быть пустым.

  2. Убедитесь, что вы указали правильное значение порта приложения в конфигурации Dapr.

    • Если вы используете приложения контейнеров Azure, укажите порт приложения в Bicep:

      DaprConfig: {
         ...
         appPort: <DAPR_APP_PORT>
         ...
      }
      
    • Если вы используете среду Kubernetes, задайте заметку dapr.io/app-port :

      annotations:
         ...
         dapr.io/app-port: "<DAPR_APP_PORT>"
         ...
      
    • Если вы разрабатываете локально, убедитесь, что вы устанавливаете --app-port при запуске приложения-функции с помощью Dapr:

      dapr run --app-id functionapp --app-port <DAPR_APP_PORT> --components-path <COMPONENTS_PATH> -- func host start 
      

Следующие шаги

Дополнительные сведения о Dapr.