Вызов Функции Azure из рабочих процессов в Azure Logic Apps

Область применения: Azure Logic Apps (Потребление + Стандартный)

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

  • Расширьте поведение рабочего процесса, выполнив функции, созданные с помощью Node.js или C#.
  • Выполнение вычислений в рабочем процессе.
  • Применение расширенного форматирования или полей вычислений в рабочем процессе.

В этом руководстве показано, как вызвать существующую функцию Azure из рабочего процесса "Потребление" или "Стандартный". Чтобы запустить код без использования Функции Azure, ознакомьтесь со следующей документацией:

Ограничения

  • Только рабочие процессы потребления поддерживают проверку подлинности вызовов функций Azure с помощью управляемого удостоверения с проверкой подлинности Microsoft Entra. Стандартные рабочие процессы в настоящее время не поддерживаются в разделе о том, как включить проверку подлинности для вызовов функций.

  • Azure Logic Apps не поддерживает использование Функций Azure с включенными слотами развертывания. Хотя этот сценарий иногда может работать, это поведение является непредсказуемым и может привести к проблемам с авторизацией, когда рабочий процесс попытается вызвать функцию Azure.

Необходимые компоненты

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

  • Ресурс приложения-функции Azure, содержащий одну или несколько функций Azure.

    • Ресурс приложения-функции и ресурс приложения логики должны находиться в одной подписке Azure.

    • Ресурс приложения-функции должен использовать .NET или Node.js в качестве стека среды выполнения.

    • При добавлении новой функции в приложение-функцию можно выбрать C# или JavaScript.

  • Функция Azure, которую требуется вызвать. Эту функцию можно создать с помощью следующих средств:

    • Портал Azure

    • Visual Studio

    • Visual Studio Code

    • Azure CLI

    • Azure PowerShell

    • Шаблон ARM

    • Функция должна использовать шаблон триггера HTTP.

      Шаблон триггера HTTP может принимать содержимое, которое имеет application/json тип из рабочего процесса приложения логики. При добавлении функции в рабочий процесс в конструкторе отображаются пользовательские функции, созданные из этого шаблона в вашей подписке Azure.

    • Код функции должен включать ответ и полезные данные, которые вы хотите вернуть в рабочий процесс после завершения функции. Объект context ссылается на сообщение, которое рабочий процесс отправляет через параметр действия Функции Azure с именем "Текст запроса" далее в этом руководстве.

      В этом руководстве используется следующая пример функции, которая называется FabrikamAzureFunction:

      module.exports = function (context, data) {
      
         var input = data;
      
         // Function processing logic
         // Function response for later use
         context.res = {
            body: {
              content:"Thank you for your feedback: " + input
            }
         };
         context.done();
      }
      

      Чтобы получить доступ к свойствам объекта context изнутри вашей функции, используйте следующий синтаксис:

      context.body.<property-name>

      Например, чтобы ссылаться на content свойство в объекте context , используйте следующий синтаксис:

      context.body.content

      Этот код также содержит input переменную, которая сохраняет значение из data параметра, чтобы функция может выполнять операции с этим значением. В функциях data JavaScript переменная также является ярлыком.context.body

      Примечание.

      Свойство body здесь применяется к context объекту и не совпадает с маркером тела в выходных данных действия, который также может передаваться в функцию.

    • Функция не может использовать пользовательские маршруты, если вы не определили определение OpenAPI.

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

  • Рабочий процесс приложения логики "Потребление" или "Стандартный", начинающийся с любого триггера.

    В примерах этого руководства используется триггер Outlook Office 365 с именем "При поступлении нового сообщения электронной почты".

  • Чтобы создать и вызвать функцию Azure, которая вызывает другой рабочий процесс, убедитесь, что вторичный рабочий процесс начинается с триггера, предоставляющего вызываемую конечную точку.

    Например, можно запустить рабочий процесс с помощью общего триггера HTTP или запроса или использовать триггер на основе службы, например очереди Azure или сетку событий. В функции отправьте HTTP-запрос POST в URL-адрес триггера и включите полезные данные, которые требуется обработать дополнительный рабочий процесс. Дополнительные сведения см. в разделе "Вызов", "Триггер" или "Вложенные рабочие процессы приложения логики".

