Создание устойчивой функции с помощью JavaScriptCreate your first durable function in JavaScript

Устойчивые функции — это расширение Функций Azure, которое позволяет писать функции с отслеживанием состояния в беcсерверной среде.Durable Functions is an extension of Azure Functions that lets you write stateful functions in a serverless environment. Расширение автоматически управляет состоянием, создает контрольные точки и перезагружается.The extension manages state, checkpoints, and restarts for you.

Примечание

Это руководство по Устойчивым функциям 1.x.This is a tutorial for Durable Functions 1.x. Чтобы начать работу с Устойчивыми функциями 2.x, ознакомьтесь с документацией по версиям Устойчивых функций.To use Durable Functions 2.x, see the Durable Functions versions documentation.

В этой статье описано, как использовать расширение Функций Azure в Visual Studio Code, чтобы локально создать и тестировать устойчивую функцию hello world.In this article, you learn how to use the Visual Studio Code Azure Functions extension to locally create and test a "hello world" durable function. Эта функция будет организовывать и объединять в цепочку вызовы других функций.This function will orchestrate and chain together calls to other functions. Затем вы опубликуете код функции в Azure.You then publish the function code to Azure.

Выполнение устойчивых функций в Azure

Предварительные требованияPrerequisites

Для работы с этим руководством сделайте следующее:To complete this tutorial:

  • Установите Visual Studio Code.Install Visual Studio Code.

  • Убедитесь, что используется последняя версия Azure Functions Core Tools.Make sure you have the latest version of the Azure Functions Core Tools.

  • Убедитесь, что на компьютере с ОС Windows установлен и запущен эмулятор службы хранилища Azure.On a Windows computer, verify you have the Azure Storage Emulator installed and running. На компьютере с ОС Mac или Linux необходимо использовать саму учетную запись хранения Azure.On a Mac or Linux computer, you must use an actual Azure storage account.

  • Убедитесь, что установлена версия Node.js 8.0 или более поздняя.Make sure that you have version 8.0 or a later version of Node.js installed.

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начать работу.If you don't have an Azure subscription, create a free account before you begin.

Установка расширения "Функции Azure"Install the Azure Functions extension

Расширение "Функции Azure" позволяет создавать и тестировать функции, а затем развертывать их в Azure.You can use the Azure Functions extension to create and test functions and deploy them to Azure.

  1. В Visual Studio Code выберите Расширения и выполните поиск по запросу Функции Azure или щелкните эту ссылку в Visual Studio Code.In Visual Studio Code, open Extensions and search for azure functions, or select this link in Visual Studio Code.

  2. Выберите Установить, чтобы установить расширение для Visual Studio Code:Select Install to install the extension for Visual Studio Code:

    Установка расширения "Функции Azure"

  3. После установки щелкните значок Azure на панели "Действия".After installation, select the Azure icon on the Activity bar. Вы увидите область Azure Functions (Функции Azure) на боковой панели.You should see an Azure Functions area in the Side Bar.

    Область Функций Azure на боковой панели

Создание локального проектаCreate your local project

