Подключение функций к службе хранилища Azure с помощью Visual StudioConnect functions to Azure Storage using Visual Studio

Функции Azure позволяют выполнять подключение служб Azure и других ресурсов к функциям без необходимости написания кода для интеграции.Azure Functions lets you connect Azure services and other resources to functions without having to write your own integration code. Эти привязки, которые представляют как входные, так и выходные данные, объявляются в определении функции.These bindings, which represent both input and output, are declared within the function definition. Данные привязок предоставляются функции в качестве параметров.Data from bindings is provided to the function as parameters. Триггер является специальным типом входных привязок.A trigger is a special type of input binding. Хотя функция обладает только одним триггером, она может состоять из нескольких входных и выходных привязок.Although a function has only one trigger, it can have multiple input and output bindings. Дополнительные сведения см. в статье Основные понятия триггеров и привязок в Функциях Azure.To learn more, see Azure Functions triggers and bindings concepts.

В этой статье приведены сведения об использовании Visual Studio для подключения функции, которая была создана в рамках [предыдущей статьи], к службе хранилища Azure.This article shows you how to use Visual Studio to connect the function you created in the previous quickstart article to Azure Storage. Выходная привязка, которая была добавлена в эту функцию, записывает данные HTTP-запроса в сообщение очереди Хранилища очередей Azure.The output binding that you add to this function writes data from the HTTP request to a message in an Azure Queue storage queue.

Большинство привязок требуют сохраненную строку подключения, которая будет использоваться Функциями Azure для доступа к привязанным службам.Most bindings require a stored connection string that Functions uses to access the bound service. Чтобы упростить процесс, вам следует использовать учетную запись хранения, созданную в приложении-функции.To make it easier, you use the Storage account that you created with your function app. Подключение к этой учетной записи уже хранится в параметрах приложения под названием AzureWebJobsStorage.The connection to this account is already stored in an app setting named AzureWebJobsStorage.

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

Перед началом работы с этой статьей необходимо выполнить следующие действия:Before you start this article, you must:

Загрузка параметров приложения-функцииDownload the function app settings

В предыдущей статье вы создавали приложение-функцию и соответствующую учетную запись хранения в Azure.In the previous quickstart article, you created a function app in Azure along with the required Storage account. Строка подключения данной учетной записи надежно хранится в параметрах приложения в Azure.The connection string for this account is stored securely in app settings in Azure. В этой статье вы напишете сообщения в очередь хранилища в пределах одной учетной записи.In this article, you write messages to a Storage queue in the same account. Чтобы подключить учетную запись хранения при локальном выполнении функции, необходимо загрузить параметры приложения в файл local.settings.json.To connect to your Storage account when running the function locally, you must download app settings to the local.settings.json file.

  1. Щелкните правой кнопкой мыши проект в обозревателе решений и выберите пункт Опубликовать.In Solution Explorer, right-click the project and select Publish.

  2. В разделе Действия выберите Изменение параметров Службы приложений Azure.Under Actions, select Edit Azure App Service Settings.

    Изменение параметров приложения

  3. В разделе AzureWebJobsStorage скопируйте строковое значение Remote в строку Local, а затем нажмите кнопку ОК.Under AzureWebJobsStorage, copy the Remote string value to Local, and then select OK.

Привязка хранилища, которая использует для подключения параметр AzureWebJobsStorage, теперь может подключаться к Хранилищу очередей при локальном запуске.The storage binding, which uses the AzureWebJobsStorage setting for the connection, can now connect to your Queue storage when running locally.

Регистрация расширений привязкиRegister binding extensions

Так как вы используете выходную привязку Хранилища очередей, перед запуском проекта необходимо установить расширение привязок службы хранилища.Because you're using a Queue storage output binding, you need the Storage bindings extension installed before you run the project. За исключением триггеров HTTP и таймера, привязки реализованы в виде пакетов расширений.Except for HTTP and timer triggers, bindings are implemented as extension packages.

  1. В меню Инструменты выберите Диспетчер пакетов NuGet > Консоль диспетчера пакетов.From the Tools menu, select NuGet Package Manager > Package Manager Console.

  2. В консоли выполните команду Install-Package для установки расширения службы хранилища.In the console, run the following Install-Package command to install the Storage extensions:

    Install-Package Microsoft.Azure.WebJobs.Extensions.Storage -Version 3.0.6
    

Теперь вы можете добавить выходную привязку службы хранилища к проекту.Now, you can add the storage output binding to your project.

Добавление выходной привязкиAdd an output binding

В проекте библиотеки классов C# привязки определяются как атрибуты привязки в методе функции.In a C# class library project, the bindings are defined as binding attributes on the function method. Затем на основе этих атрибутов автоматически создается файл function.json, обязательный для службы Функции Azure.The function.json file required by Functions is then auto-generated based on these attributes.

Откройте в проекте файл HttpExample.cs и добавьте следующий параметр в определение метода Run:Open the HttpExample.cs project file and add the following parameter to the Run method definition:

