Краткое руководство. Создание функции C# в Azure из командной строки
В этой статье используются средства командной строки для создания функции С#, которая отвечает на HTTP-запросы. После тестирования кода в локальной среде его необходимо развернуть в бессерверной среде Функций Azure.
В этой статье создается функция, активировающая HTTP, которая выполняется в .NET 8 в изолированном рабочем процессе. Сведения о версиях .NET, поддерживаемых для функций C#, см. в статье "Поддерживаемые версии". Существует также версия этой статьи для Visual Studio Code.
Выполнение этого краткого руководства предполагает небольшую дополнительную плату в несколько центов США в учетной записи Azure.
Настройка локальной среды
Перед началом работы убедитесь, что у вас есть такие компоненты.
Пакет SDK для .NET 8.0.
Один из следующих инструментов для создания ресурсов Azure:
Azure CLI версии 2.4 или более поздней.
Модуль Azure PowerShell 5.9.0 или более поздней версии.
Вам также потребуется учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
Установка основных инструментов Функций Azure
Рекомендуемый способ установки основных средств зависит от операционной системы локального компьютера разработки.
Следующая процедура устанавливает Core Tools версии v4.x с помощью установщика Windows (MSI). Дополнительные сведения о других установщиках на основе пакетов, см. в файле readme для Core Tools.
Скачайте и запустите установщик Core Tools для используемой версии Windows:
- v4.x — Windows 64-разрядная версия (рекомендуется для отладки Visual Studio Code требуется 64-разрядная версия.)
- v4.x - Windows 32-bit
Если вы ранее использовали установщик Windows (MSI) для установки основных инструментов в Windows, перед установкой последней версии удалите старую версию из команды "Добавить программы".
Создание локального проекта службы "Функции"
В Функциях Azure проект функций представляет собой контейнер для одной или нескольких отдельных функций, каждая из которых реагирует на конкретный триггер. Все функции в проекте совместно используют те же локальные конфигурации и конфигурации размещения. В этом разделе вы создадите проект функций, содержащий одну функцию.
Выполните команду
func init
, как показано ниже, чтобы создать проект функций в папке с именем LocalFunctionProj с указанной средой выполнения:func init LocalFunctionProj --worker-runtime dotnet-isolated --target-framework net8.0
Перейдите в папку проекта:
cd LocalFunctionProj
Эта папка содержит различные файлы проекта, в том числе файлы конфигурации local.settings.json и host.json. Файл local.settings.json может содержать секреты, скачанные из Azure, поэтому файл по умолчанию исключен из системы управления версиями в GITIGNORE-файле.
Добавьте функцию в проект с помощью приведенной ниже команды, где аргумент
--name
— уникальное имя функции (HttpExample), а аргумент--template
позволяет указать триггер функции (HTTP).func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"
Команда
func new
создает файл кода HttpExample.cs.
Проверка содержимого файла (дополнительно)
При необходимости можно сразу перейти к локальному запуску функции и просмотреть содержимое файла позже.
HttpExample.cs
HttpExample.cs содержит Run
метод, который получает данные запроса в переменной req
в виде объекта HttpRequest. Этот параметр украшен httpTriggerAttribute, чтобы определить поведение триггера.
using System.Net;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace Company.Function
{
public class HttpExample
{
private readonly ILogger<HttpExample> _logger;
public HttpExample(ILogger<HttpExample> logger)
{
_logger = logger;
}
[Function("HttpExample")]
public IActionResult Run([HttpTrigger(AuthorizationLevel.AuthLevelValue, "get", "post")] HttpRequest req)
{
_logger.LogInformation("C# HTTP trigger function processed a request.");
return new OkObjectResult("Welcome to Azure Functions!");
}
}
}
Возвращаемый объект — это объект IActionResult , содержащий данные, которые передаются обратно в ответ HTTP.
Дополнительные сведения см. в статье Триггеры и привязки HTTP в службе "Функции Azure".
Локальное выполнение функции
Выполните функцию, запустив локальное хост-приложение среды выполнения Функций Azure из папки LocalFunctionProj:
func start
Ближе к концу выходных данных появятся следующие строки:
... Now listening on: http://0.0.0.0:7071 Application started. Press Ctrl+C to shut down. Http Functions: HttpExample: [GET,POST] http://localhost:7071/api/HttpExample ...
Примечание.
Если результат HttpExample не похож на пример выше, скорее всего, вы запустили основное приложение из папки, отличной от корневой папки проекта. В этом случае остановите хост-приложение клавишами CTRL+C, перейдите в корневую папку проекта и снова выполните указанную выше команду.
Скопируйте URL-адрес функции из этого выходных
HttpExample
данных в браузер и перейдите по URL-адресу функции, и вы должны получить приветственное сообщение Функции Azure.Когда все будет готово, нажмите клавиши Ctrl+C и выберите
y
, чтобы отключить хост-приложение функции.
Создание вспомогательных ресурсов Azure для функции
Прежде чем развернуть код функции в Azure, необходимо создать три ресурса:
- группу ресурсов — логический контейнер связанных ресурсов;
- учетную запись хранения, которая используется для сохранения состояния и других сведений о функциях;
- Приложение-функция, которое предоставляет окружение для выполнения кода вашей функции. Оно сопоставляется с локальным проектом функций и позволяет группировать функции в логические единицы, чтобы упростить развертывание, масштабирование и совместное использование ресурсов, а также управление ими.
Чтобы создать эти элементы, выполните следующие команды: Поддерживается Azure CLI и PowerShell.
Войдите в Azure, если вы еще этого не сделали:
az login
Чтобы войти в учетную запись Azure, выполните команду az login.
Создайте группу ресурсов с именем
AzureFunctionsQuickstart-rg
в нужном регионе.az group create --name AzureFunctionsQuickstart-rg --location <REGION>
Чтобы создать группу ресурсов, выполните команду az group create. В приведенной выше команде замените
<REGION>
на ближайший к вам регион. Укажите его код, полученный с помощью команды az account list-locations.В группе ресурсов и регионе создайте учетную запись хранения общего назначения:
az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group AzureFunctionsQuickstart-rg --sku Standard_LRS --allow-blob-public-access false
Создайте учетную запись хранения с помощью команды az storage account create.
В предыдущем примере замените
<STORAGE_NAME>
соответствующим именем, которое является уникальным в службе хранилища Azure. Имена должны содержать от трех до 24 символов и только в нижнем регистре.Standard_LRS
указывает учетную запись общего назначения, которая поддерживается Функциями.
Внимание
Учетная запись хранения используется для хранения важных данных приложения, иногда включая сам код приложения. Необходимо ограничить доступ от других приложений и пользователей к учетной записи хранения.
Создайте приложение-функцию в Azure:
az functionapp create --resource-group AzureFunctionsQuickstart-rg --consumption-plan-location <REGION> --runtime dotnet-isolated --functions-version 4 --name <APP_NAME> --storage-account <STORAGE_NAME>
Чтобы создать приложение-функцию в Azure, выполните команду az functionapp create.
В предыдущем примере замените
<STORAGE_NAME>
именем учетной записи, использованной на предыдущем шаге, и измените<APP_NAME>
на глобально уникальное имя, подходящее вам.<APP_NAME>
также является доменом DNS по умолчанию для приложения-функции.Эта команда создает приложение-функцию, работающее в указанной языковой среде выполнения в рамках плана использования Функций Azure, который не предусматривает плату за объем, используемый здесь. Команда также создает связанный экземпляр приложение Azure Insights в той же группе ресурсов, с помощью которой можно отслеживать приложение-функцию и просматривать журналы. Дополнительные сведения см. в разделе Мониторинг функций Azure. Этот экземпляр не создает затраты, пока вы не активируете его.
Развертывание проекта функций в Azure
После успешного создания приложения-функции в Azure теперь можно развернуть проект локальных функций с помощью func azure functionapp publish
команды.
В корневой папке проекта выполните следующую func azure functionapp publish
команду:
func azure functionapp publish <APP_NAME>
В этом примере следует заменить <APP_NAME>
именем приложения. Успешное развертывание показывает результаты, аналогичные следующим выходным данным (усеченным для простоты):
... Getting site publishing info... Creating archive for current directory... Performing remote build for functions project. ... Deployment successful. Remote build succeeded! Syncing triggers... Functions in msdocs-azurefunctions-qs: HttpExample - [httpTrigger] Invoke url: https://msdocs-azurefunctions-qs.azurewebsites.net/api/httpexample
Вызов функции в Azure
Функция использует триггер HTTP и поддерживает запросы GET, поэтому ее необходимо вызывать через HTTP-запрос к URL-адресу. Это проще всего сделать в браузере.
Скопируйте полный URL-адрес вызова Invoke URL, показанный в выходных данных команды публикации, в адресную строку браузера. При переходе к этому URL-адресу в браузере должны отображаться выходные данные, аналогичные данным при локальном запуске функции.
Выполните следующую команду, чтобы просмотреть журналы потоковой передачи в режиме, близком к реальному времени:
func azure functionapp logstream <APP_NAME>
В отдельном окне терминала или в браузере снова вызовите удаленную функцию. В окне терминала отображается подробный журнал выполнения функции в Azure.
Очистка ресурсов
Если вы намерены перейти к следующему шагу и добавить выходную привязку очереди службы хранилища Azure, можете сохранить все ресурсы, которые пригодятся на этом этапе.
В противном случае используйте следующую команду, чтобы удалить группу ресурсов и все содержащиеся в ней ресурсы и избежать дополнительных расходов.
az group delete --name AzureFunctionsQuickstart-rg