Revise os conceitos de configuração do aplicativo

Concluído

A criação de microsserviços para um ambiente distribuído apresenta um desafio significativo. Os microsserviços hospedados na nuvem geralmente são executados em vários contêineres em várias regiões. A implementação de uma solução que separa o código de cada serviço da configuração facilita a triagem de problemas em todos os ambientes.

Nesta unidade, explore como integrar ASP.NET recursos de configuração Core e Docker com a Configuração de Aplicativo do Azure para enfrentar esse desafio de forma eficaz.

Irá rever o:

  • ASP.NET Infraestrutura de configuração central.
  • Abstração de configuração do Kubernetes — o ConfigMap.
  • Serviço de Configuração de Aplicativo do Azure.
  • Biblioteca de gerenciamento de recursos do .NET.
  • Componentes do sinalizador de recursos implementados no aplicativo.

Configuração ASP.NET Core

A configuração em um projeto ASP.NET Core está contida em um ou mais provedores de configuração .NET. Um provedor de configuração é uma abstração sobre 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 configurações de várias fontes. Com o host de 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:

  1. Arquivo JSON (appsettings.json)
  2. Arquivo JSON (appsettings.{environment}.json)
  3. Segredos do utilizador
  4. Variáveis de ambiente
  5. Linha de comandos

Cada provedor de configuração pode contribuir com seu próprio valor de chave. Além disso, qualquer fornecedor pode substituir um valor de um fornecedor que foi registado anteriormente na cadeia do que ele próprio. Dada a ordem de registro na lista anterior, um UseFeatureManagement parâmetro de linha de comando substitui uma UseFeatureManagement variável de ambiente. Da mesma forma, uma UseFeatureManagement chave dentro appsettings.json pode ser substituída por uma UseFeatureManagement chave armazenada no appsettings.Development.json.

Os nomes das chaves 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 gráfico de objeto ou uma matriz.

Importante

Algumas plataformas não suportam dois pontos em nomes de variáveis de ambiente. Para garantir a compatibilidade entre plataformas, um sublinhado duplo (__) é usado em vez de dois pontos (:) para delimitar as chaves. Por exemplo, eShop__Store__SeasonalSale é a notação equivalente entre plataformas para eShop:Store:SeasonalSale.

ASP.NET Core usa um ConfigurationBinder para mapear valores de configuração para objetos e matrizes. O mapeamento para nomes de chaves ocorre de forma insensível a maiúsculas e minúsculas. Por exemplo, ConnectionString e connectionstring são tratados como chaves equivalentes. Para obter mais informações, consulte chaves e valores.

Configuração do Docker

No Docker, uma abstração para manipular a configuração como uma coleção de pares chave-valor é a seção de variáveis de ambiente do arquivo YAML de um contêiner. O trecho a seguir é um trecho do arquivo do docker-compose.yml 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 trecho do arquivo define:

  • Variáveis armazenadas na environment seção do arquivo YAML, conforme destacado no trecho anterior.
  • Apresentado 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 de plataforma cruzada para fornecer configuração de tempo de execução para aplicativos hospedados nos contêineres do Docker.

Configuração da Aplicação Azure

Um serviço de configuração centralizada é especialmente útil em aplicativos de microsserviços e outros aplicativos distribuídos. Este módulo apresenta a Configuração de Aplicativo do Azure como um serviço para gerenciar centralmente valores de configuração, especificamente para sinalizadores de recursos. O serviço facilita a solução de problemas de erros que surgem quando a configuração é implantada com um aplicativo.

A Configuração do Aplicativo é um serviço totalmente gerenciado que criptografa valores de chave em repouso e em trânsito. Os valores de configuração armazenados com ele podem ser atualizados em tempo real sem a necessidade de reimplantar ou reiniciar um aplicativo.

Em um aplicativo ASP.NET Core, a Configuração do Aplicativo do Azure é registrada como um provedor de configuração. Além do registro do provedor, o aplicativo não sabe sobre a App Configuration Store. Os valores de configuração podem ser recuperados dele via . Abstração de configuração do NET — a IConfiguration interface.

Biblioteca de gerenciamento de recursos

A biblioteca de Gerenciamento de Recursos fornece APIs .NET padronizadas para gerenciar sinalizadores de recursos em aplicativos. A biblioteca é distribuída via NuGet na forma de dois pacotes diferentes chamados Microsoft.FeatureManagement e Microsoft.FeatureManagement.AspNetCore. O último pacote fornece Tag Helpers para uso em arquivos Razor de um projeto ASP.NET Core. O pacote anterior é suficiente quando os Tag Helpers não são necessários ou quando não são usados com um projeto ASP.NET Core.

A biblioteca é construída no topo IConfiguration. Por esse motivo, ele é compatível com qualquer provedor de configuração .NET, incluindo o provedor para Configuração de Aplicativo do Azure. Como a biblioteca é dissociada da Configuração de Aplicativo do Azure, a integração dos dois é possível por meio do provedor de configuração. A combinação dessa biblioteca com a Configuração de Aplicativo do Azure permite alternar recursos dinamicamente sem implementar a infraestrutura de suporte.

Integração com a Configuração de Aplicativo do Azure

Para entender a integração da Configuração de Aplicativo do Azure e da biblioteca de Gerenciamento de Recursos, consulte o seguinte trecho do arquivo de um projeto ASP.NET Core Program.cs :

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 do aplicativo é chamado para registrar um provedor de builder.Configuration configuração para o repositório de Configuração de Aplicativos do Azure. O provedor de configuração é registrado por meio de uma chamada para AddAzureAppConfiguration.
  • O comportamento do provedor de Configuração de Aplicativo do Azure é configurado com as seguintes opções:
    • Autentique-se no serviço do Azure correspondente por meio de uma cadeia de conexão passada para a chamada de Connect método. A cadeia de conexão é recuperada da connectionString variável. As fontes de configuração registadas são disponibilizadas através do builder.Configuration.
    • Habilite o suporte a sinalizadores de recursos por meio de uma chamada para UseFeatureFlags.
  • O provedor de Configuração de Aplicativo do Azure substitui todos os outros provedores de configuração registrados porque é registrado depois de quaisquer outros.

Gorjeta

Em um projeto ASP.NET Core, você pode acessar a lista de provedores registrados analisando a configBuilder.Sources propriedade dentro do ConfigureAppConfiguration.