Tutorial: Usar a configuração dinâmica no aplicativo Azure Functions
O provedor de configuração do .NET para Configuração de Aplicativos dá suporte ao cache e à atualização dinâmica da configuração controlada pela atividade do aplicativo. Este tutorial mostra como você pode implementar atualizações de configuração dinâmica no código. Ele se baseia no aplicativo Azure Functions introduzido nos inícios rápidos. Antes de continuar, conclua Criar um aplicativo Azure Functions com a Configuração de Aplicativos do Azure.
Neste tutorial, você aprenderá como:
- Configure seu aplicativo Azure Functions para atualizar a configuração em resposta a alterações em um repositório de Configuração de Aplicativos.
- Insira a configuração mais recente para suas chamadas do Azure Functions.
Pré-requisitos
- Assinatura do Azure - criar uma gratuitamente
- Visual Studio com a carga de trabalho de desenvolvimento do Azure
- Ferramentas do Azure Functions, se ainda não estiver instalado com o Visual Studio.
- Conclua o início rápido Criar um aplicativo do Azure Functions com a Configuração de Aplicativos do Azure
Recarregar os dados da Configuração de Aplicativo
O Azure Functions dá suporte à execução em processo ou como processo isolado. A principal diferença no uso da Configuração de Aplicativos entre os dois modos é como a configuração é atualizada. No modo em processo, você deve fazer uma chamada em cada função para atualizar a configuração. No modo de processo isolado, há suporte para middleware. O middleware Configuração de Aplicativos, Microsoft.Azure.AppConfiguration.Functions.Worker
, habilita a chamada para atualizar a configuração automaticamente antes que cada função seja executada.
Atualize o código que se conecta à Configuração de Aplicativos e adicione as condições de atualização de dados.
Abra Startup.cs e atualize o método
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)); }); }
O método
ConfigureRefresh
registra uma configuração para ser verificada quanto a alterações sempre que uma atualização é disparada dentro do aplicativo. O parâmetrorefreshAll
instrui o provedor de Configuração de Aplicativos a recarregar toda a configuração sempre que uma alteração é detectada na configuração registrada.Todas as configurações registradas para atualização têm um término de cache padrão de 30 segundos antes de tentar uma nova atualização. Ele pode ser atualizado chamando o método
AzureAppConfigurationRefreshOptions.SetCacheExpiration
.Dica
Quando estiver atualizando vários valores de chave na Configuração de Aplicativos, normalmente você não é aconselhável que seu aplicativo recarregue a configuração antes que todas as alterações sejam feitas. Você pode registrar uma chave sentinela e atualizá-la somente quando todas as outras alterações de configuração forem concluídas. Isso ajuda a garantir a consistência da configuração em seu aplicativo.
Você também pode fazer o seguinte para minimizar o risco de inconsistências:
- Projetar seu aplicativo para ser tolerável para inconsistência de configuração transitória
- Aquecer seu aplicativo antes de colocá-lo online (atendendo solicitações)
- Carregue a configuração padrão em seu aplicativo e use-a quando a validação de configuração falhar
- Escolha uma estratégia de atualização de configuração que minimize o impacto em seu aplicativo, por exemplo, um tempo de tráfego baixo.
Atualize o método
Configure
para tornar os serviços de Configuração de Aplicativos do Azure disponíveis por meio de injeção de dependência.public override void Configure(IFunctionsHostBuilder builder) { builder.Services.AddAzureAppConfiguration(); }
Abra Function1.cs e adicione o namespace a seguir.
using System.Linq; using Microsoft.Extensions.Configuration.AzureAppConfiguration;
Atualize o construtor para obter a instância do
IConfigurationRefresherProvider
por meio de injeção de dependência, da qual você pode obter a instância doIConfigurationRefresher
.private readonly IConfiguration _configuration; private readonly IConfigurationRefresher _configurationRefresher; public Function1(IConfiguration configuration, IConfigurationRefresherProvider refresherProvider) { _configuration = configuration; _configurationRefresher = refresherProvider.Refreshers.First(); }
Atualize o método
Run
e sinalize para atualizar a configuração usando o métodoTryRefreshAsync
no início da chamada do Functions. Ele não estará operacional se a janela de tempo de término do cache não for atingida. Remova o operadorawait
se preferir que a configuração seja atualizada sem bloquear a chamada atual do Functions. Nesse caso, as chamadas do Functions posteriores receberão o valor atualizado.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."); }
Testar a função localmente
Defina uma variável de ambiente chamada ConnectionString e defina-a como a chave de acesso ao repositório de configurações de aplicativo. Se você usar o prompt de comando do Windows, execute o comando a seguir e reinicie o prompt de comando para permitir que a alteração entre em vigor:
setx ConnectionString "<connection-string-of-your-app-configuration-store>"
Se você usa o Windows PowerShell, execute o comando a seguir:
$Env:ConnectionString = "<connection-string-of-your-app-configuration-store>"
Se você usa macOS ou Linux, execute o comando a seguir:
export ConnectionString='<connection-string-of-your-app-configuration-store>'
Para testar sua função, pressione F5. Se solicitado, aceite a solicitação do Visual Studio para baixar e instalar as ferramentas principais (CLI) do Azure Functions. Além disso, talvez seja necessário habilitar uma exceção de firewall para que as ferramentas possam manipular solicitações HTTP.
Copie a URL da sua função da saída do Azure Functions runtime.
Cole a URL para a solicitação HTTP na barra de endereços do navegador. A imagem a seguir mostra a resposta no navegador para a solicitação GET local retornada pela função.
Entre no portal do Azure. Escolha Todos os recursos e escolha o repositório de Configuração de Aplicativos que você criou no início rápido.
Selecione Gerenciador de configurações e atualize o valor da seguinte chave:
Chave Valor TestApp:Settings:Message Dados da Configuração de Aplicativos do Azure – Atualizados Em seguida, crie a chave Sentinel ou modifique seu valor, caso já exista, por exemplo,
Chave Valor TestApp:Settings:Sentinel v1 Atualize o navegador algumas vezes. Quando a configuração armazenada em cache expirar após 30 segundos, a página mostrará a resposta da chamada do Functions com o valor atualizado.
Observação
O código de exemplo usado neste tutorial pode ser baixado de Repositório do GitHub da Configuração de Aplicativos.
Limpar os recursos
Se não deseja continuar usando os recursos criados neste artigo, exclua o grupo de recursos que você criou aqui para evitar encargos.
Importante
A exclusão de um grupo de recursos é irreversível. O grupo de recursos e todos os recursos contidos nele são excluídos permanentemente. Não exclua acidentalmente grupo de recursos ou recursos incorretos. Se tiver criado os recursos para este artigo dentro de um grupo de recursos que contém outros recursos que você deseja manter, exclua cada um individualmente do respectivo painel em vez de excluir o grupo de recursos.
- Entre no portal do Azure e selecione Grupos de recursos.
- Na caixa Filtrar por nome..., digite o nome do seu grupo de recursos.
- Na lista de resultados, selecione o nome do grupo de recursos para conferir uma visão geral.
- Selecione Excluir grupo de recursos.
- Você receberá uma solicitação para confirmar a exclusão do grupo de recursos. Insira o nome do grupo de recursos para confirmar e selecione Excluir.
Após alguns instantes, o grupo de recursos e todos os recursos dele são excluídos.
Próximas etapas
Neste tutorial, você habilitou seu aplicativo Azure Functions a atualizar dinamicamente as configurações da Configuração de Aplicativos. Para saber como usar uma identidade gerenciada pelo Azure para simplificar o acesso à Configuração de Aplicativos, passe para o próximo tutorial.