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

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.

  1. 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âmetro refreshAll 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.
  1. 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();
    }
    
  2. 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 do IConfigurationRefresher.

    private readonly IConfiguration _configuration;
    private readonly IConfigurationRefresher _configurationRefresher;
    
    public Function1(IConfiguration configuration, IConfigurationRefresherProvider refresherProvider)
    {
        _configuration = configuration;
        _configurationRefresher = refresherProvider.Refreshers.First();
    }
    
  3. Atualize o método Run e sinalize para atualizar a configuração usando o método TryRefreshAsync 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 operador await 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

  1. 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'
    
  2. 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.

  3. Copie a URL da sua função da saída do Azure Functions runtime.

    Quickstart Function debugging in VS

  4. 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.

    Quickstart Function launch local

  5. 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.

  6. 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
  7. 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.

    Quickstart Function refresh local

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.

  1. Entre no portal do Azure e selecione Grupos de recursos.
  2. Na caixa Filtrar por nome..., digite o nome do seu grupo de recursos.
  3. Na lista de resultados, selecione o nome do grupo de recursos para conferir uma visão geral.
  4. Selecione Excluir grupo de recursos.
  5. 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.