[Queue("outqueue"),StorageAccount("AzureWebJobsStorage")] ICollector<string> msg,

Параметр msg относится к типу ICollector<T>, который представляет собой коллекцию сообщений, записываемых в выходную привязку после завершения функции.The msg parameter is an ICollector<T> type, which represents a collection of messages that are written to an output binding when the function completes. В этом случае выходные данные представляют собой очередь хранилища с именем outqueue.In this case, the output is a storage queue named outqueue. Строка подключения к учетной записи хранения задана атрибутом StorageAccountAttribute.The connection string for the Storage account is set by the StorageAccountAttribute. Он указывает параметр, который содержит строку подключения к учетной записи хранения и может применяться на уровне класса, метода или параметра.This attribute indicates the setting that contains the Storage account connection string and can be applied at the class, method, or parameter level. В этом случае вы можете опустить StorageAccountAttribute, так как уже используете учетную запись хранения по умолчанию.In this case, you could omit StorageAccountAttribute because you are already using the default storage account.

Определение метода Run должно выглядеть следующим образом:The Run method definition should now look like the following:

[FunctionName("HttpExample")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, 
    [Queue("outqueue"),StorageAccount("AzureWebJobsStorage")] ICollector<string> msg, 
    ILogger log)

Добавление кода, который использует выходную привязкуAdd code that uses the output binding

После определения привязки можно использовать name привязки для доступа к ней как к атрибуту в сигнатуре функции.After the binding is defined, you can use the name of the binding to access it as an attribute in the function signature. После использования выходной привязки вам для проверки подлинности, получения ссылки на очередь или записи данных больше не потребуется код пакета SDK службы хранилища Azure.By using an output binding, you don't have to use the Azure Storage SDK code for authentication, getting a queue reference, or writing data. Вместо вас эти задачи будут выполнены выходной привязкой очереди и средой выполнения функции.The Functions runtime and queue output binding do those tasks for you.

Добавьте код, который использует объект выходной привязки msg для создания сообщения очереди.Add code that uses the msg output binding object to create a queue message. Сделайте это перед возвращением метода.Add this code before the method returns.

if (!string.IsNullOrEmpty(name))
{
    // Add a message to the output collection.
    msg.Add(string.Format("Name passed to the function: {0}", name));
}

На этом этапе ваша функция должна выглядеть следующим образом:At this point, your function should look as follows:

[FunctionName("HttpExample")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, 
    [Queue("outqueue"),StorageAccount("AzureWebJobsStorage")] ICollector<string> msg, 
    ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string name = req.Query["name"];

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic data = JsonConvert.DeserializeObject(requestBody);
    name = name ?? data?.name;

    if (!string.IsNullOrEmpty(name))
    {
        // Add a message to the output collection.
        msg.Add(string.Format("Name passed to the function: {0}", name));
    }
    return name != null
        ? (ActionResult)new OkObjectResult($"Hello, {name}")
        : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
}

Локальное выполнение функцииRun the function locally

  1. Чтобы запустить функцию, нажмите клавишу F5 в Visual Studio.To run your function, press F5 in Visual Studio. Возможно, вам потребуется включить исключение брандмауэра, чтобы инструменты могли обрабатывать HTTP-запросы.You might need to enable a firewall exception so that the tools can handle HTTP requests. Уровни авторизации никогда не применяются при запуске функции в локальной среде.Authorization levels are never enforced when you run a function locally.

  2. Скопируйте URL-адрес функции из выходных данных среды выполнения функций Azure.Copy the URL of your function from the Azure Functions runtime output.

    Локальная среда выполнения Azure

  3. Вставьте URL-адрес для HTTP-запроса в адресной строке браузера.Paste the URL for the HTTP request into your browser's address bar. Добавьте строку запроса ?name=<YOUR_NAME> в этот URL-адрес и выполните запрос.Append the query string ?name=<YOUR_NAME> to this URL and run the request. Ниже показан ответ в браузере на локальный запрос GET, возвращенный функцией:The following image shows the response in the browser to the local GET request returned by the function:

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

  4. Чтобы остановить отладку, нажмите клавиши Shift+F5 в Visual Studio.To stop debugging, press Shift+F5 in Visual Studio.

При первом использовании выходной привязки среда выполнения Функции создает в вашей учетной записи хранения новую очередь с именем outqueue.A new queue named outqueue is created in your storage account by the Functions runtime when the output binding is first used. Чтобы убедиться, что очередь и сообщение в ней были созданы, вам нужно будет использовать Cloud Explorer.You'll use Cloud Explorer to verify that the queue was created along with the new message.

