Упражнение. Создание рабочего процесса с использованием Устойчивых функций

Завершено

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

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

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

  2. В меню портала Azure или на домашней странице в разделе Службы Azure выберите Создать ресурс. Откроется панель Создание ресурса.

  3. Найдите и выберите приложение-функцию. Откроется панель Создание приложения-функции.

  4. На вкладке Основные сведения введите указанные ниже значения для каждого параметра.

    Параметр значение Описание
    Сведения о проекте
    Отток подписок Подписка Concierge Указывает подписку, в которой создается приложение-функция.
    Группа ресурсов В раскрывающемся списке выберите [имя группы ресурсов песочницы]. Указывает имя группы ресурсов, в которой создается приложение-функция. Мы создадим приложение-функцию в группе ресурсов песочницы, назначенной при активации песочницы, а именно [имя группы ресурсов песочницы].
    Сведения об экземпляре
    Имя приложения-функции [Глобально уникальное имя] Указывает имя, которое идентифицирует ваше новое приложение-функцию. Допустимые символы: a-z, 0-9 и -.
    Публикация Код Указывает, что функция использует код вместо контейнера.
    Стек среды выполнения Node.js Указывает, что пример кода в этом модуле написан на JavaScript.
    Версия 20 LTS Указывает версию стека среды выполнения.
    Область/регион [Выберите из списка ниже этого раздела] Выберите ближайший к вам регион, который также является одним из допустимых регионов песочницы, перечисленных ниже.
    Операционная система
    Операционная система Windows Указывает операционную систему, на которой размещается приложение-функция.
    План
    Тип плана Потребление (бессерверный) Указывает план размещения, который определяет выделение ресурсов в приложении-функции. В плане потребления по умолчанию ресурсы добавляются динамически в соответствии с потребностями функций. В этой модели бессерверного размещения вы платите только за время выполнения функций.

    Бесплатная песочница позволяет создавать ресурсы в ряде глобальных регионов Azure. При создании ресурсов выберите регион из следующего списка.

    • западная часть США 2
    • Центрально-южная часть США
    • Центральная часть США
    • Восточная часть США
    • Западная Европа
    • Southeast Asia
    • Восточная Япония
    • Южная Бразилия
    • Юго-Восточная часть Австралии
    • Центральная Индия
  5. Нажмите кнопку "Далее" : служба хранилища.

  6. На вкладке служба хранилища введите следующие значения для каждого параметра.

    Параметр значение Описание
    Память
    Storage account [Глобально уникальное имя] Указывает имя новой учетной записи хранения, используемой приложением-функцией (которая не должна соответствовать глобально уникальному имени, указанному для функции). служба хранилища имена учетных записей должны быть от 3 до 24 символов длиной и могут содержать только цифры и строчные буквы. Это диалоговое окно автоматически заполняет поле уникальным именем, которое динамически создается. Тем не менее вы можете использовать другое имя или даже существующую учетную запись.
  7. Нажмите кнопку "Далее: сеть". Примите значения по умолчанию.

  8. Нажмите кнопку "Далее" — мониторинг.

  9. На вкладке Мониторинг введите указанное ниже значение параметра.

    Параметр значение Описание
    Application Insights
    Включить Application Insights Нет Указывает, что приложение Аналитика отключено для этого модуля.
  10. Щелкните Проверка и создание и проверьте настроенные параметры. Если параметры вас устраивают, щелкните Создать для подготовки и развертывания приложения-функции.

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

Установка пакета npm durable-functions

