Compartilhar via


Tutorial: Implantar um aplicativo de vários contêineres nos Aplicativos de Contêiner do Azure

Você pode implantar um aplicativo de vários contêineres nos Aplicativos de Contêiner do Azure usando o Visual Studio. Normalmente, você implanta cada contêiner em uma instância de aplicativo de contêiner separada, mas inclui todos os contêineres do aplicativo no mesmo ambiente de aplicativo de contêiner para permitir que eles se comuniquem com facilidade e segurança uns com os outros. Você pode configurar cada aplicativo de contêiner para aceitar solicitações de dentro do ambiente de contêiner ou para permitir tráfego externo. Os Aplicativos de Contêiner do Azure são altamente flexíveis e configuráveis, permitindo muitos cenários possíveis de microsserviços e um conjunto completo de ferramentas de monitoramento avançadas. Se você estiver usando o Docker Compose para gerenciar aplicativos de contêiner local, talvez considere tentar portar para um ambiente de aplicativo de contêiner no Azure.

O processo envolve algumas etapas usando o Visual Studio e o portal do Azure. Você também pode usar a CLI do Azure para executar essas ações, mas isso está além do escopo deste tutorial. Primeiro, usamos o aplicativo criado usando o aplicativo Criar vários contêineres e o implantamos usando o processo de Publicação . O Visual Studio orienta você pelas etapas para criar o primeiro aplicativo de contêiner, um ambiente de aplicativo de contêiner, bem como criar um registro de contêiner para armazenar as imagens de contêiner. Em seguida, você executa o processo de publicação novamente com o outro aplicativo de contêiner. Especificamente, você deve escolher o mesmo ambiente de aplicativo de contêiner no processo de publicação. Por fim, você precisa configurar o cache Redis para trabalhar com o serviço de Cache Redis do Azure. Você modifica o código de configuração de cache e republica a API Web. Em seguida, você configura as permissões para conceder acesso à identidade gerenciada atribuída pelo sistema do aplicativo ao cache.

Pré-requisitos

  • Uma assinatura do Azure. Inscreva-se para uma avaliação gratuita.
  • Visual Studio com as cargas de trabalho de desenvolvimento do Azure e ASP.NET e desenvolvimento da Web instaladas.
  • O projeto MulticontainerSample na https://github.com/MicrosoftDocs/vs-tutorial-samples pasta docker . A solução de exemplo contém dois projetos, o back-end da API Web e o front-end do Razor ASP.NET, conforme você criou em outro tutorial. Você também pode criar os dois projetos do zero, já que são modificações muito simples dos modelos padrão seguindo esse tutorial. Você pode ignorar as etapas do Docker Compose.

Pré-requisitos

  • Uma assinatura do Azure. Inscreva-se para uma avaliação gratuita.
  • Visual Studio ou posterior com as cargas de trabalho de desenvolvimento do Azure e desenvolvimento do ASP.NET e da Web instaladas.
  • O projeto MulticontainerSample na https://github.com/MicrosoftDocs/vs-tutorial-samples pasta docker . A solução de exemplo contém dois projetos, o back-end da API Web e o front-end do Razor ASP.NET, conforme você criou em outro tutorial. Você também pode criar os dois projetos do zero, já que são modificações muito simples dos modelos padrão seguindo esse tutorial. Você pode ignorar as etapas do Docker Compose.

Implantar o sistema da API Web

  1. No Gerenciador de Soluções, clique com o botão direito do mouse no nó do projeto da API Web e selecione Publicar.

  2. Escolha o destino Azure e selecione Aplicativos de Contêiner do Azure.

  3. Se você ainda não estiver conectado a uma conta associada a uma assinatura do Azure, poderá entrar agora ou alterar o locatário se necessário.

  4. Na tela em que você especifica um aplicativo de contêiner, selecione Criar novo para criar um novo aplicativo de contêiner.

    Captura de tela mostrando a tela no processo publicar em que você especifica um aplicativo de contêiner existente ou opta por criar um novo para o serviço de API Web.

  5. Na página Criar aplicativo contêiner do Azure , insira detalhes como o grupo de recursos. Para esta etapa, você criará um novo grupo de recursos, um novo ambiente de contêiner e um novo registro de contêiner.

    Captura de tela mostrando a tela no processo Publicar em que você cria um novo aplicativo de contêiner.

    Pode demorar um pouco para criar os recursos. Quando for concluído, clique em Avançar para seguir para a próxima etapa.

  6. Na próxima etapa, você criará um registro de contêiner. Se você criar um novo registro de contêiner, será solicitado alguns detalhes. Você pode escolher a mesma região e grupo de recursos que o aplicativo de contêiner.

  7. A próxima etapa solicita que você escolha o tipo de build do contêiner. Escolha o SDK do .NET se você não tiver um Dockerfile ou o Docker Desktop se tiver.

    Captura de tela mostrando a escolha do tipo de build de contêiner, com o Docker Desktop selecionado.

  8. Para o tipo de implantação, escolha Publicar (gerar arquivo pubxml) para criar um perfil de publicação.

    Captura de tela mostrando a escolha do tipo de implantação, com a opção de publicar em um arquivo pubxml selecionado.

  9. Selecione Concluir para finalizar o processo de Publicação e criar um perfil de Publicação. Se você vir um prompt sobre a configuração extra para acessar o contêiner publicado, escolha Sim.

    Prompt perguntando se deseja conceder acesso ao usuário administrador.

    Você vê uma página que mostra a atividade no Azure e, quando a fecha, a tela Publicar agora tem as informações do seu aplicativo de contêiner, como a URL de entrada para a API Web.

    Captura de tela mostrando a tela Publicar depois de concluir o processo de Publicação.

    Clique no botão Publicar para publicar no aplicativo de contêiner do Azure. O Visual Studio solicita que os recursos do Azure sejam criados e inicie o processo de publicação do aplicativo de contêiner WebAPI.

    O Visual Studio pode tentar carregar a página do novo aplicativo de contêiner, mas isso não deve funcionar neste estágio.

Agora que você publicou uma vez, criou um perfil de Publicação (.pubxml arquivo), para não precisar repetir essas etapas na próxima vez que publicar. Basta clicar no botão Publicar nesta tela, a menos que você queira recomeçar ou alterar qualquer um dos recursos do Azure especificados.

Posteriormente, você usará o portal do Azure para fazer algumas alterações de configuração adicionais para o Ingress e para dar suporte ao Cache Redis do Azure, mas primeiro, na próxima seção, você publicará o front end da web.

Implantar o front-end

  1. Modifique o arquivo de código front-end no Index.cshtml.cs para fazer referência à nova URL do aplicativo de contêiner da API Web. Esse é o nome mostrado no nome do recurso na tela Publicar da API Web. Para comunicação entre contêineres, você pode usar HTTP diretamente com o nome do aplicativo de contêiner, sem especificar um FQDN (nome de domínio totalmente qualificado) e um número de porta. No método OnGet, substitua a linha existente que define o RequestUri para referenciar o nome do aplicativo de contêiner da API Web, como no código a seguir.

     request.RequestUri = new Uri("http://<mywebapi-container-app-name>/Counter");
    
    
  2. No Gerenciador de Soluções, clique com o botão direito no nó do projeto Webfrontend e selecione Publicar. Na próxima tela, selecione Criar novo para criar um novo aplicativo de contêiner.

  3. Na tela Criar novo aplicativo de contêiner do Azure , escolha o mesmo grupo de recursos e o mesmo ambiente de contêiner que você criou quando publicou o projeto da API Web.

    Captura de tela mostrando a tela no processo Publicar em que você especifica um contêiner existente ou cria um novo para Webfrontend.

  4. Importante! Selecione o mesmo registro de contêiner que você criou anteriormente.

    Captura de tela mostrando a tela no processo de Publicação em que você cria o aplicativo de contêiner Webfrontend, selecionando o mesmo repositório de contêiner que você criou anteriormente.

  5. Escolha as mesmas opções que você fez para a API Web para as outras etapas. O tipo de build de contêiner é Docker Desktop e o tipo de implantação é Publish (gera arquivo pubxml).

  6. Selecione Concluir para finalizar o processo de Publicação e criar um perfil de Publicação. Você vê uma página que mostra a atividade no Azure e, quando a fecha, a tela Publicar agora tem as informações do seu aplicativo de contêiner, como a URL de entrada para o aplicativo Webfrontend.

Exibir e configurar os aplicativos de contêiner no portal do Azure

  1. Entre no portal do Azure.
  2. Pesquise aplicativos de contêiner e localize os que você acabou de criar.
  3. Escolha Ingress e configure as seguintes opções:
    1. Na tela de entrada, defina o tráfego de entrada como Limitado ao Ambiente de Aplicativos de Contêiner. Isso significa que somente o Webfrontend pode enviar solicitações. Mesmo o Visual Studio não poderá acessar esse serviço, por exemplo, quando você concluir o processo de publicação e o Visual Studio tentar carregar a página, você receberá um erro no navegador em vez de acessar o serviço. Isso é esperado.

    2. Verifique a porta de entrada (deve ser 8080). Você está usando HTTP para a chamada à API Web e pode referenciar diretamente o aplicativo de contêiner pelo nome no URI da solicitação. O FQDN (nome de domínio totalmente qualificado) gerado pelos aplicativos de Contêiner do Azure usa uma URL HTTPS (conforme exibido no Visual Studio na tela Publicar ), mas o tráfego interno pode ignorar isso.

    3. Para o Ingress do Webfrontend, você pode aceitar as configurações padrão. A porta de destino é 8080, porque a entrada manipula todas as solicitações com segurança usando o FQDN e HTTPS (ou o redirecionamento HTTP para HTTPS) e as encaminha para o webfrontend usando HTTP na porta de contêiner 8080.

Criar o Cache Redis do Azure

Siga estas etapas para criar um Cache Redis do Azure no mesmo grupo de recursos que os aplicativos de contêiner.

  1. No portal do Azure, abra o aplicativo de contêiner de API Web criado anteriormente. Abra a tela do Conector de Serviço e selecione Criar. A seção Criar conexão é exibida.

  2. Na tela Criar conexão , insira o tipo de serviço como Cache para Redis e escolha Criar novo para criar um novo cache Redis.

    Captura de tela que mostra a tela do Conector de Serviço no aplicativo de contêiner da API Web.

  3. Escolha um cache ou siga o link Criar novo para criar um cache. Se você criar um novo cache, talvez seja necessário retornar ao aplicativo de contêiner e ao Service Connector e repetir as etapas anteriores para criar a conexão.

  4. Para o banco de dados, escolha "0" para criar o primeiro banco de dados numerado para esse cache.

  5. Vá para a guia Autenticação . Escolha a identidade gerenciada atribuída pelo sistema. Aceite todos os outros padrões e selecione Criar. Isso cria a conexão com o cache.

  6. De volta à seção Service Connector do aplicativo de contêiner da API Web, atualize a página para ver o cache recentemente conectado (caso ainda não o veja) e marque a caixa de seleção ao lado do cache. Selecione Validar para verificar o status da conexão. Você pode expandir o nó de cache para ver os valores das variáveis de ambiente para esse cache do Azure. Para fins deste tutorial, você só precisa de AZURE_REDIS_HOST, mas pode usar as outras no código do mundo real ou para uma configuração mais completa. Use os valores aqui para definir as variáveis de ambiente no Dockerfile, conforme descrito na próxima seção, para que a API Web possa se conectar ao cache.

Para obter mais informações, consulte Início Rápido: Criar uma Conexão de Serviço para Aplicativos de Contêiner do Azure no portal do Azure.

Configurar funções para identidade gerenciada

