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

Завершено

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Установка пакета npm для устойчивых функций

Так как мы создадим устойчивые функции 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. В разделе «Выбор шаблона» в поле «Фильтр» введите Durable Functions 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;
    });
    

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

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

  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"
    }
    

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