Поделиться через


Краткое руководство. Добавление флагов функций в приложение Функции Azure

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

Библиотеки управления функциями .NET расширяют возможности платформы за счет поддержки флагов функций. Эти библиотеки создаются на основе системы конфигурации .NET. Они интегрируются со службой "Конфигурация приложений" посредством поставщика конфигураций .NET.

Примечание.

В настоящее время эта статья поддерживает только приложения-функции C#, которые работают в .NET 6.

Необходимые компоненты

Добавление флага компонента

Добавьте флаг компонента с именем Beta в хранилище Конфигурация приложений и оставьте метку и описание со значениями по умолчанию. Дополнительные сведения о добавлении флагов компонентов в хранилище с помощью портал Azure или интерфейса командной строки см. в разделе "Создание флага функции".

Включение флага функции с именем Beta

Создание проекта Функций Azure

С помощью шаблона проекта Функций Azure в Visual Studio можно создать проект библиотеки классов C#, а затем опубликовать его в приложении-функции в Azure. Приложение-функция позволяет группировать функции в логические единицы и упростить развертывание, масштабирование и совместное использование ресурсов, а также управление ими.

  1. В строке меню Visual Studio выберите Файл>Создать>Проект.

  2. В разделе Создать новый проект введите в поле поиска слово функции, выберите шаблон Функции Azure, а затем нажмите кнопку Далее.

  3. В разделе Настроить новый проект введите Имя проекта, а затем выберите команду Создать. Имя приложения-функции должно быть допустимым в качестве пространства имен C#, поэтому не используйте символы подчеркивания, дефисы и другие символы, не являющиеся буквенно-цифровыми.

  4. Для параметров в области Создание нового приложения Функций Azure используйте значения, указанные в таблице ниже.

    Параметр значение Описание
    Версия .NET .NET 6 Это значение создает проект функции с внутрипроцессным выполнением в среде выполнения Функций Azure версии 4.x. Дополнительные сведения см. в обзоре версий среды выполнения Функций Azure.
    Function template (Шаблон функции) Триггер HTTP С помощью этого значения создается функция, которая активируется с помощью HTTP-запроса.
    Учетная запись хранения (AzureWebJobsStorage) Эмулятор хранения Поскольку для приложения-функции в Azure требуется учетная запись хранения, она назначается или создается при публикации проекта в Azure. При активации с помощью HTTP-запроса не используется строка подключения учетной записи хранения Azure. Для всех остальных типов активации требуется допустимая строка подключения к учетной записи хранения Azure.
    Уровень авторизации Анонимный. Создаваемую функцию может активировать любой клиент без указания ключа. Этот параметр авторизации позволяет легко тестировать новые функции. Дополнительные сведения о ключах и авторизации см. в разделе Ключи авторизации, а также в обзоре привязок HTTP и веб-перехватчика.

    Снимок экрана: параметры проекта Функции Azure


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

  5. Нажмите кнопку Создать, чтобы создать проект функции и функцию, активируемую с помощью HTTP.

Подключение к хранилищу Конфигурации приложений