No portal do Azure, você usa o Controle de Acesso (IAM) no Cache Redis do Azure para conceder acesso de Colaborador à identidade gerenciada atribuída pelo sistema do aplicativo de contêiner.

  1. No portal do Azure, abra a página do Cache Redis do Azure e selecione Controle de Acesso (IAM).
  2. Selecione Adicionar>Adicionar Atribuição de Função. A página Adicionar atribuição de função será aberta.
  3. Selecione a guia Membros e escolha a identidade gerenciada.
  4. Selecione Selecionar membros. A página Selecionar membros é aberta e selecione a identidade gerenciada atribuída pelo sistema.
  5. Selecione o Aplicativo de Contêiner e escolha o aplicativo de contêiner da API Web.
  6. Na guia Função, escolha Colaborador do Cache Redis.
  7. Selecione Examinar e atribuir. O sistema processa a solicitação.
  8. Abra Atribuições de Função para ver a identidade gerenciada atribuída pelo sistema sob o papel de Colaborador do Cache Redis.

A próxima etapa é modificar a configuração de cache no cliente de API Web para usar a DefaultAzureCredential, que é a maneira recomendada de autenticar quando você usa a identidade gerenciada atribuída pelo sistema. Qualquer pessoa que acesse o aplicativo externamente não precisa ter atribuições de função específicas no nível do usuário para acessar os recursos por meio dessa forma de gerenciamento de identidade. Para obter mais informações, consulte Integrar o Cache Redis do Azure – identidade gerenciada atribuída pelo sistema.

Modificar o projeto de API Web para fazer referência ao serviço de Cache Redis do Azure

Antes de publicar o projeto de API Web a ser executado no Azure, atualize-o para fazer referência ao Cache Redis do Azure e use uma identidade gerenciada para acessá-lo com segurança. Para acomodar isso, você pode modificar o código de configuração de cache no Program.cs.

Para o Cache Redis do Azure, defina uma variável AZURE_REDIS_HOST de ambiente com as informações de conexão e leia-a no código de inicialização para se conectar ao Cache Redis do Azure e configure o cache.

Você usa Azure.Identity para obter DefaultAzureCredential, que gerencia a autenticação segura com sua identidade gerenciada.

  1. No Visual Studio, no projeto de API Web, adicione uma referência aos pacotes Azure Identity NuGet e Microsoft.Azure.StackExchange.Redis.

  2. Adicione diretivas de uso para os pacotes que você acabou de adicionar.

    using Azure.Identity;
    using Microsoft.Azure.StackExchange.Redis;
    
  3. Atualize o código de configuração do Cache Redis. Exclua o código antigo e substitua-o pelo código a seguir. Você pode examinar os comentários mais tarde e cancelar o comentário de qualquer código opcional para atender aos seus próprios cenários mais avançados.

     // Check the environment variable for the Redis cache host name
     var cacheHostName = Environment.GetEnvironmentVariable("AZURE_REDIS_HOST");
     if (string.IsNullOrEmpty(cacheHostName))
     {
         throw new InvalidOperationException("The environment variable 'AZURE_REDIS_HOST' is not set.");
     }
    
     var configurationOptions = ConfigurationOptions.Parse($"{cacheHostName}:6380");
    
     // For system-assigned identity.
     // In the Azure portal, we need to set up Redis service to grant Contributor access to the system-assigned identity
     // for the container app that hosts this Web API service.
     await configurationOptions.ConfigureForAzureWithTokenCredentialAsync(new DefaultAzureCredential());
    
     var connectionMultiplexer = await ConnectionMultiplexer.ConnectAsync(configurationOptions);
    
     builder.Services.AddStackExchangeRedisCache(options =>
     {
         options.ConfigurationOptions = configurationOptions;
         options.InstanceName = "SampleInstance";
     });
    
     // Uncomment the following line if you need to use the ConnectionMultiplexer directly
     // (for example, for advanced Redis operations like Pub/Sub or working with Redis data structures).
     // builder.Services.AddSingleton<IConnectionMultiplexer>(sp =>
     //     ConnectionMultiplexer.Connect(configurationOptions));
    
    

    O método de autenticação que você definiu anteriormente quando criou a conexão de cache é a identidade gerenciada atribuída pelo sistema, portanto, o código aqui é consistente com essa escolha. Se você também quiser usar outros métodos de autenticação, será necessário fazer alterações no código aqui. Consulte Integrar o Cache Redis do Azure – identidade gerenciada atribuída pelo sistema.

    Crie o projeto de API Web para verificar se não há erros.

  4. Se você tiver um Dockerfile, atualize o estágio base do Dockerfile para definir a variável AZURE_REDIS_HOSTde ambiente. Você obtém o host do portal do Azure, quando cria o Cache Redis do Azure ou da seção Service Connector da página do aplicativo de contêiner da API Web no portal (consulte a seção anterior).

    ENV AZURE_REDIS_HOST mycache.redis.cache.windows.net
    

    (Opcional) Você pode definir outras opções de configuração em variáveis de ambiente, por exemplo, AZURE_REDIS_PORT que geralmente é 6380. Para simplificar, esse valor é codificado em vez de usar uma variável de ambiente. Talvez você também deseje definir ASPNETCORE_ENVIRONMENT como Desenvolvimento.

    Se você estiver usando o tipo de build de contêiner do SDK do .NET (sem um Dockerfile), poderá definir a variável de ambiente em launchSettings.json em profiles > http.

     "http": {
       "commandName": "Project",
       "dotnetRunMessages": true,
       "launchBrowser": true,
       "launchUrl": "swagger",
       "applicationUrl": "http://localhost:5107",
       "environmentVariables": {
         "ASPNETCORE_ENVIRONMENT": "Development",
         "AZURE_REDIS_HOST": "cache11.redis.cache.windows.net"
       }
     }
    
  5. Você está pronto para publicar e verificar essas alterações. Selecione o botão Publicar na tela Publicar . O Visual Studio tentará carregar a página, mas isso falhará porque o aplicativo de contêiner de API Web não está acessível a solicitações fora do ambiente do aplicativo de contêiner.

