Tutorial: Utilizar a configuração dinâmica numa aplicação Funções do Azure

O fornecedor de configuração do App Configuration .NET suporta a colocação em cache e a atualização da configuração dinamicamente condicionada pela atividade da aplicação. Este tutorial mostra como pode implementar atualizações de configuração dinâmicas no seu código. Baseia-se no Funções do Azure aplicação introduzida nos inícios rápidos. Antes de continuar, conclua Criar uma aplicação de funções do Azure com Azure App Configuration primeiro.

Neste tutorial, ficará a saber como:

  • Configure a sua aplicação Funções do Azure para atualizar a respetiva configuração em resposta a alterações num arquivo de App Configuration.
  • Injete a configuração mais recente nas chamadas de Funções do Azure.

Pré-requisitos

Recarregar dados do App Configuration

Funções do Azure suporte para execução em processo ou processo isolado. A principal diferença na utilização App Configuration entre os dois modos é a forma como a configuração é atualizada. No modo no processo, tem de fazer uma chamada em cada função para atualizar a configuração. No modo de processo isolado, existe suporte para middleware. A App Configuration middleware, Microsoft.Azure.AppConfiguration.Functions.Worker, permite que a chamada atualize automaticamente a configuração antes de cada função ser executada.

  1. Atualize o código que se liga ao App Configuration e adicione as condições de atualização de dados.

    Abra Startup.cs e atualize o ConfigureAppConfiguration método .

    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 ConfigureRefresh método regista uma definição a verificar se existem alterações sempre que uma atualização é acionada na aplicação. O refreshAll parâmetro indica ao fornecedor App Configuration para recarregar toda a configuração sempre que for detetada uma alteração na definição registada.

    Todas as definições registadas para atualização têm uma expiração de cache predefinida de 30 segundos antes de uma nova atualização ser tentada. Pode ser atualizado ao chamar o AzureAppConfigurationRefreshOptions.SetCacheExpiration método .

    Dica

    Quando está a atualizar vários valores-chave no App Configuration, normalmente não quer que a sua aplicação recarregue a configuração antes de todas as alterações serem efetuadas. Pode registar uma chave do Sentinel e atualizá-la apenas quando todas as outras alterações de configuração estiverem concluídas. Isto ajuda a garantir a consistência da configuração na sua aplicação.

    Também pode fazer o seguinte para minimizar o risco de inconsistências:

    • Conceber a sua aplicação para ser tolerável para inconsistência de configuração transitória
    • Aqueça a sua aplicação antes de a colocar online (a servir pedidos)
    • Executar a configuração predefinida na sua aplicação e utilizá-la quando a validação da configuração falhar
    • Escolha uma estratégia de atualização de configuração que minimize o impacto na sua aplicação, por exemplo, uma temporização de tráfego baixa.
  1. Atualize o Configure método para disponibilizar Azure App Configuration serviços através da injeção de dependências.

    public override void Configure(IFunctionsHostBuilder builder)
    {
        builder.Services.AddAzureAppConfiguration();
    }
    
  2. Abra Function1.cs e adicione os seguintes espaços de nomes.

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

    Atualize o construtor para obter a instância de através da IConfigurationRefresherProvider injeção de dependência, a partir da qual pode obter a instância de IConfigurationRefresher.

    private readonly IConfiguration _configuration;
    private readonly IConfigurationRefresher _configurationRefresher;
    
    public Function1(IConfiguration configuration, IConfigurationRefresherProvider refresherProvider)
    {
        _configuration = configuration;
        _configurationRefresher = refresherProvider.Refreshers.First();
    }
    
  3. Atualize o Run método e o sinal para atualizar a configuração com o TryRefreshAsync método no início da chamada das Funções. Será uma operação sem operação se o período de tempo de expiração da cache não for atingido. Remova o await operador se preferir que a configuração seja atualizada sem bloquear a chamada de Funções atual. Nesse caso, as chamadas de Funções posteriores obterã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 localmente a função

  1. Defina uma variável de ambiente com o nome ConnectionString e defina-a como a chave de acesso para o arquivo de configuração da aplicação. Se utilizar a linha de comandos do Windows, execute o seguinte comando e reinicie a linha de comandos para permitir que a alteração entre em vigor:

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

    Se utilizar Windows PowerShell, execute o seguinte comando:

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

    Se utilizar o macOS ou Linux, execute o seguinte comando:

    export ConnectionString='connection-string-of-your-app-configuration-store'
    
  2. Para testar a sua função, prima F5. Se lhe for pedido, aceite o pedido do Visual Studio para transferir e instalar ferramentas do Funções do Azure Core (CLI). Também poderá ter de ativar uma exceção de firewall para que as ferramentas possam processar pedidos HTTP.

  3. Copie o URL da sua função na saída do tempo de execução das funções do Azure.

    Depuração da Função de Início Rápido no VS

  4. Cole o URL do pedido HTTP na barra de endereço do browser. A imagem seguinte mostra a resposta no browser ao pedido GET local devolvido pela função.

    Início Rápido Função iniciar localmente

  5. Inicie sessão no Portal do Azure. Selecione Todos os recursos e selecione o arquivo App Configuration que criou no início rápido.

  6. Selecione Explorador de configuração e atualize o valor da seguinte chave:

    Chave Valor
    TestApp:Settings:Message Dados de Azure App Configuration - Atualizados

    Em seguida, crie a chave sentinela ou modifique o respetivo valor se já existir, por exemplo,

    Chave Valor
    TestApp:Settings:Sentinel v1
  7. Atualize o browser algumas vezes. Quando a definição em cache expira após 30 segundos, a página mostra a resposta da chamada das Funções com o valor atualizado.

    Atualização da Função de Início Rápido local

Nota

O código de exemplo utilizado neste tutorial pode ser transferido do App Configuration repositório do GitHub.

Limpar os recursos

Se não quiser continuar a utilizar os recursos criados neste artigo, elimine o grupo de recursos que criou aqui para evitar custos.

Importante

A eliminação de um grupo de recursos é irreversível. O grupo de recursos e todos os recursos nele contidos são eliminados permanentemente. Certifique-se de que não elimina acidentalmente os recursos ou o grupo de recursos errados. Se tiver criado os recursos para este artigo dentro de um grupo de recursos que contém outros recursos que pretende manter, elimine cada recurso individualmente do respetivo painel em vez de eliminar o grupo de recursos.

  1. Inicie sessão no portal do Azure e selecione Grupos de recursos.
  2. Na caixa Filtrar por nome , introduza o nome do grupo de recursos.
  3. Na lista de resultados, selecione o nome do grupo de recursos para ver uma descrição geral.
  4. Selecione Eliminar grupo de recursos.
  5. É-lhe pedido que confirme a eliminação do grupo de recursos. Introduza o nome do grupo de recursos a confirmar e selecione Eliminar.

Após alguns instantes, o grupo de recursos e todos os respetivos recursos são eliminados.

Passos seguintes

Neste tutorial, ativou a sua aplicação Funções do Azure para atualizar dinamicamente as definições de configuração de App Configuration. Para saber como utilizar uma identidade gerida do Azure para simplificar o acesso ao App Configuration, avance para o próximo tutorial.