Советы по работе с функциями Azure

Поиск функций с помощью определений OpenAPI

Чтобы настроить приложение-функцию, чтобы рабочий процесс смог найти и использовать функции с определениями OpenAPI, выполните следующие действия.

  1. На портале Azure откройте приложение-функцию. Убедитесь в том, что приложение-функция активно выполняется.

  2. В приложении-функции настройте общий доступ к ресурсам между источниками (CORS), чтобы все источники были разрешены, выполнив следующие действия.

    1. В меню приложения-функции в разделе API выберите CORS.

    2. В разделе "Разрешенные источники" добавьте подстановочный знак звездочки (*), но удалите все остальные источники в списке и нажмите кнопку "Сохранить".

      Снимок экрана: портал Azure, панель CORS и подстановочный знак * в разделе

Доступ к значениям свойств внутри HTTP-запросов

Функции на основе веб-перехватчика могут принимать HTTP-запросы в качестве входных данных и передавать эти запросы другим функциям. Например, хотя Azure Logic Apps имеет функции, которые преобразуют значения DateTime, в этом базовом примере функции JavaScript показано, как получить доступ к свойству внутри объекта HTTP-запроса, переданного функции и выполнять операции с этим значением свойства. Чтобы получить доступ к свойствам, которые находятся внутри объекта, в этом примере используется оператор точка (.).

function convertToDateString(request, response){
   var data = request.body;
   response = {
      body: data.date.ToDateString();
   }
}

Ниже приведены процессы, которые выполняются внутри функции.

  1. Функция создает data переменную, а затем назначает body объект, который находится внутри request объекта, переменной. Функция использует оператор dot (.) для ссылки на body объект внутри request объекта:

    var data = request.body;
    
  2. Теперь функция может получить доступ к date свойству через data переменную и преобразовать значение свойства из типа DateTime в тип DateString путем вызова ToDateString() функции. Также в ответе функции она возвращает результат через свойство body.

    body: data.date.ToDateString();
    

После создания функции в Azure выполните действия, чтобы добавить функцию Azure в рабочий процесс.

Передача параметров URI функции

Если необходимо передать параметр URI в функцию, можно использовать параметры запроса в URL-адрес конечной точки функции.

  1. При открытии конструктора рабочих процессов для приложения логики и области сведений о функции в списке дополнительных параметров выберите "Запросы".

    Откроется таблица, в которой можно ввести входные данные параметров в виде пар "ключ-значение".

  2. Введите пару "ключ-значение" для параметра, например:

    Снимок экрана: область сведений о функции с параметром

Добавление функции в рабочий процесс (потребление и стандартные рабочие процессы)

