Упражнение. Создание рабочего процесса с помощью устойчивых функций
В этом упражнении вы используете пример сценария из предыдущего урока, чтобы узнать, как создать рабочий процесс утверждения на портале Azure с помощью устойчивых функций.
Создайте приложение функции
Войдите на портал Azure с помощью той же учетной записи, что и для активации песочницы.
В меню портала Azure или на главной странице , в разделе услуг Azure , выберите Создать ресурс . Откроется область создания ресурсов .
Найдите и выберите приложение-функцию . Выберите "Потребление", а затем нажмите кнопку "Выбрать ". Откроется область создания приложения-функции .
На вкладке "Основные сведения" введите следующие значения для каждого параметра.
Настройка Ценность Описание Сведения о проекте Подписка Подписка «Консьерж» Указывает подписку, под которой создается новое функциональное приложение. Группа ресурсов В раскрывающемся списке выберите [имя группы ресурсов песочницы] Указывает имя группы ресурсов, в которой необходимо создать приложение-функцию. Мы создадим приложение-функцию в группе ресурсов песочницы, назначенной при активации песочницы, а именно [имя группы ресурсов песочницы] .Сведения об экземпляре Имя функционального приложения [Глобально уникальное имя] Указывает имя, идентифицирующее ваше новое функциональное приложение. Допустимые символы: a-z
,0-9
и-
.Опубликовать Код Указывает, что функция использует код вместо контейнера. Стек среды выполнения Node.js Указывает, что пример кода в этом модуле написан в JavaScript. Версия 20 LTS Указывает версию стека среды выполнения. Область [Выберите из списка ниже этого раздела] Выберите ближайший к вам регион, который также является одним из разрешенных регионов Песочницы , которые следуют. Операционная система Операционная система Виндоус Указывает операционную систему, в которую размещается приложение-функция. План Бесплатная песочница позволяет создавать ресурсы в подмножестве глобальных регионов Azure. Выберите регион из следующего списка при создании ресурсов:
- Западная часть США 2
- Южная часть США
- Центральная часть США
- Восточная часть США
- Западная Европа
- Юго-Восточная Азия
- Восточная Япония
- Южная Бразилия
- Юго-Восточная Австралия
- Центральная Индия
Нажмите кнопку "Далее" — хранилище.
На вкладке хранилища введите следующие значения для каждого параметра.
Настройка Ценность Описание Хранение Учетная запись хранения [Глобально уникальное имя] Указывает имя новой учетной записи хранения, используемой приложением-функцией (которая не должна соответствовать глобально уникальному имени, указанному для функции). Имена учетных записей хранения должны быть от 3 до 24 символов длиной и могут содержать только цифры и строчные буквы. Это диалоговое окно автоматически заполняет поле уникальным именем, которое создается динамически. Однако вы можете использовать другое имя или даже существующую учетную запись. Нажмите кнопку "Далее: сеть". Примите значения по умолчанию.
Нажмите кнопку "Далее" — мониторинг.
На вкладке "Мониторинг" введите следующее значение параметра.
Настройка Ценность Описание Аналитика приложений Активировать Application Insights Нет Указывает, что Application Insights отключен для этого модуля. Выберите "Рецензирование" и "Создать" и просмотрите настроенные параметры. Если вы удовлетворены своими параметрами, выберите "Создать ", чтобы подготовить и развернуть приложение-функцию.
Дождитесь завершения развертывания, прежде чем продолжить. Развертывание может занять несколько минут.
Установка пакета npm для устойчивых функций
Так как мы создадим устойчивые функции JavaScript, необходимо установить пакет durable-functions
npm. Для этого выполните следующие действия.
Выберите «Перейти к ресурсу» для выбора функционального приложения. Открывается панель приложения функций.
В области меню слева в разделе "Средства разработки" выберите редактор службы приложений (предварительная версия) и выберите "Открыть редактор". Панель быстрого запуска редактора службы приложений появится в новом окне браузера.
В области меню слева выделите папку WWWROOT .
В меню слева выберите значок "Открыть консоль ".
Это действие запускает консоль. Эту консоль можно использовать для доступа к веб-серверу, на котором размещаются функции, и писать код для ваших функций.
Создайте файл package.json .
Выполните следующие команды в консоли, чтобы создать новый JSON-файл и открыть его в редакторе.
touch package.json open package.json
Добавьте следующий код.
{ "name": "example", "version": "1.0.0" }
Замените
example
именем пакета. Например, можно использовать глобально уникальное имя, указанное для функции ранее.
Нажмите клавиши CTRL+S , чтобы сохранить файл, а затем ctrl+Q , чтобы закрыть документ.
Вернитесь на портал Azure.
В левой строке меню в разделе "Средства разработки" выберите консоль. Появляется панель консоли для вашего приложения-функции.
Выполните следующую команду:
npm install durable-functions
Эта команда указывает диспетчеру пакетов узла установить пакет
durable-functions
и все необходимые зависимости. Установка может занять несколько минут, и диспетчер пакетов узлов может отобразить некоторые предупреждения, которые можно игнорировать.Заметка
Если вам будет предложено установить более новую версию npm, используйте команду, указанную в ошибке, чтобы установить более новую версию, а затем установить пакет
durable-functions
после установки новой версии.Дождитесь завершения установки всех пакетов.
В левой области меню прокрутите вверх и выберите "Обзор" и в верхней строке меню выберите "Перезапустить", а затем нажмите кнопку "Да ", когда появится запрос на перезагрузку.
Дождитесь завершения перезапуска перед продолжением.
Создание клиентской функции для отправки предложения по проектированию
В меню портала Azure или на домашней странице в разделе "Последние ресурсы" выберите "Просмотреть все" и выберите приложение-функцию. Открывается панель приложения функций.
На странице "Обзор" выберите вкладку "Функции " в центре экрана.
Нажмите кнопку "Создать" на портале Azure . Откроется панель "Создать функцию ".
В разделе «Выбор шаблона» в поле «Фильтр» введите Durable Functions HTTP запуск и выберите этот шаблон из списка. Этот шаблон создает устойчивую функцию, которая выполняется в ответ на HTTP-запрос.
В разделе "Сведения о шаблоне" в поле "Новая функция " введите HttpStart для имени функции и в поле "Уровень авторизации " выберите "Функция", а затем нажмите кнопку "Создать". Откроется область HttpStart для вашей функции.
В области меню слева в разделе "Разработчик" выберите "Код и тест". Область "Код и тест " отображается для функции.
Код для файла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); };
В раскрывающемся списке файлов в функции выберите 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" } ] }
Заметка
Привязка связывает ресурсы и другие элементы с триггером. Это декларативный механизм, который устраняет необходимость жесткого кодирования ссылок на другие службы и функции в вашем коде.
Создание функции оркестратора
В меню портала Azure или на домашней странице в разделе "Последние ресурсы" выберите "Просмотреть все" и выберите приложение-функцию. Открывается панель приложения функций.
На странице "Обзор" выберите вкладку "Функции " в центре экрана.
В строке меню "Функции" выберите "Создать". Откроется панель "Создать функцию ".
В разделе "Выбор шаблона" в поле "Фильтр " введите оркестратор устойчивых функций и выберите этот шаблон из списка. Этот шаблон создает устойчивую функцию, которая управляет выполнением функций.
В разделе "Сведения о шаблоне" в поле "Новая функция " введите OrchFunction для имени функции, а затем нажмите кнопку "Создать". Откроется панель функций OrchFunction .
В области меню слева в разделе "Разработчик" выберите "Код и тест". Область "Код и тест " отображается для функции.
Код для файлаindex.js отображается в редакторе.
Замените существующий код следующим кодом.
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; });
Этот код вызывает функцию действия с именем "Утверждение", которую вы создаете в ближайшее время. Код в функции оркестратора вызывает функцию утверждения дважды. Первый раз имитирует принятие предложения, а второй раз проверяет логику отклонения предложения.
Значение, возвращаемое каждым вызовом, объединяется и передается обратно в клиентскую функцию. В производственной среде функция оркестрации вызывает набор функций действий, которые принимают решение о принятии или отклонении, и возвращает результат этих действий.
В верхней строке меню выберите "Сохранить ", чтобы сохранить новую функцию.
Создайте функцию активности
В меню портала Azure или на домашней странице в разделе "Последние ресурсы" выберите "Просмотреть все" и выберите приложение-функцию. Открывается панель приложения функций.
На странице "Обзор" выберите вкладку "Функции " в центре экрана.
В строке меню "Функции" выберите "Создать". Откроется панель "Создать функцию ".
В разделе "Выбор шаблона" в поле "Фильтр " введите действие устойчивых функций и выберите этот шаблон из списка. Этот шаблон создает устойчивую функцию, которая выполняется при вызове действия функцией оркестратора.
В разделе "Сведения о шаблоне" в поле "Новая функция " введите утверждение для имени функции, а затем нажмите кнопку "Создать". Откроется панель утверждения для приложения-функции.
В области меню слева в разделе "Разработчик" выберите "Код и тест". Область "Код и тест " отображается для функции.
Код для файлаindex.js отображается в редакторе.
Замените существующий код следующим кодом.
module.exports = async function (context) { return `Your project design proposal has been - ${context.bindings.name}!`; };
Эта функция возвращает сообщение, указывающее состояние предложения. Выражение
context.bindings.name
— это либоAccepted
, либоRejected
, в зависимости от параметра, передаваемого функции из оркестратора. В реальном сценарии вы добавите логику, которая обрабатывает операции принятия или отклонения в этой функции.В верхней строке меню выберите "Сохранить ", чтобы сохранить новую функцию.
Убедитесь, что процесс выполнения долговечных функций успешно запускается
В меню портала Azure или на домашней странице в разделе "Последние ресурсы" выберите "Просмотреть все" и выберите приложение-функцию. Открывается панель приложения функций.
Выберите вкладку "Функции " в центре страницы.
Выберите функцию HttpStart . Откроется область HttpStart для вашей функции.
В верхней строке меню выберите "Получить URL-адрес функции " и скопируйте URL-адрес. URL-адрес должен выглядеть следующим образом:
https://example.azurewebsites.net/api/orchestrators/{functionName}?code=AbCdEfGhIjKlMnOpQrStUvWxYz==
Этот URL-адрес используется для запуска функций.
Откройте новое окно браузера и перейдите по 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/..." }
Скопируйте значение 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" }
Помните, что функция оркестрации выполняет функцию действия дважды. При первом выполнении функции действия указывается, что предложение проекта принято. Во второй раз предложение отклоняется. Функция оркестрации объединяет сообщения из обоих вызовов функций и возвращает их в клиентную функцию.