Так как мы создадим Устойчивые функции JavaScript, необходимо установить durable-functions пакет npm. Для этого выполните следующие действия.

  1. Щелкните Перейти к ресурсу, чтобы выбрать приложение-функцию. Откроется панель Приложение-функция.

  2. В области меню слева в разделе "Средства разработки" выберите Служба приложений редактор (предварительная версия) и выберите "Открыть редактор". В новом окне браузера отобразится панель "Быстрый запуск" Редактора службы приложений.

  3. В области меню слева выделите папку WWWROOT.

  4. В меню панели инструментов слева щелкните значок Открыть консоль.

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

  5. Создайте файл package.json.

    • Введите в консоли следующие команды, чтобы создать JSON-файл и открыть его в редакторе.

      touch package.json
      open package.json
      
    • Добавьте следующий код.

      {
        "name": "example",
        "version": "1.0.0"
      }
      

      Замените example именем своего пакета. Например, для этого можно использовать ранее указанное глобально уникальное имя функции.

  6. Нажмите клавиши CTRL+S, чтобы сохранить файл, а затем — CTRL+Q, чтобы закрыть документ.

  7. Вернитесь на портал Azure.

  8. В меню слева в разделе Средства разработки выберите Консоль. Появится панель Консоль вашего приложения-функции.

  9. Выполните следующую команду:

    npm install durable-functions
    

    Эта команда указывает диспетчеру пакетов узла установить durable-functions пакет и все необходимые зависимости. Установка может занять несколько минут, и диспетчер пакетов узлов может отобразить некоторые предупреждения, которые можно игнорировать. Если вам будет предложено установить более новую версию npm, используйте команду, указанную в ошибке, чтобы установить более новую версию, а затем установить durable-functions пакет после установки новой версии.

    Дождитесь завершения установки всех пакетов.

  10. На панели меню слева прокрутите вверх и щелкните Обзор, затем в верхней строке меню выберите Перезапустить и подтвердите согласие на перезапуск, нажав кнопку Да в соответствующем запросе.

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

Создание функции клиента для отправки предложения по разработке проекта

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

  2. На странице "Обзор" выберите вкладку "Функции " в центре экрана.

  3. Нажмите кнопку "Создать" в портал Azure. Откроется панель Создание функции.

  4. В разделе "Выбор шаблона" в поле "Фильтр" введите Устойчивые функции начальный элемент HTTP и выберите этот шаблон из списка. Этот шаблон создает устойчивую функцию, которая выполняется в ответ на HTTP-запрос.

  5. В разделе "Сведения о шаблоне" в поле "Новая функция" введите HttpStart для имени функции и в поле "Уровень авторизации" выберите "Функция", а затем нажмите кнопку "Создать". Для функции отобразится панель HttpStart.

  6. В меню навигации слева в разделе Разработчик выберите Код и тестирование. Для функции отобразится панель Код и тестирование.

    Код для файла index.js отобразится в редакторе. Файл должен иметь примерно следующий вид:

    const df = require("durable-functions");
    
    module.exports = async function (context, req) {
        const client = df.getClient(context);
        const instanceId = await client.startNew(req.params.functionName, undefined, req.body);
    
        context.log(`Started orchestration with ID = '${instanceId}'.`);
    
        return client.createCheckStatusResponse(context.bindingData.req, instanceId);
    };
    
  7. В раскрывающемся меню для файлов функции выберите function.json, чтобы просмотреть привязки, связанные с вашей новой функцией. Здесь будут указаны все требования к проверке подлинности и методы HTTP, которые могут активировать функцию. Этот файл также определяет, что функция запускает процесс оркестрации. Файл должен иметь примерно следующий вид:

    {
      "bindings": [
        {
          "authLevel": "function",
          "name": "req",
          "type": "httpTrigger",
          "direction": "in",
          "route": "orchestrators/{functionName}",
          "methods": [
            "post",
            "get"
          ]
        },
        {
          "name": "$return",
          "type": "http",
          "direction": "out"
        },
        {
          "name": "starter",
          "type": "orchestrationClient",
          "direction": "in"
        }
      ]
    }
    

    Примечание.

    Привязка связывает ресурсы и другие элементы с триггером. Это декларативный механизм, который удаляет необходимость жесткого кода ссылок на другие службы и функции в коде.

Создание функции оркестратора

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

  2. На странице "Обзор" выберите вкладку "Функции" в центре экрана.

  3. В строке меню "Функции" выберите "Создать". Откроется панель Создание функции.

  4. В разделе "Выбор шаблона" в поле "Фильтр" введите Устойчивые функции оркестратор и выберите этот шаблон из списка. Этот шаблон создает устойчивую функцию, координирующую выполнение функций.

  5. В разделе "Сведения о шаблоне" в поле "Новая функция" введите OrchFunction для имени функции, а затем нажмите кнопку "Создать". Появится панель функции OrchFunction.

  6. В меню навигации слева в разделе Разработчик выберите Код и тестирование. Для функции отобразится панель Код и тестирование.

    Код для файла index.js отобразится в редакторе.

  7. Замените существующий код следующим кодом:

    const df = require("durable-functions");
    
    module.exports = df.orchestrator(function* (context) {
        const outputs = [];
    
        /*
        * We will call the approval activity with a reject and an approved to simulate both
        */
    
        outputs.push(yield context.df.callActivity("Approval", "Approved"));
        outputs.push(yield context.df.callActivity("Approval", "Rejected"));
    
        return outputs;
    });
    

    Этот код вызывает функцию действия с именем "Утверждение", которую вы создаете в ближайшее время. Код в функции оркестратора вызывает функцию Approval дважды. Первый раз имитирует принятие предложения, а второй раз проверяет логику отклонения предложения.

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

  8. В верхней строке меню выберите Сохранить, чтобы сохранить новую функцию.