В этом разделе вы используете Visual Studio Code. чтобы создать локальный проект Функций Azure.In this section, you use Visual Studio Code to create a local Azure Functions project.

  1. В Visual Studio Code нажмите клавишу F1, чтобы открыть палитру команд.In Visual Studio Code, press F1 to open the command palette. В палитре команд найдите и щелкните Azure Functions: Create new project....In the command palette, search for and select Azure Functions: Create new project....

  2. Выберите расположение для рабочей области проекта и нажмите кнопку Выбрать.Choose a directory location for your project workspace and choose Select.

    Примечание

    Рассматриваемые в этой статье шаги выполняются вне рабочей области.These steps were designed to be completed outside of a workspace. В этом случае не нужно указывать папку проекта, которая является частью рабочей области.In this case, do not select a project folder that is part of a workspace.

  3. Следуя инструкциям, введите следующие сведения для выбранного языка:Following the prompts, provide the following information for your desired language:

    promptPrompt ЗначениеValue ОписаниеDescription
    Select a language for your function app project (Выберите язык для проекта приложения-функции)Select a language for your function app project JavaScriptJavaScript Создание локального проекта службы "Функции" для Node.jsCreate a local Node.js Functions project.
    Выбор версииSelect a version Функции Azure версии 2Azure Functions v2 Этот параметр отображается, только если вы еще не установили Core Tools.You only see this option when the Core Tools aren't already installed. В этом случае Core Tools устанавливается при первом запуске приложения.In this case, Core Tools are installed the first time you run the app.
    Select a template for your project's first function (Выберите шаблон для первой функции вашего проекта)Select a template for your project's first function Триггер HTTPHTTP trigger Создание функции, активируемой HTTP, в новом приложении-функции.Create an HTTP triggered function in the new function app.
    Provide a function name (Укажите имя функции)Provide a function name HTTPTriggerHttpTrigger Нажмите клавишу "ВВОД", чтобы использовать имя по умолчанию.Press Enter to use the default name.
    Уровень авторизацииAuthorization level КомпонентFunction Уровень авторизации function требует предоставления ключа доступа при вызове конечной точки HTTP функции.The function authorization level requires you to supply an access key when calling your function's HTTP endpoint. Это усложняет доступ к незащищенной конечной точке.This makes it more difficult to access an unsecured endpoint. Дополнительные сведения см. Ключи авторизации.To learn more, see Authorization keys.
    Select how you would like to open your project (Выберите, как вы хотели бы открыть свой проект)Select how you would like to open your project Добавление в рабочую областьAdd to workspace Создает приложение-функцию в текущей рабочей области.Creates the function app in the current workspace.

При необходимости Visual Studio Code устанавливает Azure Functions Core Tools.Visual Studio Code installs the Azure Functions Core Tools, if needed. Он также создаст проект приложения-функции в новой рабочей области.It also creates a function app project in a new workspace. Проект будет содержать файлы конфигурации host.json и local.settings.json.This project contains the host.json and local.settings.json configuration files. Он также создает папку HttpExample, содержащую файл определения function.json, файл index.js и файл Node.js, содержащий код функции.It also creates an HttpExample folder that contains the function.json definition file and the index.js file, a Node.js file that contains the function code.

В корневой папке также создается файл package.json.A package.json file is also created in the root folder.

Установка пакета npm для расширения "Устойчивые функции"Install the Durable Functions npm package

  1. Установите пакет npm durable-functions, выполнив команду npm install durable-functions в корневом каталоге приложения-функции.Install the durable-functions npm package by running npm install durable-functions in the root directory of the function app.

Создание функцийCreating your functions

Теперь мы создадим три функции, необходимые для начала работы с Устойчивыми функциями: начальный объект HTTP, оркестратор и функция действия.We'll now create the three functions you need to get started with Durable Functions: an HTTP starter, an orchestrator, and an activity function. Начальный объект HTTP будет инициировать все решение, а оркестратор распределяет задания в различные функции действий.The HTTP starter will initiate your entire solution, and the orchestrator will dispatch work to various activity functions.

Начальный объект HTTPHTTP starter

Сначала создайте функцию, активируемую протоколом HTTP, которая запускает оркестрацию устойчивых функций.First, create an HTTP triggered function that starts a durable function orchestration.

  1. Выберите Azure: Functions (Azure: Функции) и щелкните значок Создать функцию.From Azure: Functions, choose the Create Function icon.

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

  2. Выберите папку со своим проектом приложения-функции и выберите шаблон функции Начальный объект HTTP устойчивых функций .Select the folder with your function app project and select the Durable Functions HTTP Starter function template.

    Выбор шаблона начального объекта HTTP

  3. Оставьте имя по умолчанию DurableFunctionsHttpStart и нажмите клавишу ** ВВОД, после чего укажите способ аутентификации Анонимно.Leave the default name as DurableFunctionsHttpStart and press ****Enter**, then select Anonymous authentication.

    Анонимная аутентификация

Мы создали точку входа в нашу устойчивую функцию.We've now created an entry-point into our Durable Function. Теперь добавим оркестратор.Let's add an orchestrator.

Оркестратор:Orchestrator