Проверка выходной очередиExamine the output queue

  1. В меню Представление в Visual Studio выберите Cloud Explorer.In Visual Studio from the View menu, select Cloud Explorer.

  2. В Cloud Explorer разверните подписку Azure и учетные записи хранения, а затем разверните учетную запись хранения, используемую вашей функцией.In Cloud Explorer, expand your Azure subscription and Storage Accounts, then expand the storage account used by your function. Если вы не можете вспомнить имя учетной записи хранения, проверьте параметр строки подключения AzureWebJobsStorage в файле local.settings.json.If you can't remember the storage account name, check the AzureWebJobsStorage connection string setting in the local.settings.json file.

  3. Разверните узел Очереди, а затем дважды щелкните очередь с именем outqueue, чтобы просмотреть содержимое очереди в Visual Studio.Expand the Queues node, and then double-click the queue named outqueue to view the contents of the queue in Visual Studio.

    В ней содержится сообщение о том, что выходная привязка очереди создана при запуске функции, активируемой HTTP.The queue contains the message that the queue output binding created when you ran the HTTP-triggered function. Если вы вызывали функцию со значением по умолчанию nameAzure, в сообщении очереди будет указано Имя переданной функции: Azure.If you invoked the function with the default name value of Azure, the queue message is Name passed to the function: Azure.

    Сообщение очереди в Обозревателе службы хранилища Azure

  4. Запустите функцию еще раз, отправьте другой запрос, и в очереди появится новое сообщение.Run the function again, send another request, and you'll see a new message appear in the queue.

Теперь пора выполнить повторную публикацию обновленного приложения-функции в Azure.Now, it's time to republish the updated function app to Azure.

Повторное развертывание и проверка обновленного приложенияRedeploy and verify the updated app

  1. В обозревателе решений щелкните правой кнопкой мыши проект и выберите Опубликовать, а затем нажмите кнопку Опубликовать, чтобы повторно опубликовать проект в Azure.In Solution Explorer, right-click the project and select Publish, then choose Publish to republish the project to Azure.

  2. По завершении развертывания вы можете снова использовать браузер для проверки повторно развернутой функции.After deployment completes, you can again use the browser to test the redeployed function. Как и раньше, добавьте строку запроса &name=<yourname> к URL-адресу.As before, append the query string &name=<yourname> to the URL.

  3. Еще раз просмотрите сообщение в очереди хранилища, чтобы убедиться, что выходная привязка снова создает новое сообщение в очереди.Again view the message in the storage queue to verify that the output binding again generates a new message in the queue.

Очистка ресурсовClean up resources

Другие краткие руководства в этой коллекции созданы на основе этого документа.Other quickstarts in this collection build upon this quickstart. Если вы планируете работать с последующими краткими руководствами или с любыми службами, созданными при работе с этим руководством, не очищайте ресурсы.If you plan to work with subsequent quickstarts, tutorials, or with any of the services you have created in this quickstart, do not clean up the resources.

Под ресурсами в Azure подразумеваются приложения-функции, функции, учетные записи хранения и т. д.Resources in Azure refer to function apps, functions, storage accounts, and so forth. Они объединяются в группы ресурсов, при удалении которых удаляются и все данные в них.They're grouped into resource groups, and you can delete everything in a group by deleting the group.

Вы создали ресурсы для завершения этих кратких руководств.You created resources to complete these quickstarts. Вам могут быть выставлены счета за эти ресурсы в зависимости от состояния учетной записи и цен на службы.You may be billed for these resources, depending on your account status and service pricing. Если вам больше не нужны ресурсы, их можно удалить следующим образом:If you don't need the resources anymore, here's how to delete them:

  1. На портале Azure перейдите на страницу Resource group (Группа ресурсов).In the Azure portal, go to the Resource group page.

    Чтобы перейти на эту страницу со страницы приложения-функции, выберите вкладку Обзор, а затем выберите ссылку в разделе Resource group (Группа ресурсов).To get to that page from the function app page, select the Overview tab and then select the link under Resource group.

    Выберите группу ресурсов, которую требуется удалить со страницы приложения-функции.

    Чтобы перейти на эту страницу с панели управления, выберите Resource groups (Группы ресурсов), а затем выберите группу ресурсов, которая использовалась в этой статье.To get to that page from the dashboard, select Resource groups, and then select the resource group that you used for this article.

  2. На странице Группа ресурсов просмотрите список включенных ресурсов и убедитесь, что именно их нужно удалить.In the Resource group page, review the list of included resources, and verify that they're the ones you want to delete.

  3. Выберите Удалить группу ресурсов и следуйте инструкциям.Select Delete resource group, and follow the instructions.

    Удаление может занять несколько минут.Deletion may take a couple of minutes. После этого на несколько секунд появится уведомление.When it's done, a notification appears for a few seconds. Кроме того, можно выбрать значок колокольчика в верхней части страницы, чтобы просмотреть уведомление.You can also select the bell icon at the top of the page to view the notification.

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

Вы обновили функцию, активируемую HTTP, которую теперь можно использовать для записи данных в очередь хранилища.You've updated your HTTP triggered function to write data to a Storage queue. Дополнительные сведения см. в статье Разработка Функций Azure с помощью Visual Studio.To learn more about developing Functions, see Develop Azure Functions using Visual Studio.

Затем для мониторинга приложения-функции следует включить Application Insights.Next, you should enable Application Insights monitoring for your function app: