Revisar os conceitos de configuração de aplicativos
A criação de microsserviços para um ambiente distribuído apresenta um desafio importante. Em geral, os microsserviços hospedados na nuvem são executados em vários contêineres em diversas regiões. A implementação de uma solução que separa o código de cada serviço da configuração facilita a triagem dos problemas em todos os ambientes.
Nesta unidade, explore como integrar os recursos de configuração do ASP.NET Core e do Docker com a Configuração de Aplicativos do Azure para resolver esse desafio de forma eficaz.
Você revisará:
- A infraestrutura de configuração do ASP.NET Core.
- Abstração de configuração do Kubernetes – o ConfigMap.
- O serviço de Configuração de Aplicativos do Azure.
- A biblioteca de Gerenciamento de Recursos .NET.
- Os componentes sinalizadores de recursos implementados no aplicativo.
Configuração do ASP.NET Core
A configuração em um projeto ASP.NET Core fica contida em um ou mais provedores de configuração do .NET. Um provedor de configuração é uma abstração em uma fonte de configuração específica, como um arquivo JSON. Os valores da fonte de configuração são representados como uma coleção de pares chave-valor.
Um aplicativo ASP.NET Core pode registrar vários provedores de configuração para ler as configurações de várias fontes. Com o host do aplicativo padrão, vários provedores de configuração são registrados automaticamente. As seguintes fontes de configuração estão disponíveis na ordem listada:
- Arquivo JSON (appsettings.json)
- Arquivo JSON (appsettings.{environment}.json)
- Segredos do usuário
- Variáveis de ambiente
- Linha de comando
Cada provedor de configuração pode contribuir com seu próprio valor de chave. Além disso, qualquer provedor pode substituir um valor de um provedor que foi registrado antes dele na cadeia. Devido à ordem de registro na lista anterior, um parâmetro de linha de comando UseFeatureManagement
substitui uma variável de ambiente UseFeatureManagement
. Da mesma forma, uma chave UseFeatureManagement
em appsettings.json pode ser substituída por uma chave UseFeatureManagement
armazenada em appsettings.Development.json.
Os nomes da chave de configuração podem descrever uma hierarquia. Por exemplo, a notação eShop:Store:SeasonalSale refere-se ao recurso SeasonalSale dentro do microsserviço Store do aplicativo eShop. Essa estrutura também pode mapear valores de configuração para um grafo de objetos ou para uma matriz.
Importante
Algumas plataformas não dão suporte a dois-pontos em nomes de variáveis de ambiente. Para garantir a compatibilidade entre plataformas, usa-se um sublinhado duplo (__
) em vez de dois-pontos (:
) para delimitar as chaves. Por exemplo, eShop__Store__SeasonalSale
é a notação equivalente entre plataformas para eShop:Store:SeasonalSale
.
O ASP.NET Core usa um ConfigurationBinder a fim de mapear valores de configuração para objetos e matrizes. O mapeamento para nomes de chaves ocorre sem diferenciação de maiúsculas e minúsculas. Por exemplo, ConnectionString
e connectionstring
são tratados como chaves equivalentes. Confira mais informações em chaves e valores.
Configuração do Docker
No Docker, uma abstração para lidar com a configuração como uma coleção de pares chave-valor é a seção de variável de ambiente de um arquivo YAML do contêiner. O snippet de código a seguir é um trecho do arquivo docker-compose.yml
do aplicativo:
services:
frontend:
image: storeimage
build:
context: .
dockerfile: DockerfileStore
environment:
- ProductEndpoint=http://backend:8080
- ConnectionStrings:AppConfig=Endpoint=https://eshop-app-features.azconfig.io;Id=<ID>;Secret=<SECRET>
ports:
- "32000:8080"
depends_on:
- backend
O snippet de arquivo define:
- As variáveis são armazenadas na seção
environment
do arquivo YAML, conforme enfatizado no snippet de código anterior. - Apresentados ao aplicativo conteinerizado como variáveis de ambiente.
- Um mecanismo para persistir valores de configuração do .NET em aplicativos de microsserviços.
As variáveis de ambiente são um mecanismo multiplataforma para fornecer configuração em runtime para aplicativos hospedados nos contêineres do Docker.
Configuração de Aplicativo do Azure
Um serviço de configuração centralizado é particularmente útil em aplicativos de microsserviços e em outros aplicativos distribuídos. Este módulo apresenta a Configuração de Aplicativos do Azure como serviço para gerenciar de modo centralizado os valores de configuração, especificamente para os sinalizadores de recursos. O serviço facilita a solução de problemas dos erros que surgem quando a configuração é implantada com um aplicativo.
A Configuração de Aplicativos é um serviço totalmente gerenciado que criptografa valores de chaves em repouso e em trânsito. Os valores de configuração armazenados com ela podem ser atualizados em tempo real sem a necessidade de reimplantação ou reinicialização de um aplicativo.
Em um aplicativo ASP.NET Core, a Configuração de Aplicativos do Azure é registrada como um provedor de configuração. Exceto pelo registro do provedor, o aplicativo desconhece o armazenamento da Configuração de Aplicativos. Os valores de configuração podem ser recuperados por meio da abstração de configuração do .NET – A interface IConfiguration
.
Biblioteca de Gerenciamento de Recursos
A biblioteca de Gerenciamento de Recursos fornece APIs padronizadas do .NET para o gerenciamento de sinalizadores de recursos em aplicativos. A biblioteca é distribuída por meio do NuGet na forma de dois pacotes diferentes chamados de Microsoft.FeatureManagement
e Microsoft.FeatureManagement.AspNetCore
. Este último pacote fornece Auxiliares de Marcação para uso em arquivos Razor de um projeto do ASP.NET Core. Já o primeiro pacote é suficiente quando os Auxiliares de Marcação não são necessários ou quando não estão usando um projeto do ASP.NET Core.
A biblioteca é criada sobre IConfiguration
. Por esse motivo, ela é compatível com qualquer provedor de configuração do .NET, incluindo o provedor para a Configuração de Aplicativos do Azure. Como a biblioteca é dissociada da Configuração de Aplicativos do Azure, a integração das duas é possível por meio do provedor de configuração. A combinação dessa biblioteca com a Configuração de Aplicativos do Azure permite ativar/desativar recursos de forma dinâmica sem a implementação da infraestrutura de suporte.
Integração com a Configuração de Aplicativos do Azure
Para entender a integração da Configuração de Aplicativos do Azure e da biblioteca de Gerenciamento de Recursos, confira o seguinte trecho de um arquivo Program.cs
do projeto do ASP.NET Core:
string connectionString = builder.Configuration.GetConnectionString("AppConfig");
// Load configuration from Azure App Configuration
builder.Configuration.AddAzureAppConfiguration(options => {
options.Connect(connectionString)
.UseFeatureFlags();
});
No fragmento de código anterior:
- O método
builder.Configuration
do aplicativo é chamado para registrar um provedor de configuração para o repositório da Configuração de Aplicativos do Azure. O provedor de configuração é registrado por meio de uma chamada paraAddAzureAppConfiguration
. - O comportamento do provedor da Configuração de Aplicativos do Azure é configurado com as seguintes opções:
- Autenticação no serviço correspondente do Azure por meio de uma cadeia de conexão passada para a chamada de método
Connect
. A cadeia de conexão é recuperada da variávelconnectionString
. As fontes de configuração registradas são disponibilizadas por meio debuilder.Configuration
. - Habilitação do suporte a sinalizadores de recursos por meio de uma chamada para
UseFeatureFlags
.
- Autenticação no serviço correspondente do Azure por meio de uma cadeia de conexão passada para a chamada de método
- O provedor da Configuração de Aplicativos do Azure substitui todos os outros provedores de configuração registrados porque está registrado após qualquer outro.
Dica
Em um projeto ASP.NET Core, é possível acessar a lista de provedores registrados analisando a propriedade configBuilder.Sources
dentro de ConfigureAppConfiguration
.