Теперь мы создали оркестратор для координации функций действий.Now, we'll create an orchestrator to coordinate activity functions.

  1. Выберите Azure: Functions (Azure: Функции) и щелкните значок Создать функцию.From Azure: Functions, choose the Create Function icon.

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

  2. Выберите папку со своим проектом приложения-функции и выберите шаблон функции Оркестратор устойчивых функций.Select the folder with your function app project and select the Durable Functions orchestrator function template. Оставьте имя по умолчанию DurableFunctionsOrchestrator.Leave the name as the default "DurableFunctionsOrchestrator"

    Выбор шаблона оркестратора

Мы добавили оркестратор для координации функций действий.We've added an orchestrator to coordinate activity functions. Теперь добавим функцию действия, на которое делается ссылка.Let's now add the referenced activity function.

ДействиеActivity

Теперь мы создадим функцию действия, чтобы фактически выполнить работу решения.Now, we'll create an activity function to actually carry out the work of the solution.

  1. Выберите Azure: Functions (Azure: Функции) и щелкните значок Создать функцию.From Azure: Functions, choose the Create Function icon.

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

  2. Выберите папку со своим проектом приложения-функции и выберите шаблон функции Действие устойчивых функций.Select the folder with your function app project and select the Durable Functions activity function template. Оставьте имя по умолчанию Hello.Leave the name as the default "Hello".

    Выбор шаблона действия

Теперь мы добавили все компоненты, необходимые для начала оркестрации и объединения в цепочку функций действий.We've now added all components needed to start off an orchestration and chain together activity functions.

Локальное тестирование функцииTest the function locally

Основные инструменты службы "Функции Azure" позволяют запускать проекты функций Azure на локальном компьютере разработчика.Azure Functions Core Tools lets you run an Azure Functions project on your local development computer. Вам будет предложено установить эти инструменты при первом запуске функции из Visual Studio Code.You're prompted to install these tools the first time you start a function from Visual Studio Code.

  1. На компьютере с ОС Windows запустите эмулятор службы хранилища Azure и присвойте свойству AzureWebJobsStorage в local.settings.json значение UseDevelopmentStorage=true.On a Windows computer, start the Azure Storage Emulator and make sure that the AzureWebJobsStorage property of local.settings.json is set to UseDevelopmentStorage=true.

    Если используется Storage Emulator 5.8, убедитесь, что для свойства AzureWebJobsSecretStorageType в файле local.settings.json задано значение files.For Storage Emulator 5.8 make sure that the AzureWebJobsSecretStorageType property of local.settings.json is set to files. На компьютере с ОС Mac или Linux свойству AzureWebJobsStorage необходимо задать значение строки подключения существующей учетной записи хранения Azure.On a Mac or Linux computer, you must set the AzureWebJobsStorage property to the connection string of an existing Azure storage account. Далее в этой статье описывается создание учетной записи хранения.You create a storage account later in this article.

  2. Чтобы протестировать созданную функцию, установите точку останова в коде функции и нажмите клавишу F5 для запуска проекта приложения-функции.To test your function, set a breakpoint in the function code and press F5 to start the function app project. Выходные данные основных инструментов отображаются на панели Terminal (Терминал).Output from Core Tools is displayed in the Terminal panel. Если вы впервые используете устойчивые функции, расширение устойчивых функций установлено, и сборка может занять несколько секунд.If this is your first time using Durable Functions, the Durable Functions extension is installed and the build might take a few seconds.

    Примечание

    Для расширения "Устойчивые функции" в JavaScript требуется версия расширения Microsoft.Azure.WebJobs.Extensions.DurableTask 1.7.0 или более поздняя.JavaScript Durable Functions require version 1.7.0 or greater of the Microsoft.Azure.WebJobs.Extensions.DurableTask extension. Выполните следующую команду из корневой папки приложения-функции Azure, чтобы установить расширение "Устойчивые функции": func extensions install -p Microsoft.Azure.WebJobs.Extensions.DurableTask -v 1.7.0Run the following command from the root folder of your Azure Functions app to install the Durable Functions extension func extensions install -p Microsoft.Azure.WebJobs.Extensions.DurableTask -v 1.7.0

  3. На панели Terminal (Терминал) скопируйте URL-адрес конечной точки функции, активируемой HTTP-запросом.In the Terminal panel, copy the URL endpoint of your HTTP-triggered function.

    Локальные выходные данные в Azure

  4. Замените {functionName} на DurableFunctionsOrchestrator.Replace {functionName} with DurableFunctionsOrchestrator.

  5. Отправьте запрос HTTP POST к конечной точке URL-адреса, используя средства наподобие Postman или cURL.Using a tool like Postman or cURL, send an HTTP POST request to the URL endpoint.

    Полученный ответ является начальным результатом функции HTTP, что сообщает об успешном начале работы устойчивой оркестрации.The response is the initial result from the HTTP function letting us know the durable orchestration has started successfully. Он еще не конечный результат оркестрации.It is not yet the end result of the orchestration. Ответ включает несколько полезных URL-адреса.The response includes a few useful URLs. Теперь запросите состояние оркестрации.For now, let's query the status of the orchestration.

  6. Скопируйте значение URL-адреса для statusQueryGetUri, вставьте его в адресную строку панели браузера и выполните запрос.Copy the URL value for statusQueryGetUri and paste it in the browser's address bar and execute the request. Кроме того, вы можете воспользоваться Postman для выдачи запроса GET.Alternatively you can also continue to use Postman to issue the GET request.

    Запрос будет запрашивать экземпляр оркестрации для состояния.The request will query the orchestration instance for the status. Вам нужно получить итоговый ответ, который показывает, что экземпляр выполнен и содержит выходные данные или результаты устойчивой функции.You should get an eventual response, which shows us the instance has completed, and includes the outputs or results of the durable function. Он выглядит следующим образом:It looks like:

    {
        "instanceId": "d495cb0ac10d4e13b22729c37e335190",
        "runtimeStatus": "Completed",
        "input": null,
        "customStatus": null,
        "output": [
            "Hello Tokyo!",
            "Hello Seattle!",
            "Hello London!"
        ],
        "createdTime": "2018-11-08T07:07:40Z",
        "lastUpdatedTime": "2018-11-08T07:07:52Z"
    }
    
  7. В VS Code нажмите клавиши Shift + F5, чтобы остановить отладку.To stop debugging, press Shift + F5 in VS Code.

