Guia de início rápido: adicionar sinalizadores de recursos a um aplicativo do Azure Functions
Neste início rápido, você cria um projeto de código C# do Azure Functions e usa sinalizadores de recursos nele. Você usa o gerenciamento de recursos da Configuração de Aplicativo do Azure para armazenar centralmente todos os seus sinalizadores de recursos e controlar seus estados.
As bibliotecas do .NET Feature Management estendem a estrutura com suporte a sinalizadores de recursos. Essas bibliotecas são criadas sobre o sistema de configuração .NET. Eles se integram à Configuração de Aplicativos por meio de seu provedor de configuração .NET.
Nota
Atualmente, este artigo suporta apenas aplicativos de função em processo em C# executados no .NET 6.
Pré-requisitos
- Uma conta do Azure com uma subscrição ativa. Crie um gratuitamente.
- Uma loja de configuração de aplicativos. Crie uma loja.
- Visual Studio 2019 com a carga de trabalho de desenvolvimento do Azure.
Adicionar um sinalizador de recurso
Adicione um sinalizador de recurso chamado Beta à loja de Configuração do Aplicativo e deixe Rótulo e Descrição com seus valores padrão. Para obter mais informações sobre como adicionar sinalizadores de recursos a uma loja usando o portal do Azure ou a CLI, vá para Criar um sinalizador de recurso.
Criar um projeto do Functions
O modelo de projeto do Azure Functions no Visual Studio cria um projeto de biblioteca de classes C# que você pode publicar em um aplicativo de função no Azure. Você pode usar um aplicativo de função para agrupar funções como uma unidade lógica para facilitar o gerenciamento, a implantação, o dimensionamento e o compartilhamento de recursos.
No menu Visual Studio, selecione Arquivo>Novo>Projeto.
Em Criar um novo projeto, insira funções na caixa de pesquisa, escolha o modelo Azure Functions e selecione Avançar.
Em Configurar seu novo projeto, insira um nome de projeto para seu projeto e selecione Criar. O nome da aplicação de funções deve ser válido como um espaço de nomes C#. Portanto, não use sublinhados, hífenes ou outros carateres não alfanuméricos.
Para criar uma nova configuração do aplicativo Azure Functions, use os valores na tabela a seguir:
Definição valor Description Versão .NET .NET 6 Esse valor cria um projeto de função que é executado em processo com a versão 4.x do tempo de execução do Azure Functions. Para obter mais informações, consulte Visão geral das versões de tempo de execução do Azure Functions. Modelo de função Acionador HTTP Esse valor cria uma função acionada por uma solicitação HTTP. Conta de armazenamento (AzureWebJobsStorage) Emulador de armazenamento Como um aplicativo de função no Azure requer uma conta de armazenamento, uma é atribuída ou criada quando você publica seu projeto no Azure. Um gatilho HTTP não usa uma cadeia de conexão de conta de Armazenamento do Azure; todos os outros tipos de gatilho exigem uma cadeia de conexão de conta de Armazenamento do Azure válida. Nível de autorização Anônimo A função criada pode ser acionada por qualquer cliente sem fornecer uma chave. Esta definição de autorização torna mais fácil testar a função nova. Para obter mais informações sobre chaves e autorização, consulte Chaves de autorização e Ligações HTTP e webhook.
Certifique-se de definir o nível de Autorização como Anônimo. Se você escolher o nível padrão de Função, será necessário apresentar a tecla de função em solicitações para acessar seu ponto de extremidade de função.
Selecione Criar para criar o projeto de função e a função de gatilho HTTP.
Conectar-se a uma loja de configuração de aplicativos
Este projeto usará a injeção de dependência no .NET Azure Functions. Ele adiciona a Configuração do Aplicativo do Azure como uma fonte de configuração extra onde seus sinalizadores de recursos são armazenados.
Clique com o botão direito do mouse em seu projeto e selecione Gerenciar pacotes NuGet. Na guia Procurar, procure e adicione os seguintes pacotes NuGet ao seu projeto.
- Microsoft.Extensions.Configuration.AzureAppConfiguration versão 4.1.0 ou posterior
- Microsoft.FeatureManagement versão 2.2.0 ou posterior
- Microsoft.Azure.Functions.Extensions versão 1.1.0 ou posterior
Adicione um novo arquivo, Startup.cs, com o código a seguir. Ele define uma classe chamada
Startup
que implementa aFunctionsStartup
classe abstrata. Um atributo assembly é usado para especificar o nome do tipo usado durante a inicialização do Azure Functions.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) { } } }
Atualize o método e adicione o
ConfigureAppConfiguration
provedor de Configuração de Aplicativo do Azure como uma fonte de configuração extra chamandoAddAzureAppConfiguration()
.O
UseFeatureFlags()
método diz ao provedor para carregar sinalizadores de recurso. Todos os sinalizadores de recursos têm uma expiração de cache padrão de 30 segundos antes de verificar novamente se há alterações. O intervalo de expiração pode ser atualizado definindo aFeatureFlagsOptions.CacheExpirationInterval
propriedade passada para oUseFeatureFlags
método.public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder) { builder.ConfigurationBuilder.AddAzureAppConfiguration(options => { options.Connect(Environment.GetEnvironmentVariable("ConnectionString")) .Select("_") .UseFeatureFlags(); }); }
Gorjeta
Se você não quiser que nenhuma configuração além de sinalizadores de recursos seja carregada em seu aplicativo, você pode ligar
Select("_")
para carregar apenas uma chave"_"
fictícia inexistente. Por padrão, todos os valores de chave de configuração em sua loja de configuração de aplicativos serão carregados se nenhumSelect
método for chamado.Atualize o método para disponibilizar os serviços de Configuração de Aplicativo do Azure e o
Configure
gerenciador de recursos por meio da injeção de dependência.public override void Configure(IFunctionsHostBuilder builder) { builder.Services.AddAzureAppConfiguration(); builder.Services.AddFeatureManagement(); }
Abra Function1.cs e adicione os namespaces a seguir.
using System.Linq; using Microsoft.FeatureManagement; using Microsoft.Extensions.Configuration.AzureAppConfiguration;
Adicione um construtor usado para obter instâncias de e
IConfigurationRefresherProvider
através da injeção de_featureManagerSnapshot
dependência.IConfigurationRefresherProvider
No , você pode obter a instância deIConfigurationRefresher
.private readonly IFeatureManagerSnapshot _featureManagerSnapshot; private readonly IConfigurationRefresher _configurationRefresher; public Function1(IFeatureManagerSnapshot featureManagerSnapshot, IConfigurationRefresherProvider refresherProvider) { _featureManagerSnapshot = featureManagerSnapshot; _configurationRefresher = refresherProvider.Refreshers.First(); }
Atualize o
Run
método para alterar o valor da mensagem exibida dependendo do estado do sinalizador de recurso.O
TryRefreshAsync
método é chamado no início da chamada Functions para atualizar sinalizadores de recursos. Será um no-op se a janela de tempo de expiração do cache não for atingida. Remova oawait
operador se preferir que os sinalizadores de recursos sejam atualizados sem bloquear a chamada Functions atual. Nesse caso, chamadas posteriores do Functions receberão valor atualizado.[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); }
Testar localmente a função
Defina uma variável de ambiente chamada ConnectionString, onde o valor é a cadeia de conexão recuperada anteriormente em sua loja de Configuração de Aplicativo em Chaves de Acesso. Se você usar o prompt de comando do Windows, execute o seguinte comando 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ê usar o Windows PowerShell, execute o seguinte comando:
$Env:ConnectionString = "<connection-string-of-your-app-configuration-store>"
Se você usa macOS ou Linux, execute o seguinte comando:
export ConnectionString='<connection-string-of-your-app-configuration-store>'
Pressione F5 para testar sua função. Se solicitado, aceite a solicitação do Visual Studio para baixar e instalar as ferramentas CLI (Azure Functions Core). Também pode ser necessário habilitar uma exceção de firewall para que as ferramentas possam lidar com solicitações HTTP.
Copie o URL da sua função na saída do tempo de execução das funções do Azure.
Cole o URL do pedido HTTP na barra de endereço do browser. A imagem a seguir mostra a resposta indicando que o sinalizador de recurso Beta está desativado.
Inicie sessão no portal do Azure. Selecione Todos os recursos e selecione a loja de configuração de aplicativos que você criou.
Selecione Gerenciador de recursos e altere o estado da chave Beta para Ativado.
Atualize o navegador algumas vezes. Quando a janela de tempo do intervalo de atualização passar, a página será alterada para indicar que o sinalizador de recurso Beta está ativado, conforme mostrado na imagem abaixo.
Nota
O código de exemplo usado neste tutorial pode ser baixado do repositório GitHub de Configuração de Aplicativo do Azure.
Clean up resources (Limpar recursos)
Se não quiser continuar a utilizar os recursos criados neste artigo, elimine o grupo de recursos que criou aqui para evitar cobranças.
Importante
A eliminação de um grupo de recursos é irreversível. O grupo de recursos e todos os recursos nele contidos são excluídos permanentemente. Certifique-se de não excluir acidentalmente o grupo de recursos ou recursos errados. Se você criou os recursos para este artigo dentro de um grupo de recursos que contém outros recursos que deseja manter, exclua cada recurso individualmente de seu respetivo painel em vez de excluir o grupo de recursos.
- Entre no portal do Azure e selecione Grupos de recursos.
- Na caixa Filtrar por nome, introduza o nome do seu grupo de recursos.
- Na lista de resultados, selecione o nome do grupo de recursos para ver uma visão geral.
- Selecione Eliminar grupo de recursos.
- É-lhe pedido que confirme a eliminação do grupo de recursos. Insira o nome do grupo de recursos a ser confirmado e selecione Excluir.
Após alguns momentos, o grupo de recursos e todos os seus recursos são excluídos.
Próximos passos
Neste início rápido, você criou um sinalizador de recurso e o usou com um Azure Functions.
Para habilitar o recurso de gerenciamento de recursos para outros tipos de aplicativos, continue para os tutoriais a seguir.
Para saber mais sobre como gerenciar sinalizadores de recursos na Configuração do Aplicativo do Azure, continue para o tutorial a seguir.
Para obter o resumo completo dos recursos da biblioteca de gerenciamento de recursos do .NET, continue para o documento a seguir.