Создание функции действия

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

  2. На странице "Обзор" выберите вкладку "Функции" в центре экрана.

  3. В строке меню "Функции" выберите "Создать". Откроется панель Создание функции.

  4. В разделе "Выбор шаблона" в поле "Фильтр" введите Устойчивые функции действие и выберите этот шаблон из списка. Этот шаблон создает устойчивую функцию, которая выполняется, когда действие вызывается функцией оркестрации.

  5. В разделе "Сведения о шаблоне" в поле "Новая функция" введите утверждение для имени функции, а затем нажмите кнопку "Создать". Появится панель Утверждение вашего приложения-функции.

  6. В меню навигации слева в разделе Разработчик выберите Код и тестирование. Для функции отобразится панель Код и тестирование.

    Код для файла index.js отобразится в редакторе.

  7. Замените существующий код следующим кодом:

    module.exports = async function (context) {
        return `Your project design proposal has been -  ${context.bindings.name}!`;
    };
    

    Эта функция возвращает сообщение с информацией о состоянии предложения. Выражение context.bindings.name равно Accepted или Rejectedв зависимости от параметра, переданного функции из оркестратора. В реальном сценарии вы добавите логику, которая обрабатывает операции принятия или отклонения в этой функции.

  8. В верхней строке меню выберите Сохранить, чтобы сохранить новую функцию.

Проверка запуска рабочего процесса устойчивой функции

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

  2. Выберите вкладку "Функции " в центре страницы.

  3. Выберите функцию HttpStart. Для функции отобразится панель HttpStart.

  4. В верхней строке меню выберите "Получить URL-адрес функции" и скопируйте URL-адрес . URL-адрес должен иметь примерно следующий вид:

    https://example.azurewebsites.net/api/orchestrators/{functionName}?code=AbCdEfGhIjKlMnOpQrStUvWxYz==
    

    Этот URL-адрес используется для запуска функций.

  5. В новом окне браузера откройте скопированный URL-адрес. В URL-адресе замените заполнитель {functionName} на OrchFunction, который должен выглядеть следующим образом:

    https://example.azurewebsites.net/api/orchestrators/OrchFunction?code=AbCdEfGhIjKlMnOpQrStUvWxYz==
    

    Ответное сообщение содержит набор конечных точек URI, с помощью которых можно отслеживать и контролировать выполнение. Это выглядит следующим образом:

    {
      "id": "f0e1d2c3b4a5968778695a4b3c2d1e0f",
      "statusQueryGetUri": "https://example.azurewebsites.net/...",
      "sendEventPostUri": "https://example.azurewebsites.net/...",
      "terminatePostUri": "https://example.azurewebsites.net/...",
      "rewindPostUri": "https://example.azurewebsites.net/...",
      "purgeHistoryDeleteUri": "https://example.azurewebsites.net/..."
    }
    
  6. Скопируйте значение statusQueryGetUri и откройте этот URL-адрес в веб-браузере. В ответ вы должны получить сообщение примерно следующего вида:

    {
      "name": "OrchFunction",
      "instanceId": "f0e1d2c3b4a5968778695a4b3c2d1e0f",
      "runtimeStatus": "Completed",
      "input": null,
      "customStatus": null,
      "output": [
        "Your project design proposal has been -  Approved!",
        "Your project design proposal has been -  Rejected!"
      ],
      "createdTime": "2019-04-16T15:23:03Z",
      "lastUpdatedTime": "2019-04-16T15:23:35Z"
    }
    

    Как вы помните, функция оркестрации дважды выполняет функцию действия. При первом выполнении функции действия указывается, что предложение проекта принято. Во второй раз предложение отклоняется. Функция оркестрации объединяет сообщения из обоих вызовов функций и возвращает их в клиентную функцию.