Руководство по использованию динамической конфигурации в приложении Функций Azure
Конфигурация .NET службы "Конфигурация приложений" поддерживает кэширование и обновление, динамически управляемое активностью приложения. Из этого руководства вы узнаете, как реализовать динамические обновления конфигурации в коде. При этом в качестве основы используется код приложения Функций Azure, представленный в кратких руководствах. Прежде чем продолжить, ознакомьтесь со статьей Краткое руководство. Создание приложения Функций Azure с помощью службы "Конфигурация приложений Azure".
В этом руководстве описано следующее:
- настройка в приложении Функций Azure для обновления конфигурации при изменении данных в хранилище службы "Конфигурации приложений";
- добавление последней конфигурации в вызовы Функций Azure.
Предварительные требования
- Подписка Azure — создайте бесплатную учетную запись.
- Visual Studio с рабочей нагрузкой разработка для Azure
- Средства Функций Azure средства, если они еще не установлены в Visual Studio.
- Ознакомьтесь со статьей Краткое руководство. Создание приложения Функций Azure с помощью службы "Конфигурация приложений Azure".
Перезагрузка данных из App Configuration
Функции Azure поддерживают запуск внутрипроцессно или в изолированном процессе. Основное различие в использовании Конфигурации приложений в этих двух режимах заключается в том, как обновляется конфигурация. Во внутрипроцессном режиме необходимо выполнить вызов в каждой функции, чтобы обновить конфигурацию. В режиме изолированного процесса поддерживается ПО промежуточного слоя. ПО промежуточного слоя Конфигурации приложений, Microsoft.Azure.AppConfiguration.Functions.Worker
, позволяет автоматически обновлять конфигурацию перед выполнением каждой функции.
Обновите код, который подключается к Конфигурации приложений, и добавьте условия обновления данных.
Откройте файл Startup.cs и измените метод
ConfigureAppConfiguration
.public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder) { builder.ConfigurationBuilder.AddAzureAppConfiguration(options => { options.Connect(Environment.GetEnvironmentVariable("ConnectionString")) // Load all keys that start with `TestApp:` and have no label .Select("TestApp:*") // Configure to reload configuration if the registered sentinel key is modified .ConfigureRefresh(refreshOptions => refreshOptions.Register("TestApp:Settings:Sentinel", refreshAll: true)); }); }
Метод
ConfigureRefresh
регистрирует параметр, который будет проверяться на наличие изменений при каждом запуске обновления в приложении. ПараметрrefreshAll
указывает поставщику Конфигурации приложений перезагрузить всю конфигурацию при обнаружении изменений в зарегистрированном параметре.Срок действия кэша для всех параметров, зарегистрированных для обновления, по умолчанию составляет 30 секунд, а затем предпринимается новая попытка обновления. Его можно обновить, вызвав метод
AzureAppConfigurationRefreshOptions.SetCacheExpiration
.Совет
При обновлении нескольких значений ключа в Конфигурации приложений обычно не требуется, чтобы приложение перезагружало конфигурацию до внесения всех изменений. Вы можете зарегистрировать ключ Sentinel и обновить его только после внесения всех остальных изменений конфигурации. Это помогает обеспечить согласованность конфигурации в приложении.
Вы также можете сделать следующее, чтобы свести к минимуму риск несоответствий:
- Спроектируйте приложение таким образом, чтобы была допустима временная несогласованность конфигурации.
- Разогрейте приложение, прежде чем переносить его в режим "в сети" (обслуживание запросов).
- Перенесите конфигурацию по умолчанию в приложении и используйте ее при сбое проверки конфигурации.
- Выберите стратегию обновления конфигурации, которая сводит к минимуму влияние на приложение, например обновление в периоды низкого трафика.
Обновите метод
Configure
, чтобы службы Конфигурации приложений Azure были доступны посредством внедрения зависимостей.public override void Configure(IFunctionsHostBuilder builder) { builder.Services.AddAzureAppConfiguration(); }
Откройте файл Function1.cs и добавьте указанные ниже пространства имен.
using System.Linq; using Microsoft.Extensions.Configuration.AzureAppConfiguration;
Обновите конструктор, чтобы получить экземпляр
IConfigurationRefresherProvider
посредством внедрения зависимостей, благодаря чему можно получить экземплярIConfigurationRefresher
.private readonly IConfiguration _configuration; private readonly IConfigurationRefresher _configurationRefresher; public Function1(IConfiguration configuration, IConfigurationRefresherProvider refresherProvider) { _configuration = configuration; _configurationRefresher = refresherProvider.Refreshers.First(); }
Обновите метод
Run
и оповещение об обновлениях конфигурации, используя методTryRefreshAsync
в начале вызова функций. Это не будет работать, если время истечения срока действия кэша не достигнуто. Удалите операторawait
, если вы предпочитаете, чтобы конфигурация обновлялась без блокировки текущего вызова Функций. В этом случае при последующих вызовах Функций будет поступать обновленное значение.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 keyName = "TestApp:Settings:Message"; string message = _configuration[keyName]; return message != null ? (ActionResult)new OkObjectResult(message) : new BadRequestObjectResult($"Please create a key-value with the key '{keyName}' in App Configuration."); }
Локальное тестирование функции
Задайте переменную среды с именем 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>'
Чтобы проверить работу функции, нажмите клавишу F5. Если будет предложено, примите запрос от Visual Studio на скачивание и установку основных инструментов решения "Функции Azure" (CLI). Кроме того, возможно, вам понадобиться включить исключение брандмауэра, чтобы инструменты могли обрабатывать HTTP-запросы.
Скопируйте URL-адрес функции из выходных данных среды выполнения функций Azure.
Вставьте URL-адрес для HTTP-запроса в адресной строке браузера. На изображении ниже показан ответ в браузере на локальный запрос GET, возвращаемый функцией.
Войдите на портал Azure. Щелкните Все ресурсы и выберите хранилище Конфигурации приложений, которое вы создали по инструкциям из краткого руководства.
Выберите Обозреватель конфигураций и измените значения следующего ключа:
Ключ Значение TestApp:Settings:FontSize Данные из конфигурации приложений Azure. Обновлено Затем создайте ключ Sentinel или измените его значение, если он уже существует, например:
Ключ Значение TestApp:Settings:Sentinel Версия 1 Обновите приложение браузера несколько раз. Если истечение срока действия кэша происходит через 30 секунд, на странице будет отображаться ответ на вызов функций с обновленным значением.
Примечание
Пример кода, используемый в этом руководстве, можно скачать в репозитории GitHub.
Очистка ресурсов
Если вы не планируете в дальнейшем использовать ресурсы, созданные при работе с этой статьей, удалите созданную группу ресурсов, чтобы избежать расходов.
Важно!
Удаление группы ресурсов — процесс необратимый. Группа ресурсов и все содержащиеся в ней ресурсы удаляются без возможности восстановления. Будьте внимательны, чтобы случайно не удалить не те ресурсы или группу ресурсов. Если ресурсы для работы с этой статьей созданы в группе ресурсов, которая содержит другие нужные ресурсы, удалите каждый ресурс отдельно в соответствующей области ресурса, чтобы не удалять группу ресурсов.
- Войдите на портал Azure и выберитеГруппы ресурсов.
- Введите имя группы ресурсов в поле Фильтровать по имени.
- В списке результатов выберите имя группы ресурсов, чтобы просмотреть общие сведения.
- Выберите Удалить группу ресурсов.
- Подтвердите операцию удаления группы ресурсов. Введите имя группы ресурсов, которую необходимо удалить, и нажмите Удалить.
Через некоторое время группа ресурсов и все ее ресурсы будут удалены.
Дальнейшие действия
В рамках этого учебника вы включили в приложении Функций Azure динамическое обновление параметров конфигурации из службы "Конфигурация приложения". Чтобы узнать, как с помощью удостоверения, управляемого Azure, упростить доступ к службе "Конфигурация приложений Azure", перейдите к следующему учебнику.