Убедившись, что функция выполняется правильно на локальном компьютере, опубликуйте проект в Azure.After you've verified that the function runs correctly on your local computer, it's time to publish the project to Azure.

Вход в AzureSign in to Azure

Прежде чем публиковать приложение, необходимо войти в Azure.Before you can publish your app, you must sign in to Azure.

  1. Если вы не выполнили вход, щелкните значок Azure на панели действий, а затем в области Azure: Функции выберите Войти в Azure. Если у вас нет учетной записи, можно создать бесплатную учетную запись Azure.If you aren't already signed in, choose the Azure icon in the Activity bar, then in the Azure: Functions area, choose Sign in to Azure.... If you don't already have one, you can Create a free Azure account.

    Ответ функции localhost в браузере

    Если вы уже выполнили вход, перейдите к следующему разделу.If you're already signed in, go to the next section.

  2. При появлении запроса в браузере выберите учетную запись Azure и войдите в нее с помощью учетных данных.When prompted in the browser, choose your Azure account and sign in using your Azure account credentials.

  3. Выполнив вход, можно закрыть новое окно браузера.After you've successfully signed in, you can close the new browser window. Подписки, принадлежащие учетной записи Azure, отображаются на боковой панели.The subscriptions that belong to your Azure account are displayed in the Side bar.

Публикация проекта в AzurePublish the project to Azure