Antes de executar o aplicativo com o Cache Redis do Azure, você precisa configurar a identidade gerenciada com as permissões certas para acessar o cache.

Testar o aplicativo

Volte para a tela Publicar no projeto Webfrontend e clique no link do URL do Webfrontend. Você verá o aplicativo Webfrontend aparecer com o contador que se atualiza quando você recarrega a página.

Dica

Os Aplicativos de Contêiner do Azure buscam maximizar o tempo de atividade de seus serviços. Se algo der errado com um dos serviços, de modo que ele falhe em uma verificação de integridade, os Aplicativos de Contêiner do Azure não o definirão como a revisão ativa e não o usarão para atender às solicitações. Como consequência, durante o processo de desenvolvimento e teste, você pode ocasionalmente descobrir que as alterações mais recentes feitas não se refletem no site ao vivo. No portal do Azure, selecione Revisões e réplicas para exibir o status da revisão publicada mais recente. A partir daí, você pode abrir logs para ajudar a solucionar o problema.

Parabéns! Você publicou com êxito um aplicativo multicontainer nos Aplicativos de Contêiner do Azure e verificou a comunicação entre contêineres e o uso do Cache Redis do Azure dentro do aplicativo.

Limpar os recursos

Para limpar os recursos criados durante este tutorial, acesse o portal do Azure e exclua o grupo de recursos que contém os aplicativos de contêiner, o cache e o registro de contêiner.

Próximas etapas

  • Saiba mais sobre os Aplicativos de Contêiner do Azure.
  • Saiba mais sobre o .NET Aspire, uma tecnologia que ajuda você a desenvolver mais facilmente aplicativos e serviços em contêineres complexos que se integram a diversos recursos no Azure. O .NET Aspire dá suporte à orquestração de tempo de desenvolvimento, integração padronizada com uma matriz de serviços, bem como suporte a ferramentas com modelos de projeto do Visual Studio.
  • Você também pode usar a CLI (interface de linha de comando) do Azure para trabalhar com seus aplicativos de contêiner. Instale a CLI do Azure e comece a trabalhar com os Aplicativos de Contêiner do Azure usando os comandos da CLI do Azure seguindo Implantar Aplicativos de Contêiner do Azure com o comando az containerapp up.