Чтобы вызвать функцию Azure из рабочего процесса, можно добавить такие функции, как любое другое действие в конструкторе.

  1. На портале Azure откройте рабочий процесс приложения логики уровня "Потребление" в конструкторе.

  2. В конструкторе выполните следующие общие действия, чтобы добавить действие Функции Azure с именем Выбор функции Azure.

  3. В области действий "Добавление действия" выполните следующие действия.

    1. В списке приложений-функций выберите приложение-функцию, выберите функцию, а затем нажмите кнопку "Добавить действие", например:

      Снимок экрана: рабочий процесс потребления с выбранным приложением-функцией и функцией.

  4. После появления поля сведений о функции выполните следующие действия.

    1. Для текста запроса укажите входные данные функции, которые должны использовать формат для объекта Нотации объектов JavaScript (JSON), например:

      {"context": <selected-input> }

      Это полезные данные объекта контекста или сообщение, которое рабочий процесс отправляет в функцию.

      • Чтобы выбрать маркеры, представляющие выходные данные из предыдущих шагов, выберите внутри поля "Текст запроса", а затем выберите параметр, чтобы открыть список динамического содержимого (значок молнии).

      • Чтобы создать выражение, выберите внутри поля "Текст запроса", а затем выберите параметр, чтобы открыть редактор выражений (значок формулы).

      В следующем примере указывается объект JSON с content атрибутом и маркером, представляющий выходные данные From из триггера электронной почты в качестве значения текста запроса:

      Снимок экрана: рабочий процесс потребления и функция с примером текста запроса для полезных данных объекта контекста.

      Здесь объект контекста не приводится как строка, что позволяет добавить содержимое объекта напрямую в полезные данные JSON. Ниже приведен полный пример.

      Снимок экрана: рабочий процесс потребления и функция с полным примером текста запроса для полезных данных объекта контекста.

      Если вы предоставляете объект контекста, отличный от маркера JSON, который передает строку, объект JSON или массив JSON, вы получите ошибку. Однако объект контекста можно привести в виде строки, заключив маркер в кавычки ("), например, если вы хотите использовать маркер полученного времени :

      Снимок экрана: рабочий процесс потребления и пример текста запроса, который приводит объект контекста в виде строки.

    2. Чтобы указать другие сведения, например метод для использования, заголовки запросов, параметры запроса или проверку подлинности, откройте список дополнительных параметров и выберите нужные параметры. Варианты проверки подлинности различаются в зависимости от выбранной функции. Дополнительные сведения см. в разделе Включение проверки подлинности для функций.

Включение проверки подлинности для вызовов функций Azure (только рабочие процессы потребления)

Рабочий процесс потребления может использовать управляемое удостоверение для проверки подлинности вызова функции Azure и доступа к ресурсам, защищенным идентификатором Microsoft Entra. Управляемое удостоверение может пройти проверку подлинности без необходимости входа и предоставления учетных данных или секретов. Azure управляет этим удостоверением за вас и помогает защитить учетные данные, потому что вам не нужно предоставлять или сменять секреты. Вы можете настроить назначаемое системой удостоверение или созданное вручную удостоверение, назначаемое пользователем, на уровне ресурса приложения логики. Функция Azure, вызываемая из рабочего процесса, может использовать то же управляемое удостоверение для проверки подлинности.

Примечание.

Только рабочие процессы потребления поддерживают проверку подлинности для вызова функции Azure с помощью управляемого удостоверения и проверки подлинности Microsoft Entra. Стандартные рабочие процессы в настоящее время не включают эту поддержку при использовании действия для вызова функции Azure.

Дополнительные сведения см. в следующей документации:

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

  1. Включите и настройте управляемое удостоверение приложения логики.

  2. Настройте анонимную проверку подлинности для функции.

  3. Найдите необходимые значения для настройки проверки подлинности Microsoft Entra.

  4. Создайте регистрацию приложения для приложения-функции.

Настройка функции для анонимной проверки подлинности (только рабочие процессы потребления)

Чтобы функция использовала управляемое удостоверение приложения логики потребления, необходимо задать для функции уровень anonymousпроверки подлинности. В противном случае рабочий процесс выдает ошибку BadRequest .

  1. На портале Azure найдите и выберите требуемое приложение-функцию.

    В следующих шагах используется пример приложения-функции с именем FabrikamFunctionApp.

  2. В меню ресурсов приложения-функции в разделе Средства разработки выберите Дополнительные инструменты>Перейти.

    Снимок экрана: меню приложения-функции с выбранными параметрами для расширенных инструментов и go.

  3. После открытия страницы Kudu Plus на заголовке веб-сайта Kudu в меню консоли отладки выберите CMD.

    Снимок экрана: страница

  4. После появления следующей страницы в списке папок выберите сайт > wwwroot > ваша_функция.

    В следующих шагах используется пример функции с именем FabrikamAzureFunction.

    Снимок экрана: список папок с открытыми папками для сайта, wwwroot и вашей функции.

  5. Откройте файл function.json для редактирования.

    Снимок экрана: файл function.json с выбранной командой редактирования.

  6. Проверьте, есть ли в объекте bindings свойство authLevel. Если свойство существует, присвойте свойству значение anonymous. В противном случае добавьте это свойство и задайте значение.

    Снимок экрана: объект привязки с свойством authLevel, равным анонимным.

  7. Закончив работу, сохраните параметры. Переходите к следующему разделу.

Найдите необходимые значения для настройки проверки подлинности Microsoft Entra (только рабочие процессы потребления)

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

  1. Найдите идентификатор клиента для клиента Microsoft Entra.

  2. Найдите идентификатор объекта для управляемого удостоверения.

  3. Найдите идентификатор приложения для корпоративного приложения, связанного с управляемым удостоверением.

Поиск идентификатора клиента для клиента Microsoft Entra

Выполните команду PowerShell с именем Get-AzureAccount или в портал Azure выполните следующие действия:

  1. В портал Azure откройте клиент Microsoft Entra.

    В этом руководстве в качестве примера клиента используется Fabrikam .

  2. В меню клиента выберите "Обзор".

  3. Скопируйте идентификатор клиента и сохраните его для последующего использования, например:

    Снимок экрана: страница свойств идентификатора Microsoft Entra с выбранной кнопкой копирования идентификатора клиента.

Поиск идентификатора объекта для управляемого удостоверения

После включения управляемого удостоверения для ресурса приложения логики потребления найдите объект для управляемого удостоверения. Этот идентификатор будет использоваться для поиска связанного приложения Enterprise в клиенте Microsoft Entra.

  1. В меню приложения логики в разделе "Параметры" выберите "Удостоверение", а затем выберите "Назначенная системой" или "Пользователь".

    • Назначено системой

      Скопируйте идентификатор объекта удостоверения (субъекта):

      Снимок экрана: страница удостоверений приложения логики потребления с выбранной вкладкой с именем System Assigned.

    • Назначенный пользователем

      1. Выберите удостоверение:

        Снимок экрана: страница удостоверений приложения логики потребления с выбранной вкладкой с именем

      2. Скопируйте идентификатор объекта удостоверения (субъекта):

        Снимок экрана: страница обзора удостоверения, назначаемого пользователем приложением логики потребления, с выбранным идентификатором объекта (субъекта).

Найдите идентификатор приложения для приложения Azure Enterprise, связанного с управляемым удостоверением.

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

  1. В портал Azure найдите и откройте клиент Microsoft Entra.

  2. В меню клиента в разделе "Управление" выберите корпоративные приложения.

  3. На странице "Все приложения" в поле поиска введите идентификатор объекта для управляемого удостоверения. В результатах найдите соответствующее корпоративное приложение и скопируйте идентификатор приложения:

    Снимок экрана: страница клиента Microsoft Entra с именем

  4. Теперь используйте скопированный идентификатор приложения, чтобы добавить поставщика удостоверений в приложение-функцию.

Добавление поставщика удостоверений для приложения-функции (только рабочие процессы потребления)

Теперь, когда у вас есть идентификатор клиента и идентификатор приложения, вы можете настроить приложение-функцию для использования проверки подлинности Microsoft Entra, добавив поставщика удостоверений и создав регистрацию приложения.

  1. На портале Azure откройте приложение-функцию.

  2. В меню приложения-функции в разделе Параметры выберите Проверка подлинности, а затем — Добавить поставщик удостоверений.

    Снимок экрана: меню приложения-функции со страницей проверки подлинности и выбранным параметром

  3. На панели Добавление поставщика удостоверений в разделе Основное в списке Поставщик удостоверений выберите Microsoft.

  4. В разделе Регистрация приложения для параметра Тип регистрации приложения выберите Укажите сведения о существующей регистрации приложения и введите ранее сохраненные значения.

    Свойство Обязательное поле значение Описание
    Application (client) ID (Идентификатор приложения (клиент)) Да <идентификатор приложения> Уникальный идентификатор, используемый для регистрации приложения. В этом примере используйте идентификатор приложения, скопированный для корпоративного приложения, связанного с управляемым удостоверением.
    Секрет клиента Необязательно, но рекомендуется <секрет-клиента> Значение секрета, которое приложение использует для подтверждения идентификации при запросе токена. Секрет клиента создается и сохраняется в конфигурации приложения как прикрепленный параметр приложения с именем MICROSOFT_PROVIDER_AUTHENTICATION_SECRET.

    — Регулярно поворачивайте секреты и безопасно храните их. Например, управляйте секретами в Azure Key Vault, где можно использовать управляемое удостоверение для извлечения ключа без предоставления несанкционированного пользователя значения. Этот параметр можно обновить, чтобы использовать ссылки на Key Vault.

    — Если вы предоставляете значение секрета клиента, операции входа используют гибридный поток, возвращающий как маркеры доступа, так и маркеры обновления.

    — Если вы не предоставляете секрет клиента, операции входа используют поток неявного предоставления OAuth 2.0. Этот метод напрямую возвращает только маркер идентификатора или маркер доступа. Эти маркеры отправляются поставщиком и хранятся в хранилище маркеров EasyAuth.

    Важно. Из-за рисков безопасности неявный поток предоставления больше не является подходящим методом проверки подлинности. Вместо этого используйте поток кода авторизации с кодом проверки подлинности для Exchange (PKCE) или кодами авторизации одностраничного приложения (SPA).
    Url-адрес издателя No <authentication-endpoint-URL>/<Microsoft-Entra-tenant-ID>/v2.0 Этот URL-адрес перенаправляет пользователей в правильный клиент Microsoft Entra и скачивает соответствующие метаданные, чтобы определить соответствующие ключи подписи маркеров и значение утверждения издателя маркеров. Для приложений, использующих Azure AD версии 1, исключите /v2.0 из URL-адреса.

    Для этого сценария используйте следующий URL-адрес: https://sts.windows.net/<Microsoft-Entra-tenant-ID>
    Разрешенные аудитории токенов No <URI_идентификатора_приложения> URI идентификатора приложения (идентификатор ресурса) для приложения-функции. Если это облачное или серверное приложение и вы хотите разрешить использовать токены проверки подлинности из веб-приложения, добавьте URI идентификатора приложения для веб-приложения. Настроенный идентификатор клиента всегда косвенно считается разрешенной аудиторией.

    В данном сценарии установлено значение https://management.azure.com. Позже можно будет использовать тот же код URI в свойстве Аудитория при настройке действия функции в рабочем процессе для использования управляемого удостоверения.

    Важно. URI идентификатора приложения (идентификатор ресурса) должен точно соответствовать значению, которое ожидает идентификатор Microsoft Entra, включая все необходимые конечные косые черты.

    На этом этапе версия будет выглядеть примерно так.

    Снимок экрана: регистрация приложения логики и поставщика удостоверений для приложения-функции.

    Если вы впервые настраиваете приложение-функцию с поставщиком удостоверений, появится раздел параметров проверки подлинности Служба приложений. Эти параметры определяют реакцию приложения-функции на запросы без проверки подлинности. При выборе значений по умолчанию все запросы перенаправляются для входа с помощью нового поставщика удостоверений. Вы можете изменить это поведение сейчас или настроить параметры позже на главной странице Проверка подлинности, нажав кнопку Изменить рядом с элементом Параметры проверки подлинности. Дополнительные сведения об этих параметрах см. в статье Поток проверки подлинности — проверка подлинности и авторизация в Службе приложений Azure и Функциях Azure.

    В противном случае перейдите к следующему шагу.

  5. Чтобы завершить создание регистрации приложения, нажмите кнопку Добавить.

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

  6. Скопируйте идентификатор приложения (клиента) регистрации приложения, чтобы использовать его позже в свойстве аудитории действия Функции Azure для рабочего процесса.

    Снимок экрана: новый поставщик удостоверений для приложения-функции.

  7. Вернитесь в конструктор и выполните инструкции по проверке подлинности доступа с помощью управляемого удостоверения, используя встроенное действие Функций Azure.

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