В этом разделе показано создание приложения-функции и сопутствующих ресурсов в подписке Azure и последующее развертывание кода.In this section, you create a function app and related resources in your Azure subscription and then deploy your code.

  1. Щелкните значок Azure на панели действий, а затем в области Azure: Функции выберите кнопку Deploy to function app... (Развертывание в приложение-функцию).Choose the Azure icon in the Activity bar, then in the Azure: Functions area, choose the Deploy to function app... button.

    Публикация проекта в Azure

  2. Введите следующие сведения по соответствующим запросам:Provide the following information at the prompts:

    • Выбрать подписку. Выберите подписку, которую нужно использовать.Select subscription: Choose the subscription to use. Если у вас только одна подписка, вы не увидите этот параметр.You won't see this if you only have one subscription.

    • Select Function App in Azure (Выбор приложения-функции в Azure). Выберите + Create new Function App (не Advanced).Select Function App in Azure: Choose + Create new Function App (not Advanced). Эта статья не поддерживает процесс расширенной публикации.This article doesn't support the advanced publishing flow.

    Важно!

    Публикация в существующее приложение-функцию перезаписывает содержимое этого приложения в Azure.Publishing to an existing function app overwrites the content of that app in Azure.

    • Enter a globally unique name for the function app (Ввод глобально уникального имени для приложения-функции). Введите имя, допустимое в пути URL-адреса.Enter a globally unique name for the function app: Type a name that is valid in a URL path. Имя, которое вы вводите, проверяется, чтобы убедиться, что оно уникально в функциях Azure.The name you type is validated to make sure that it's unique in Azure Functions.
    • Select a runtime (Выбор среды выполнения). Выберите версию Python, которая запускалась локально.Select a runtime: Choose the version of Python you've been running on locally. Вы можете использовать команду python --version, чтобы проверить установленную версию.You can use the python --version command to check your version.
    • Select a runtime (Выбор среды выполнения). Выберите версию Node.js, которая запускалась локально.Select a runtime: Choose the version of Node.js you've been running on locally. Вы можете использовать команду node --version, чтобы проверить установленную версию.You can use the node --version command to check your version.
    • Select a location for new resources (Выбор расположения для новых ресурсов). Для повышения производительности выберите регион рядом с вами.Select a location for new resources: For better performance, choose a region near you.
  3. После завершения в Azure в вашей подписке создаются следующие ресурсы:When completed, the following Azure resources are created in your subscription:

    • Группа ресурсов . Содержит все созданные ресурсы Azure.Resource group: Contains all of the created Azure resources. Имя основывается на имени приложения-функции.The name is based on your function app name.
    • Учетная запись хранения . Стандартная учетная запись хранения создается с уникальным именем, основанным на имени приложения-функции.Storage account: A standard Storage account is created with a unique name that is based on your function app name.
    • План размещения . План потребления создается в регионе "Западная часть США" для размещения бессерверного приложения-функции.Hosting plan: A consumption plan is created in the West US region to host your serverless function app.
    • Приложение-функция. Проект развертывается и выполняется в этом новом приложении-функции.Function app: Your project is deployed to and runs in this new function app.
    • Application Insights. Экземпляр, который подключен к приложению-функции, создается на основе имени функции.Application Insights: An instance, which is connected to your function app, is created based on your function name.

    После создания приложения-функции и применения пакета развертывания отобразится уведомление.A notification is displayed after your function app is created and the deployment package is applied.

  4. Выберите View Output (Просмотреть выходные данные) в уведомлении, чтобы просмотреть результаты создания и развертывания ресурсов Azure.Select View Output in this notification to view the creation and deployment results, including the Azure resources that you created. Если вы пропустили уведомление, щелкните значок колокольчика в правом нижнем углу, чтобы снова просмотреть его.If you miss the notification, select the bell icon in the lower right corner to see it again.

    Создание уведомления о завершении

Тестирование функции в AzureTest your function in Azure

  1. Скопируйте URL-адрес HTTP-триггера на панели Output (Выходные данные).Copy the URL of the HTTP trigger from the Output panel. URL-адрес для вызова функции, активируемой HTTP-запросом, должен быть указан в таком формате:The URL that calls your HTTP-triggered function should be in the following format:

     http://<functionappname>.azurewebsites.net/orchestrators/<functionname>
    
  2. Вставьте этот URL-адрес HTTP-запроса в адресную строку браузера.Paste this new URL for the HTTP request into your browser's address bar. При использовании опубликованного приложения ответ состояния должен быть таким же, как и ранее.You should get the same status response as before when using the published app.

Дальнейшие действияNext steps

Вы создали и опубликовали приложение устойчивой функции JavaScript с помощью Visual Studio Code.You have used Visual Studio Code to create and publish a JavaScript durable function app.