В этом проекте будет использоваться внедрение зависимостей в Функциях Azure .NET. При этом в качестве дополнительного источника конфигурации, в котором хранятся флаги функций, добавляется служба "Конфигурация приложений Azure".

  1. Щелкните проект правой кнопкой мыши и выберите Управление пакетами NuGet. На вкладке Обзор найдите и добавьте в проект следующие пакеты NuGet:

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

    using System;
    using Microsoft.Azure.Functions.Extensions.DependencyInjection;
    using Microsoft.Extensions.Configuration;
    using Microsoft.FeatureManagement;
    
    [assembly: FunctionsStartup(typeof(FunctionApp.Startup))]
    
    namespace FunctionApp
    {
        class Startup : FunctionsStartup
        {
            public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
            {
            }
    
            public override void Configure(IFunctionsHostBuilder builder)
            {
            }
        }
    }
    
  3. Обновите метод ConfigureAppConfiguration и добавьте поставщик Конфигурации приложений Azure в качестве дополнительного источника конфигурации, вызвав AddAzureAppConfiguration().

    Метод UseFeatureFlags() указывает поставщику загрузить флаги функций. Для всех флагов функций срок действия кэша по умолчанию истекает через 30 секунд, а затем выполняется повторная проверка на предмет изменений. Интервал времени, по истечении которого действие прекращается, можно обновить. Для этого задайте свойство FeatureFlagsOptions.CacheExpirationInterval, передаваемое в метод UseFeatureFlags.

    public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
    {
        builder.ConfigurationBuilder.AddAzureAppConfiguration(options =>
        {
            options.Connect(Environment.GetEnvironmentVariable("ConnectionString"))
                   .Select("_")
                   .UseFeatureFlags();
        });
    }
    

    Совет

    Если вы не хотите, чтобы в приложение загружались какие-либо конфигурации, кроме флагов функций, можно вызвать Select("_"), чтобы загрузить только несуществующий фиктивный ключ "_". Если не вызвать метод Select, по умолчанию будут загружены все значения ключей конфигурации в хранилище службы "Конфигурация приложений".

  4. Обновите метод Configure, чтобы службы Конфигурации приложений Azure и диспетчер функций были доступны посредством внедрения зависимостей.

    public override void Configure(IFunctionsHostBuilder builder)
    {
        builder.Services.AddAzureAppConfiguration();
        builder.Services.AddFeatureManagement();
    }
    
  5. Откройте файл Function1.cs и добавьте указанные ниже пространства имен.

    using System.Linq;
    using Microsoft.FeatureManagement;
    using Microsoft.Extensions.Configuration.AzureAppConfiguration;
    

    Добавьте конструктор для получения экземпляров _featureManagerSnapshot и IConfigurationRefresherProvider с помощью внедрения зависимостей. Из IConfigurationRefresherProvider можно получить экземпляр IConfigurationRefresher.

    private readonly IFeatureManagerSnapshot _featureManagerSnapshot;
    private readonly IConfigurationRefresher _configurationRefresher;
    
    public Function1(IFeatureManagerSnapshot featureManagerSnapshot, IConfigurationRefresherProvider refresherProvider)
    {
        _featureManagerSnapshot = featureManagerSnapshot;
        _configurationRefresher = refresherProvider.Refreshers.First();
    }
    
  6. Обновите метод Run, чтобы изменить значение отображаемого сообщения в зависимости от состояния флага функции.

    Метод TryRefreshAsync вызывается в начале вызова Функций для обновления флагов функций. Это не будет работать, если время истечения срока действия кэша не достигнуто. Удалите оператор await, если вы предпочитаете, чтобы флаги функций обновлялась без блокировки текущего вызова Функций. В этом случае при последующих вызовах Функций будет поступать обновленное значение.

    [FunctionName("Function1")]
    public async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
        ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");
    
        await _configurationRefresher.TryRefreshAsync();
    
        string message = await _featureManagerSnapshot.IsEnabledAsync("Beta")
                ? "The Feature Flag 'Beta' is turned ON"
                : "The Feature Flag 'Beta' is turned OFF";
    
        return (ActionResult)new OkObjectResult(message);
    }
    

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

  1. Задайте переменную среды с именем ConnectionString, где значение является строкой подключения, полученной ранее в хранилище службы "Конфигурация приложений" в разделе Ключи доступа. Если вы используете командную строку Windows, выполните следующую команду и перезапустите командную строку, чтобы изменения вступили в силу:

        setx ConnectionString "connection-string-of-your-app-configuration-store"
    

    Если вы используете Windows PowerShell, выполните следующую команду:

        $Env:ConnectionString = "connection-string-of-your-app-configuration-store"
    

    Если вы используете macOS или Linux, выполните следующую команду:

        export ConnectionString='connection-string-of-your-app-configuration-store'
    
  2. Чтобы проверить работу функции, нажмите клавишу F5. Если будет предложено, примите запрос от Visual Studio на скачивание и установку основных инструментов решения "Функции Azure" (CLI). Кроме того, возможно, вам понадобиться включить исключение брандмауэра, чтобы инструменты могли обрабатывать HTTP-запросы.

  3. Скопируйте URL-адрес функции из выходных данных среды выполнения функций Azure.

    Отладки рассматриваемой в этом кратком руководстве функции в VS

  4. Вставьте URL-адрес запроса в адресную строку браузера. На следующем рисунке показан ответ, указывающий, что флажок бета-версии компонента отключен.

    Флаг функции, рассматриваемый в этом кратком руководстве, отключен

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

  6. Выберите Диспетчер компонентов и измените состояние ключа Beta на Вкл.

  7. Обновите приложение браузера несколько раз. Когда окно времени обновления проходит, страница изменится, чтобы указать, что включен флаг функции бета-версия , как показано на рисунке ниже.

    Флаг функций, рассматриваемый в этом кратком руководстве, включен

Примечание.

Пример кода, используемый в этом руководстве, можно скачать в репозитории GitHub для службы "Конфигурация приложений Azure".

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

Если вы не планируете в дальнейшем использовать ресурсы, созданные при работе с этой статьей, удалите созданную группу ресурсов, чтобы избежать расходов.

Внимание

Удаление группы ресурсов — процесс необратимый. Группа ресурсов и все содержащиеся в ней ресурсы удаляются без возможности восстановления. Будьте внимательны, чтобы случайно не удалить не те ресурсы или группу ресурсов. Если ресурсы для работы с этой статьей созданы в группе ресурсов, которая содержит другие нужные ресурсы, удалите каждый ресурс отдельно в соответствующей области ресурса, чтобы не удалять группу ресурсов.

  1. Войдите на портал Azure и выберитеГруппы ресурсов.
  2. Введите имя группы ресурсов в поле Фильтровать по имени.
  3. В списке результатов выберите имя группы ресурсов, чтобы просмотреть общие сведения.
  4. Выберите команду Удалить группу ресурсов.
  5. Подтвердите операцию удаления группы ресурсов. Введите имя группы ресурсов, которую необходимо удалить, и нажмите Удалить.

Через некоторое время группа ресурсов и все ее ресурсы будут удалены.

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

В этом кратком руководстве вы создали флаг компонента и использовали его с Функции Azure.

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

Дополнительные сведения об управлении флагами функций в Конфигурация приложений Azure см. в следующем руководстве.

Для полного запуска функции библиотеки управления функциями .NET перейдите к следующему документу.