Краткое руководство. Создание функции C# в Azure из командной строки

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

В этой статье создается функция, активировающая HTTP, которая выполняется в .NET 8 в изолированном рабочем процессе. Сведения о версиях .NET, поддерживаемых для функций C#, см. в статье "Поддерживаемые версии". Существует также версия этой статьи для Visual Studio Code.

Выполнение этого краткого руководства предполагает небольшую дополнительную плату в несколько центов США в учетной записи Azure.

Настройка локальной среды

Перед началом работы убедитесь, что у вас есть такие компоненты.

  • Пакет SDK для .NET 8.0.

  • Один из следующих инструментов для создания ресурсов Azure:

Вам также потребуется учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .

Установка основных инструментов Функций Azure

Рекомендуемый способ установки основных средств зависит от операционной системы локального компьютера разработки.

Следующая процедура устанавливает Core Tools версии v4.x с помощью установщика Windows (MSI). Дополнительные сведения о других установщиках на основе пакетов, см. в файле readme для Core Tools.

Скачайте и запустите установщик Core Tools для используемой версии Windows:

Если вы ранее использовали установщик Windows (MSI) для установки основных инструментов в Windows, перед установкой последней версии удалите старую версию из команды "Добавить программы".

Создание локального проекта службы "Функции"

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

  1. Выполните команду func init, как показано ниже, чтобы создать проект функций в папке с именем LocalFunctionProj с указанной средой выполнения:

    func init LocalFunctionProj --worker-runtime dotnet-isolated --target-framework net8.0
    
  2. Перейдите в папку проекта:

    cd LocalFunctionProj
    

    Эта папка содержит различные файлы проекта, в том числе файлы конфигурации local.settings.json и host.json. Файл local.settings.json может содержать секреты, скачанные из Azure, поэтому файл по умолчанию исключен из системы управления версиями в GITIGNORE-файле.

  3. Добавьте функцию в проект с помощью приведенной ниже команды, где аргумент --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".

Локальное выполнение функции

  1. Выполните функцию, запустив локальное хост-приложение среды выполнения Функций 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, перейдите в корневую папку проекта и снова выполните указанную выше команду.

  2. Скопируйте URL-адрес функции из этого выходных HttpExample данных в браузер и перейдите по URL-адресу функции, и вы должны получить приветственное сообщение Функции Azure.

  3. Когда все будет готово, нажмите клавиши Ctrl+C и выберите y, чтобы отключить хост-приложение функции.

Создание вспомогательных ресурсов Azure для функции

Прежде чем развернуть код функции в Azure, необходимо создать три ресурса:

  • группу ресурсов — логический контейнер связанных ресурсов;
  • учетную запись хранения, которая используется для сохранения состояния и других сведений о функциях;
  • Приложение-функция, которое предоставляет окружение для выполнения кода вашей функции. Оно сопоставляется с локальным проектом функций и позволяет группировать функции в логические единицы, чтобы упростить развертывание, масштабирование и совместное использование ресурсов, а также управление ими.

Чтобы создать эти элементы, выполните следующие команды: Поддерживается Azure CLI и PowerShell.

  1. Войдите в Azure, если вы еще этого не сделали:

    az login
    

    Чтобы войти в учетную запись Azure, выполните команду az login.

  2. Создайте группу ресурсов с именем AzureFunctionsQuickstart-rg в нужном регионе.

    az group create --name AzureFunctionsQuickstart-rg --location <REGION>
    

    Чтобы создать группу ресурсов, выполните команду az group create. В приведенной выше команде замените <REGION> на ближайший к вам регион. Укажите его код, полученный с помощью команды az account list-locations.

  3. В группе ресурсов и регионе создайте учетную запись хранения общего назначения:

    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 указывает учетную запись общего назначения, которая поддерживается Функциями.

Важно!

Учетная запись хранения используется для хранения важных данных приложения, иногда включая сам код приложения. Необходимо ограничить доступ от других приложений и пользователей к учетной записи хранения.

  1. Создайте приложение-функцию в 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 Аналитика в той же группе ресурсов, с помощью которой можно отслеживать приложение-функцию и просматривать журналы. Дополнительные сведения см. в разделе Мониторинг функций Azure. Этот экземпляр не создает затраты, пока вы не активируете его.

Развертывание проекта функций в Azure

После того как вы успешно создадите приложение-функцию в Azure, вы сможете развернуть локальный проект функций с помощью команды func azure functionapp publish.

В следующем примере замените <APP_NAME> на имя своего приложения.

func azure functionapp publish <APP_NAME>

Команда publish показывает результаты, аналогичные приведенным ниже (усечены для простоты):

...

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

Следующие шаги