Partilhar via


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

Você pode implantar um aplicativo de vários contêineres em 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 seu aplicativo no mesmo ambiente de aplicativo de contêiner para permitir que eles se comuniquem entre si de forma fácil e segura. 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 de microsserviços possíveis e um conjunto completo de ferramentas avançadas de monitoramento. Se você estiver usando o Docker Compose para gerenciar aplicativos de contêiner locais, considere tentar portá-lo 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 a app que você criou com o Criar um aplicativo de vários contêineres, e implantamo-la 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. Você especificamente deve escolher o mesmo ambiente de aplicativo de contêiner no processo de publicação. Finalmente, você precisa configurar o cache Redis para trabalhar com o serviço de Cache Redis do Azure. Modifique o código de configuração do cache e publique novamente a API da Web. Em seguida, configure as permissões para conceder à identidade gerenciada atribuída pelo sistema do aplicativo acesso ao cache.

Pré-requisitos

  • Uma assinatura do Azure. Inscreva-se para uma avaliação gratuita.
  • Visual Studio com as cargas de trabalho de desenvolvimento eASP.NET e desenvolvimento Web do Azure instaladas.
  • O projeto MulticontainerSample em https://github.com/MicrosoftDocs/vs-tutorial-samples na pasta docker . A solução de exemplo contém dois projetos, o back-end da API Web e o front-end do ASP.NET Razor, 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 de composição do Docker.

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 ASP.NET e desenvolvimento Web instaladas.
  • O projeto MulticontainerSample em https://github.com/MicrosoftDocs/vs-tutorial-samples na pasta docker . A solução de exemplo contém dois projetos, o back-end da API Web e o front-end do ASP.NET Razor, 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 de composição do Docker.

Implantar o back-end 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 Azure de destino e, em seguida, selecione Aplicativos de Contêiner do Azure.

  3. Se ainda não tiver iniciado sessão com uma conta associada a uma subscrição do Azure, pode iniciar sessão agora ou alterar o inquilino, se necessário.

  4. Na tela onde 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 onde 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 de Contêiner do Azure , insira detalhes como o grupo de recursos. Para esta etapa, você cria 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 onde você cria um novo aplicativo de contêiner.

    Pode demorar um pouco para criar os recursos. Quando terminar, clique em Avançar para passar para a próxima etapa.

  6. Na próxima etapa, você cria um registro de contêiner. Se você criar um novo registro de contêiner, serão solicitados 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 compilação de contêiner. Escolha .NET SDK se você não tiver um Dockerfile ou Docker Desktop se tiver.

    Captura de tela mostrando a escolha do tipo de compilação do 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 selecionada.

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

    Mensagem perguntando se deve conceder acesso ao utilizador Admin.

    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 contêiner, como a URL para entrada na 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 inicia o processo de publicação para o aplicativo de contêiner WebAPI.

    O Visual Studio pode tentar carregar a página para o 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 começar de novo ou alterar qualquer um dos recursos do Azure especificados.

Mais tarde, usará o portal do Azure para fazer algumas alterações de configuração adicionais para o Ingress e para suportar o Azure Redis Cache, mas primeiro, na próxima secção, publicará o frontend 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. Este é o nome mostrado em Nome do recurso na tela Publicação da API Web. Para comunicação contêiner-a-contêiner, você pode usar HTTP diretamente com o nome do aplicativo de contêiner, sem especificar um nome de domínio totalmente qualificado (FQDN) e número da porta. No método OnGet, substitua a linha existente que define a variável RequestUri para fazer referência ao 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 do mouse 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 de API Web.

    Captura de tela mostrando a tela no processo Publicar onde 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 onde você cria o aplicativo de contêiner Webfrontend, certificando-se de selecionar o mesmo registro de contêiner que você criou anteriormente.

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

  6. Selecione Concluir para concluir o processo de publicação e crie 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 contêiner, como a URL para entrada no 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 Ingress , defina Tráfego de entrada como Limitado ao ambiente de aplicativos de contêiner. Isto significa que apenas o Webfrontend pode enviar pedidos. 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 de API da 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 Webfrontend Ingress, você pode aceitar os padrões. A porta de destino é 8080, porque o Ingress lida com todas as solicitações com segurança usando o FQDN e HTTPS (ou 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 que você criou anteriormente. Abra a tela Service Connector 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 Service Connector 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 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 Identidade gerenciada atribuída ao 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 para ver o cache recém-conectado (se ainda não o vir) 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 os fins deste tutorial, você só precisa de AZURE_REDIS_HOST, mas você pode usar os outros em 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 Guia de 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 ao Colaborador acesso à identidade gerenciada atribuída pelo sistema do aplicativo 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 é aberta.
  3. Selecione a guia Membros e escolha identidade gerenciada.
  4. Selecione Selecionar membros. A página Selecionar membros é aberta e selecione Identidade gerenciada atribuída ao sistema.
  5. Selecione Aplicativo de contêiner e escolha o aplicativo de contêiner de API Web.
  6. Na guia Função, escolha o Colaborador da Cache Redis.
  7. Selecione Rever e atribuir. O sistema processa o pedido.
  8. Abra Atribuições de função para ver a identidade gerenciada atribuída ao sistema na função de Colaborador do Cache Redis .

A próxima etapa é modificar a configuração de cache no cliente de API Web para usar o DefaultAzureCredential, que é a maneira recomendada de autenticar quando você usa a identidade gerenciada atribuída ao 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 para 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 do 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, em seguida, leia-a no código de inicialização para se conectar ao Cache Redis do Azure e configure o cache.

Você utiliza Azure.Identity para obter o DefaultAzureCredential que lida com a autenticação segura com a sua identidade gerida.

  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 acabou de adicionar.

    using Azure.Identity;
    using Microsoft.Azure.StackExchange.Redis;
    
  3. Atualize o código de configuração para o Cache Redis. Exclua o código antigo e substitua-o pelo código a seguir. Você pode revisar os comentários mais tarde e descomentar qualquer código opcional para se adequar 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 definido anteriormente quando você criou a conexão de cache é a identidade gerenciada atribuída ao sistema, portanto, o código aqui é consistente com essa escolha. Se você quiser usar outros métodos de autenticação também, você precisa 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. Você também pode querer definir ASPNETCORE_ENVIRONMENT como Desenvolvimento.

    Se estiver a usar o tipo de build de contentor do SDK do .NET (sem um Dockerfile), pode definir a variável de ambiente em launchSettings.json sob 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 de 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 a aplicação

Regresse ao ecrã de Publicar no projeto Webfrontend e clique no link na URL do Webfrontend. Você deverá ver o aplicativo Webfrontend aparecer com o contador que é atualizado quando você recarrega a página.

Sugestão

As Aplicações de Contentor do Azure procuram maximizar o tempo de funcionamento dos seus serviços. Se algo der errado com um dos serviços, de modo que ele falhe em uma investigação de integridade, os Aplicativos de Contêiner do Azure não o definirão como a revisão ativa e o usarão para atender 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 são refletidas no site ativo. No portal do Azure, selecione Revisões e réplicas para exibir o status da última revisão publicada. A partir daí, você pode abrir logs para ajudar a solucionar o problema.

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

Limpeza de recursos

Para limpar os recursos criados durante este tutorial, vá para 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óximos passos

  • 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 conteinerizados complexos que se integram a diversos recursos no Azure. O .NET Aspire suporta 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 interface de linha de comando (CLI) 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.