Compartilhar via


Tutorial: Implantar um aplicativo ASP.NET Core e Banco de Dados SQL do Azure para Serviço de Aplicativo do Azure

Neste tutorial, você aprenderá a implantar um aplicativo ASP.NET Core controlado por dados para Serviço de Aplicativo do Azure e conectar-se a um Banco de Dados SQL do Azure. Você também implantará um Cache do Azure para Redis para habilitar o código de cache em seu aplicativo. Serviço de Aplicativo do Azure é um serviço de hospedagem da Web altamente escalonável e autossusível que pode implantar facilmente aplicativos em Windows ou Linux. Embora este tutorial use um aplicativo ASP.NET Core 8.0, o processo é o mesmo para outras versões do ASP.NET Core.

Neste tutorial, você aprenderá a:

  • Crie uma arquitetura de Serviço de Aplicativo, Banco de Dados SQL e Cache Redis segura por padrão.
  • Proteger segredos de conexão usando uma identidade gerenciada e referências do Key Vault.
  • Implante um aplicativo de ASP.NET Core de exemplo no Serviço de Aplicativo de um repositório de GitHub.
  • Acesse as cadeias de conexão do Serviço de Aplicativo e as configurações do aplicativo no código do aplicativo.
  • Faça atualizações e reimplante o código do aplicativo.
  • Gerar o esquema de banco de dados carregando um pacote de migrações.
  • Transmitir logs de diagnóstico de Azure.
  • Gerencie o aplicativo no portal Azure.
  • Provisione a mesma arquitetura e implante usando o Azure Developer CLI.
  • Otimize seu fluxo de trabalho de desenvolvimento com GitHub codespaces e GitHub Copilot.

Pré-requisitos

  • Uma conta Azure com uma assinatura ativa. Se você não tiver uma conta Azure, pode criar uma gratuitamente.
  • Uma conta GitHub. Você também pode obter um gratuitamente.
  • Conhecimento do desenvolvimento ASP.NET Core.
  • (Opcional) Para experimentar GitHub Copilot, uma conta GitHub Copilot. Está disponível uma avaliação gratuita de 30 dias.

Ir para o final

Se você quiser ver apenas o aplicativo de exemplo neste tutorial em execução no Azure, basta executar os seguintes comandos no Azure Cloud Shell e siga o prompt:

dotnet tool install --global dotnet-ef
mkdir msdocs-app-service-sqldb-dotnetcore
cd msdocs-app-service-sqldb-dotnetcore
azd init --template msdocs-app-service-sqldb-dotnetcore
azd up

1. Execute o exemplo

Primeiro, você configura um aplicativo de exemplo baseado em dados como um ponto de partida. Para sua conveniência, o repositório de exemplo inclui uma configuração de container de desenvolvimento. O contêiner de desenvolvimento tem tudo o que você precisa para desenvolver um aplicativo, incluindo o banco de dados, o cache e todas as variáveis de ambiente necessárias para o aplicativo de exemplo. O contêiner de desenvolvimento pode ser executado em um GitHub codespace, o que significa que você pode executar o exemplo em qualquer computador com um navegador da Web.

Etapa 1: em uma nova janela do navegador:

  1. Entre em sua conta do GitHub.
  2. Navegue até https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore/fork.
  3. Desmarque Copiar somente a ramificação principal. Você quer todas as ramificações.
  4. Selecione Criar fork.

Uma captura de tela mostrando como criar um fork do repositório de exemplo do GitHub.

Step 2: na bifurcação GitHub:

  1. Selecione principal> starter-no-infra para a ramificação inicial. Esse branch contém apenas o projeto de exemplo e nenhuma configuração ou arquivos relacionados a Azure.
  2. Selecione Código>Codespaces>Criar codespace em starter-no-infra. O codespace leva alguns minutos para ser configurado.

Uma captura de tela mostrando como criar um codespace no GitHub.

Etapa 3: no terminal do codespace:

  1. Execute as migrações de banco de dados com dotnet ef database update.
  2. Execute o aplicativo com dotnet run.
  3. Quando vir a notificação Your application running on port 5093 is available., selecione Abrir no Navegador. Você deve ver o aplicativo de exemplo em uma nova guia do navegador. Para interromper o aplicativo, digite Ctrl+C.

Dica

Você pode perguntar GitHub Copilot sobre esse repositório. Por exemplo:

  • @workspace O que esse projeto faz?
  • @workspace O que a pasta .devcontainer faz?

Está enfrentando problemas? Confira a seção de Solução de problemas.

2. Criar Serviço de Aplicativo, banco de dados e cache

Nesta etapa, você criará os recursos de Azure. As etapas usadas neste tutorial criam um conjunto de recursos seguros por padrão que incluem Serviço de Aplicativo, Banco de Dados SQL do Azure e Cache Azure. Para o processo de criação, você especificará:

  • O Nome do aplicativo Web. Ele é usado como parte do nome DNS para seu aplicativo.
  • A Região para executar o aplicativo fisicamente no mundo. Também é usado como parte do nome DNS para o seu aplicativo.
  • A pilha de runtime para o aplicativo. É onde você seleciona a versão .NET a ser usada para seu aplicativo.
  • O plano de hospedagem para o aplicativo. É o tipo de preço que inclui o conjunto de recursos e a capacidade de colocação em escala do seu aplicativo.
  • O Grupo de Recursos para o aplicativo. Um grupo de recursos permite agrupar (em um contêiner lógico) todos os recursos de Azure necessários para o aplicativo.

Entre no portal Azure e siga estas etapas para criar seus recursos de Serviço de Aplicativo do Azure.

Step 1: No portal do Azure:

  1. Na barra de pesquisa superior, digite serviço de aplicativo.
  2. Selecione o item rotulado Serviço de Aplicativo sob o título Serviços.
  3. Selecione Criar>Aplicativo Web. Você também pode navegar até o assistente de criação diretamente.

Etapa 2: Na página Criar Aplicativo Web, preencha o formulário da seguinte forma.

  1. Nome: msdocs-core-sql-XYZ. Um grupo de recursos chamado msdocs-core-sql-XYZ_group será gerado para você.
  2. Pilha de execução: .NET 8 (LTS).
  3. Sistema operacional: Linux.
  4. Região: sua região preferida.
  5. Plano linux: crie um novo e use o nome msdocs-core-sql-XYZ.
  6. Plano de preços: Básico B1. Quando estiver pronto, você poderá aumentar para uma faixa de preço diferente.

Etapa 3:

  1. Selecione a guia Banco de Dados .
  2. Selecione Criar um Banco de Dados.
  3. No Mecanismo, selecione SQLAzure.
  4. Selecione Criar um Cache do Azure para Redis.
  5. Em Nome (em Cache), insira um nome para o cache.
  6. No SKU, selecione Básico.

Etapa 4:

  1. Selecione a guia Implantação.
  2. Habilitar a implantação contínua.
  3. Em Organization, selecione o alias GitHub.
  4. Em Repositório, selecione msdocs-app-service-sqldb-dotnetcore.
  5. Em Ramificação, selecione starter-no-infra.
  6. Verifique se a autenticação básica está desabilitada.
  7. Selecione Examinar + criar.
  8. Depois de concluir a validação, selecione Criar.

Etapa 5: A implantação leva alguns minutos para ser concluída. Depois que a implantação for concluída, selecione o botão Ir para o recurso. Você será direcionado diretamente ao app do App Service, mas os seguintes recursos são criados:

  • Grupo de recursos: o contêiner para todos os recursos criados.
  • Plano do Serviço de Aplicativo: define os recursos de computação para o Serviço de Aplicativo. É criado um plano do Linux na camada Básico.
  • Serviço de Aplicativo: representa seu aplicativo e é executado no plano de Serviço de Aplicativo.
  • Rede virtual: integrada ao aplicativo do Serviço de Aplicativo e isola o tráfego de rede de back-end.
  • Pontos de extremidade privados: acesse pontos de extremidade para o cofre de chaves, o servidor de banco de dados e o cache Redis na rede virtual.
  • Interfaces de rede: representam os endereços IP privados, um para cada um dos pontos de extremidade privados.
  • Banco de Dados SQL do Azure server: acessível somente por trás de seu endpoint privado.
  • Banco de Dados SQL do Azure: um banco de dados e um usuário são criados para você no servidor.
  • Cache do Azure para Redis: acessível somente por trás de seu ponto de extremidade privado.
  • Cofre de chaves: acessível somente a partir e por trás do seu ponto de extremidade privado. Usado para gerenciar segredos para o aplicativo do Serviço de Aplicativo.
  • Zonas DNS privadas: Habilitar a resolução DNS do cofre de chaves, do servidor de banco de dados e do cache Redis na Rede Virtual.

3. Proteger segredos de conexão

O assistente de configuração já gerou a variável de conectividade para você como .NET strings de conexão e configurações de aplicativo. No entanto, a melhor prática de segurança é manter os segredos fora do Serviço de Aplicativo completamente. Você moverá seus segredos para um cofre de chaves e alterará a configuração do aplicativo para Key Vault references com a ajuda de Service Connectors.

Dica

Para usar uma autenticação sem senha, confira Como alterar a conexão do Banco de Dados SQL para usar uma identidade gerenciada?

Passo 1: Recuperar a string de conexão

  1. No menu à esquerda da página Serviço de Aplicativo, selecione Configurações > Variáveis de Ambiente> Cadeias de conexão.
  2. Selecione AZURE_SQL_CONNECTIONSTRING.
  3. No Adicionar/Editar string de conexão, no campo Valor, localize a parte Password= no final da string.
  4. Copie a cadeia de caracteres de senha após Password= para uso posterior. Esse cadeia de conexão permite a conexão ao banco de dados SQL protegido por um endpoint privado. No entanto, os segredos são salvos diretamente no aplicativo do Serviço de Aplicativo, o que não é a melhor opção. Da mesma forma, a cadeia de conexão do cache Redis na guia App settings contém um segredo. Você vai mudar isso.

Etapa 2: Criar um cofre de chaves para o gerenciamento seguro de segredos

  1. Na barra de pesquisa superior, digite "key vault", em seguida, selecione Marketplace>Key Vault.
  2. No Grupo de Recursos, selecione msdocs-core-sql-XYZ_group.
  3. Em Nome do cofre de chaves, digite um nome que consista apenas em letras e números.
  4. Em Região, configure-a como o mesmo local do grupo de recursos.

Etapa 3: Proteger o cofre de chaves com um Endpoint Privado

  1. Selecione a guia Rede.
  2. Desmarque Habilitar acesso público.
  3. Selecione Criar um ponto de extremidade privado.
  4. No grupo de recursos, selecione msdocs-core-sql-XYZ_group.
  5. Na caixa de diálogo, em Local, selecione o mesmo local do seu aplicativo do Serviço de Aplicativo.
  6. Em Nome, digite msdocs-core-sql-XYZVvaultEndpoint.
  7. Na rede virtual, selecione a rede virtual no grupo msdocs-core-sql-XYZ_group .
  8. Na Sub-rede, selecione a sub-rede compatível disponível. O assistente do Aplicativo Web o criou para sua conveniência.
  9. Selecione OK.
  10. Selecione Examinar + criare Criar. Aguarde a conclusão da implantação do cofre de chaves. Você deverá ver "Sua implantação está concluída".

Etapa 4:

  1. Na barra de pesquisa superior, digite msdocs-core-sql e, em seguida, o recurso do Serviço de Aplicativo chamado msdocs-core-sql-XYZ.
  2. Na página do Serviço de Aplicativo, no menu à esquerda, selecione Configurações > Conector de serviço. Já existem dois conectores, que o assistente de criação de aplicativo criou para você.
  3. Marque a caixa de seleção ao lado do conector do Banco de Dados SQL e selecione Editar.
  4. Selecione a guia Autenticação.
  5. Em Senha, cole a senha copiada anteriormente.
  6. Selecione Armazenar Segredo no Key Vault.
  7. Em Key Vault Connection, selecione Criar novo. Uma caixa de diálogo Criar conexão é aberta na parte superior da caixa de diálogo de edição.

Step 5: estabelecer a conexão Key Vault

  1. Na caixa de diálogo Criar conexão para a conexão Key Vault, em Key Vault, selecione o key vault criado anteriormente.
  2. Selecione Examinar + criar.
  3. Após a conclusão da validação, selecione Criar.

Etapa 6: Finalizar as configurações do conector do Banco de Dados SQL

  1. Você está de volta à caixa de diálogo de edição para o defaultConnector. Na guia Autenticação, aguarde até que o conector do cofre de chaves seja criado. Quando terminar, a lista suspensa Key Vault Connection a selecionará automaticamente.
  2. Selecione Avançar: Rede.
  3. Selecione Configurar regras de firewall para habilitar o acesso ao serviço de destino. O assistente de criação de aplicativo já protegeu o banco de dados SQL com um ponto de extremidade privado.
  4. Selecione Salvar. Aguarde até que a notificação Atualização bem-sucedida seja exibida.

Step 7: Configurar o conector Redis para usar segredos do Key Vault

  1. Na página Conector de Serviço, marque a caixa de seleção ao lado do conector Cache para Redis e, em seguida, selecione Editar.
  2. Selecione a guia Autenticação.
  3. Selecione Armazenar Segredo no Key Vault.
  4. Em Key Vault Connection, selecione o key vault que você criou.
  5. Selecione Avançar: Rede.
  6. Selecione Configurar regras de firewall para habilitar o acesso ao serviço de destino.
  7. Selecione Salvar. Aguarde até que a notificação Atualização bem-sucedida seja exibida.

Etapa 8: Verifique a integração com o Key Vault

  1. No menu à esquerda, selecione Configurações > Variáveis de ambiente > Cadeias de conexão novamente.
  2. Ao lado de AZURE_SQL_CONNECTIONSTRING, selecione Mostrar valor. O valor deve ser @Microsoft.KeyVault(...), o que significa que é uma referência do cofre de chaves key vault reference porque o segredo agora é gerenciado no cofre de chaves.
  3. Para verificar a cadeia de conexão do Redis, selecione a guia Configurações do Aplicativo. Ao lado de AZURE_REDIS_CONNECTIONSTRING, selecione Mostrar valor. O valor deve ser @Microsoft.KeyVault(...) também.

Captura de tela mostrando como ver o valor da string de conexão do .NET no Azure.

Para resumir, o processo para proteger seus segredos de conexão envolveu:

  • Recuperando os segredos de conexão das variáveis de ambiente do aplicativo do Serviço de Aplicativo.
  • Criando um cofre de chaves.
  • Criar uma conexão Key Vault com a identidade gerenciada atribuída pelo sistema.
  • Atualizando os conectores de serviço para armazenar os segredos no cofre de chaves.

4. Implantar código de amostra

Nesta etapa, você configura GitHub implantação usando GitHub Actions. É apenas uma das muitas maneiras de implantar no App Service, mas também é excelente para ter integração contínua no seu processo de implantação. Por padrão, cada git push em seu repositório GitHub dá início ao processo de build e deployment.

Step 1: De volta ao codespace GitHub da bifurcação de exemplo, execute git pull origin starter-no-infra. Isso puxa o arquivo de fluxo de trabalho recém-confirmado para o seu codespace.

Step 2 (Opção 1: com GitHub Copilot):

  1. Inicie uma nova sessão de chat selecionando a exibição Chat e escolha +.
  2. Pergunte: "@workspace Como o aplicativo se conecta ao banco de dados e ao cache?" Copilot pode fornecer alguma explicação sobre a classe MyDatabaseContext e como ela é configurada em Program.cs.
  3. Pergunte: "No modo de produção, quero que o aplicativo use a cadeia de conexão denominada AZURE_SQL_CONNECTIONSTRING para o banco de dados e a configuração do aplicativo chamada AZURE_REDIS_CONNECTIONSTRING." Copilot pode fornecer uma sugestão de código semelhante àquela nas etapas a seguir em Option 2: sem GitHub Copilot e até mesmo instruí-lo a fazer a alteração no arquivo Program.cs.
  4. Abra Program.cs no explorador e adicione a sugestão de código. GitHub Copilot não oferece a mesma resposta todas as vezes e nem sempre está correto. Talvez seja necessário fazer mais perguntas para ajustar sua resposta. Para obter dicas, consulte O que posso fazer com GitHub Copilot no meu codespace?.

Step 2 (Opção 2: sem GitHub Copilot):

  1. Abra Program.cs no explorador de arquivos.
  2. Encontre o código comentado (linhas 12-21) e descomente-o. Esse código se conecta ao banco de dados usando AZURE_SQL_CONNECTIONSTRING e se conecta ao Cache Redis usando a configuração do aplicativo AZURE_REDIS_CONNECTIONSTRING.

Step 3 (Opção 1: com GitHub Copilot):

  1. Abra .github/workflows/starter-no-infra_msdocs-core-sql-XYZ no explorador. O assistente de criação do App Service criou este arquivo.
  2. Realce a etapa dotnet publish e selecione .
  3. Perguntar ao Copilot, "Instale dotnet ef, em seguida, crie um pacote de migrações na mesma pasta de saída."
  4. Se a sugestão for aceitável, selecione Aceitar. GitHub Copilot não oferece a mesma resposta todas as vezes e nem sempre está correto. Talvez seja necessário fazer mais perguntas para ajustar sua resposta. Para obter dicas, consulte O que posso fazer com GitHub Copilot no meu codespace?.

Uma captura de tela mostrando o uso do GitHub Copilot em um arquivo de fluxo de trabalho do GitHub.

Step 3 (Opção 2: sem GitHub Copilot):

  1. Abra .github/workflows/starter-no-infra_msdocs-core-sql-XYZ no explorador. O assistente de criação do Serviço de Aplicativo criou este arquivo
  2. Na etapa dotnet publish, adicione uma etapa para instalar a ferramenta Entity Framework Core com o comando dotnet tool install -g dotnet-ef --version 8.*.
  3. Na nova etapa, adicione outra etapa para gerar um pacote de migração de banco de dados no pacote de implantação: dotnet ef migrations bundle --runtime linux-x64 -o ${{env.DOTNET_ROOT}}/myapp/migrationsbundle. O pacote de migração é um executável autocontido que você pode executar no ambiente de produção sem precisar do SDK do .NET. O contêiner linux do Serviço de Aplicativo tem apenas o .NET runtime e não o SDK do .NET.

captura de tela A mostrando as etapas adicionadas ao arquivo de fluxo de trabalho GitHub para o pacote de migração de banco de dados.

Etapa 4:

  1. Selecione a extensão Controle do código-fonte.
  2. Na caixa de texto, digite uma mensagem de confirmação como Configure Azure database and cache connections. Ou selecione e deixe GitHub Copilot gerar uma mensagem de confirmação para você.
  3. Selecione Confirmare confirme com Sim.
  4. Selecione Sincronizar alterações 1e confirme com OK.

Uma captura de tela mostrando as alterações realizadas e empurradas para o GitHub.

Step 5: Volte para a página do Centro de Implantação no portal do Azure:

  1. Selecione a guia Logs e, em seguida, selecione Atualizar para ver a nova execução de implantação.
  2. No item de log da execução da implantação, selecione a entrada Compilar/Implantar Logs com o carimbo de data/hora mais recente.

Step 6: Você é levado para o repositório GitHub e vê que a ação GitHub está em execução. O arquivo do fluxo de trabalho define dois estágios separados, compilar e implantar. Aguarde a execução do GitHub para mostrar um status de Sucesso. Ela leva cerca de 5 minutos.

Uma captura de tela mostrando uma execução do GitHub em andamento.

Está enfrentando problemas? Confira a seção de Solução de problemas.

5. Gerar esquema de banco de dados

Com o Banco de Dados SQL protegido pela rede virtual, a maneira mais fácil de executar migrações de banco de dados do dotnet é em uma sessão do SSH com o contêiner do Linux no Serviço de Aplicativo.

Etapa 1: de volta na página do Serviço de Aplicativo, no menu à esquerda,

  1. Selecione Ferramentas de Desenvolvimento>SSH.
  2. Selecione Ir. (A inicialização leva alguns minutos.)

Etapa 2: Na sessão SSH:

  1. Execute cd /home/site/wwwroot. Aqui estão todos os arquivos implantados.
  2. Execute o pacote de migração gerado pelo fluxo de trabalho GitHub, com o comando ./migrationsbundle -- --environment Production. Se ele for bem-sucedido, o Serviço de Aplicativo se conectará com êxito ao banco de dados SQL. Lembre-se de que --environment Production corresponde às alterações de código feitas no Program.cs.

Na sessão SSH, somente as alterações nos arquivos em /home podem persistir além das reinicializações do aplicativo. As alterações feitas fora de /home não são persistentes.

Está enfrentando problemas? Confira a seção de Solução de problemas.

6. Navegar até o aplicativo

Etapa 1: na página Serviço de Aplicativo:

  1. No menu esquerdo, selecione Visão geral.
  2. Selecione a URL do aplicativo.

Etapa 2: adicione algumas tarefas à lista. Parabéns, você está executando um aplicativo Web em Serviço de Aplicativo do Azure, com conectividade segura com Banco de Dados SQL do Azure.

Dica

O aplicativo de exemplo implementa o padrão cache-aside. Quando você visita uma exibição de dados pela segunda vez ou recarrega a mesma página depois de fazer alterações de dados, o tempo de processamento na página da Web mostra um tempo mais rápido porque está carregando os dados do cache em vez do banco de dados.

7. Logs de diagnóstico de fluxo

Serviço de Aplicativo do Azure captura todos os logs de console para ajudá-lo a diagnosticar problemas com seu aplicativo. O aplicativo de exemplo inclui código de registro em log em cada um de seus pontos de extremidade para demonstrar essa funcionalidade.

Etapa 1: na página Serviço de Aplicativo:

  1. No menu à esquerda, selecione Monitoramento>Logs do Serviço de Aplicativo.
  2. Em Log do aplicativo, selecione Sistema de arquivos.
  3. No menu superior, selecione Salvar.

Etapa 2: no menu esquerdo, selecione Fluxo de log. Você verá os logs do seu aplicativo, incluindo os logs de plataforma e os logs de dentro do contêiner.

8. Limpar os recursos

Quando terminar, você poderá excluir todos os recursos de sua assinatura de Azure excluindo o grupo de recursos.

Step 1: na barra de pesquisa na parte superior do portal do Azure:

  1. Insira o nome do grupo de recursos.
  2. Selecione o grupo de recursos.

Uma captura de tela mostrando como pesquisar e navegar até um grupo de recursos no portal do Azure.

Etapa 2: na página Grupo de recursos, selecione Excluir grupo de recursos.

Etapa 3:

  1. Insira o nome do grupo de recursos para confirmar a exclusão.
  2. Selecione Excluir.

2. Criar recursos Azure e implantar um aplicativo de exemplo

Nesta etapa, você criará os recursos de Azure e implantará um aplicativo de exemplo para Serviço de Aplicativo no Linux. As etapas usadas neste tutorial criam um conjunto de recursos seguros por padrão que incluem Serviço de Aplicativo, Banco de Dados SQL do Azure e Cache do Azure para Redis.

O contêiner de desenvolvimento já tem a CLI Azure Developer (AZD).

  1. Na raiz do repositório, execute azd init.

    azd init --template dotnet-app-service-sqldb-infra
    
  2. Quando solicitado, dê as seguintes respostas:

    Pergunta Resposta
    O diretório atual não está vazio. Deseja inicializar um projeto aqui em “<seu diretório>”? Y
    O que você gostaria de fazer com esses arquivos? Manter meus arquivos existentes inalterados
    Insira um novo nome do ambiente Digite um nome exclusivo. O modelo do AZD usa esse nome como parte do nome DNS do seu aplicativo Web em Azure (<app-name>-<hash>.azurewebsites.net). São permitidos caracteres alfanuméricos e hífens.
  3. Entre Azure executando o comando azd auth login e seguindo o prompt:

    azd auth login
    
  4. Crie os recursos de Azure necessários e implante o código do aplicativo com o comando azd up. Siga o prompt para selecionar a assinatura e o local desejados para os recursos de Azure.

    azd up
    

    O comando azd up leva cerca de 15 minutos para ser concluído (o cache Redis leva mais tempo). Ele também compila e implanta o código do aplicativo, mas você modificará seu código posteriormente para trabalhar com o Serviço de Aplicativo. Durante a execução, o comando fornece mensagens sobre o processo de provisionamento e implantação, incluindo um link para a implantação no Azure. Quando ele é concluído, o comando também exibe um link para o aplicativo de implantação.

    Este modelo do AZD contém arquivos (azure.yaml e o diretório infra) que geram uma arquitetura segura por padrão com os seguintes recursos de Azure:

    • Grupo de recursos: o contêiner para todos os recursos criados.
    • Plano do Serviço de Aplicativo: define os recursos de computação para o Serviço de Aplicativo. É criado um plano do Linux na camada Básico.
    • Serviço de Aplicativo: representa seu aplicativo e é executado no plano de Serviço de Aplicativo.
    • Rede virtual: integrada ao aplicativo do Serviço de Aplicativo e isola o tráfego de rede de back-end.
    • Pontos de extremidade privados: acesse pontos de extremidade para o cofre de chaves, o servidor de banco de dados e o cache Redis na rede virtual.
    • Interfaces de rede: representam os endereços IP privados, um para cada um dos pontos de extremidade privados.
    • Banco de Dados SQL do Azure server: acessível somente por trás de seu endpoint privado.
    • Banco de Dados SQL do Azure: um banco de dados e um usuário são criados para você no servidor.
    • Cache do Azure para Redis: acessível somente por trás de seu ponto de extremidade privado.
    • Cofre de chaves: acessível somente a partir e por trás do seu ponto de extremidade privado. Usado para gerenciar segredos para o aplicativo do Serviço de Aplicativo.
    • Zonas DNS privadas: Habilitar a resolução DNS do cofre de chaves, do servidor de banco de dados e do cache Redis na Rede Virtual.

    Depois que o comando terminar de criar recursos e implantar o código do aplicativo na primeira vez, o aplicativo de exemplo implantado ainda não funcionará porque você deve fazer pequenas alterações para fazê-lo se conectar ao banco de dados em Azure.

Está enfrentando problemas? Confira a seção de Solução de problemas.

3. Verificar cadeias de conexão

Dica

A string de conexão padrão do banco de dados SQL utiliza autenticação SQL. Para obter uma autenticação sem senha mais segura, confira Como alterar a conexão do Banco de Dados SQL para usar uma identidade gerenciada?

O modelo do AZD que você usa já gerou as variáveis de conectividade como configurações do aplicativo e as envia para o terminal para sua conveniência. As configurações do aplicativo são uma maneira de manter os segredos de conexão fora do seu repositório de códigos.

  1. Na saída do AZD, localize as configurações AZURE_SQL_CONNECTIONSTRING e AZURE_REDIS_CONNECTIONSTRING. Somente os nomes das configurações são exibidos. Elas têm esta aparência na saída do AZD:

     App Service app has the following connection strings:
         - AZURE_SQL_CONNECTIONSTRING
         - AZURE_REDIS_CONNECTIONSTRING
         - AZURE_KEYVAULT_RESOURCEENDPOINT
         - AZURE_KEYVAULT_SCOPE
     

    AZURE_SQL_CONNECTIONSTRING contém a cadeia de conexão para o Banco de Dados SQL no Azure e AZURE_REDIS_CONNECTIONSTRING contém a cadeia de conexão para o cache Redis do Azure. Você precisa usá-las em seu código mais tarde.

  2. Para sua conveniência, o modelo do AZD mostra o link direto para a página de configurações do aplicativo. Localize o link e abra-o em uma nova guia do navegador.

Está enfrentando problemas? Confira a seção de Solução de problemas.

4. Modificar o código de exemplo do aplicativo e reimplantar

  1. No GitHub codespace, inicie uma nova sessão de chat selecionando a exibição Chat e selecionando +.

  2. Pergunte: "@workspace Como o aplicativo se conecta ao banco de dados e ao cache?" Copilot pode fornecer alguma explicação sobre a classe MyDatabaseContext e como ela é configurada em Program.cs.

  3. Pergunte: "No modo de produção, quero que o aplicativo use a cadeia de conexão chamada AZURE_SQL_CONNECTIONSTRING para o banco de dados e a configuração do aplicativo chamada AZURE_REDIS_CONNECTIONSTRING*." O Copilot pode fornecer uma sugestão de código semelhante àquela nas etapas de Opção 2: sem GitHub Copilot que seguem e até mesmo dizer para você fazer a alteração no arquivo Program.cs.

  4. Abra Program.cs no explorador e adicione a sugestão de código.

    GitHub Copilot não oferece a mesma resposta todas as vezes e nem sempre está correto. Talvez seja necessário fazer mais perguntas para ajustar sua resposta. Para obter dicas, consulte O que posso fazer com GitHub Copilot no meu codespace?.

Antes de implantar essas alterações, você ainda precisará gerar um pacote de migração.

Está enfrentando problemas? Confira a seção de Solução de problemas.

5. Gerar esquema de banco de dados

Com o Banco de Dados SQL protegido pela rede virtual, a maneira mais fácil de executar as migrações de banco de dados é em uma sessão SSH no contêiner do Serviço de Aplicativo. No entanto, os contêineres do Linux do Serviço de Aplicativo não têm o SDK .NET, portanto, a maneira mais fácil de executar migrações de banco de dados é carregar um pacote de migrações independentes.

  1. Gere um pacote de migrações para o seu projeto com o seguinte comando:

    dotnet ef migrations bundle --runtime linux-x64 -o migrationsbundle
    

    Dica

    O aplicativo de exemplo (consulte DotNetCoreSqlDb.csproj) está configurado para incluir esse arquivo migrationsbundle. Durante o estágio azd package, migrationsbundle será adicionado ao pacote de implantação.

  2. Implantar todas as alterações com azd up.

    azd up
    
  3. Na saída do AZD, localize a URL da sessão SSH e navegue até ela no navegador. Fica assim na saída:

     Open SSH session to App Service container at: <URL>
     
  4. Na sessão SSH, execute os seguintes comandos:

    cd /home/site/wwwroot
    ./migrationsbundle -- --environment Production
    

    Se ele for bem-sucedido, o Serviço de Aplicativo está se conectando com êxito ao banco de dados. Lembre-se de que --environment Production corresponde às alterações de código feitas no Program.cs.

    Observação

    Somente as alterações nos arquivos /home podem persistir além das reinicializações do aplicativo. As alterações feitas fora de /home não são persistentes.

Está enfrentando problemas? Confira a seção de Solução de problemas.

6. Navegar até o aplicativo

  1. Na saída do AZD, localize a URL do seu aplicativo e navegue até ela no navegador. O URL fica assim na saída do AZD:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: <URL>
     
  2. Adicione algumas tarefas à lista.

    Uma captura de tela do aplicativo web ASP.NET Core com o Banco de Dados SQL em execução no Azure, mostrando tarefas.

    Parabéns, você está executando um aplicativo Web em Serviço de Aplicativo do Azure, com conectividade segura com Banco de Dados SQL do Azure.

Está enfrentando problemas? Confira a seção de Solução de problemas.

7. Logs de diagnóstico de fluxo

Serviço de Aplicativo do Azure pode capturar logs de console para ajudá-lo a diagnosticar problemas com seu aplicativo. Por conveniência, o modelo do AZD já habilitou o registro no sistema de arquivos local e está enviando os logs para um workspace Log Analytics.

O aplicativo de exemplo inclui instruções de log padrão para demonstrar essa funcionalidade, conforme mostrado no snippet a seguir:

public async Task<IActionResult> Index()
{
    var todoItems = await _cache.GetAsync(_TodoItemsCacheKey);
    if (todoItems != null)
    {
        _logger.LogInformation("Data from cache.");
        var todoList = JsonConvert.DeserializeObject<List<Todo>>(Encoding.UTF8.GetString(todoItems));
        return View(todoList);
    }
    else
    {
        _logger.LogInformation("Data from database.");
        var todoList = await _context.Todo.ToListAsync();
        var serializedTodoList = JsonConvert.SerializeObject(todoList);
        await _cache.SetAsync(_TodoItemsCacheKey, Encoding.UTF8.GetBytes(serializedTodoList));
        return View(todoList);
    }
}

Na saída do AZD, localize o link para transmitir logs do Serviço de Aplicativo e navegue até ele no navegador. O link tem esta aparência na saída do AZD:

Stream App Service logs at: <URL>

Saiba mais sobre como fazer logon em aplicativos .NET na série em Enable Azure Monitor OpenTelemetry para aplicativos .NET, Node.js, Python e Java.

Está enfrentando problemas? Confira a seção de Solução de problemas.

8. Limpar os recursos

Para excluir todos os recursos Azure no ambiente de implantação atual, execute azd down e siga os prompts.

azd down

Solução de problemas

A visão de implantação do portal para Banco de Dados SQL do Azure mostra um status de conflito

Dependendo da sua assinatura e da região selecionada, você poderá ver o status de implantação para Banco de Dados SQL do Azure ser Conflict, com a seguinte mensagem nos detalhes da Operação:

Location '<region>' is not accepting creation of new Windows Azure SQL Database servers at this time.

Esse erro provavelmente é causado por um limite em sua assinatura para a região selecionada. Tente escolher uma região diferente para sua implantação.

No portal do Azure, o fluxo de logs do aplicativo web mostra erros de rede.

Você poderá ver este erro:

Unable to open a connection to your app. This may be due to any network security groups or IP restriction rules that you have placed on your app. To use log streaming, please make sure you are able to access your app directly from your current network.

Geralmente, esse é um erro transitório quando o aplicativo é iniciado pela primeira vez. Aguarde alguns minutos e verifique novamente.

A sessão SSH no navegador mostra SSH CONN CLOSED

Demora alguns minutos para que o contêiner Linux seja iniciado. Aguarde alguns minutos e verifique novamente.

A página de streaming de log do portal mostra Connected!, mas não há logs

Depois de configurar os logs de diagnóstico, o aplicativo será reiniciado. Talvez seja necessário atualizar a página para que as alterações entrem em vigor no navegador.

Perguntas frequentes

Quanto custa essa configuração?

O preço dos recursos criados são os seguintes:

  • O plano do Serviço de Aplicativo é criado na camada Básica e pode ser ampliado ou reduzido. Confira Preço do Serviço de Aplicativo.
  • O Banco de Dados SQL do Azure é criado na camada de uso geral e sem servidor no hardware da série Standard com o mínimo de núcleos. Há um pequeno custo e ele pode ser distribuído para outras regiões. Você pode minimizar ainda mais o custo reduzindo o tamanho máximo ou dimensioná-lo ajustando a camada de serviço, a camada de computação, a configuração de hardware, o número de núcleos, o tamanho do banco de dados e a redundância de zona. Consulte Banco de Dados SQL do Azure preços.
  • O Cache do Azure para Redis é criado na camada Basic com o tamanho mínimo do cache. Há um pequeno custo associado a essa camada. Você pode dimensioná-la para níveis de desempenho mais altos para maior disponibilidade, clustering e outros recursos. Consulte os preços do Cache do Azure para Redis.
  • A rede virtual não incorre em cobrança, a menos que você configure uma funcionalidade extra, como emparelhamento. Consulte preços do Rede Virtual do Azure.
  • A zona DNS privada incorre em uma pequena cobrança. Consulte os preços do DNS do Azure.

Como fazer para me conectar ao servidor Banco de Dados SQL do Azure protegido por trás da rede virtual com outras ferramentas?

  • Para acesso básico de uma ferramenta de linha de comando, você pode rodar sqlcmd no terminal SSH do aplicativo. O contêiner do aplicativo não vem com sqlcmd, portanto, você deve instalá-lo manualmente. Lembre-se de que o cliente instalado não persiste entre as reinicializações do aplicativo.
  • Para se conectar de um cliente SQL Server Management Studio ou de Visual Studio, seu computador deve estar dentro da rede virtual. Por exemplo, pode ser uma VM Azure conectada a uma das sub-redes ou um computador em uma rede local que tenha uma conexão VPN site a site com a rede virtual Azure.

Como o desenvolvimento de aplicativos locais funciona com GitHub Actions?

Use o arquivo de fluxo de trabalho gerado automaticamente do Serviço de Aplicativo como exemplo, cada git push inicia uma nova execução de build e implantação. A partir de um clone local do repositório do GitHub, você faz as atualizações desejadas e as envia para o GitHub. Por exemplo:

git add .
git commit -m "<some-message>"
git push origin main

Como depurar erros durante a implantação do GitHub Actions?

Se um passo falhar no arquivo de fluxo de trabalho do GitHub gerado automaticamente, tente modificar o comando que falhou para gerar uma saída mais detalhada. Por exemplo, você pode obter mais saída de qualquer um dos comandos dotnet adicionando a opção -v. Confirme e efetue push das suas alterações para disparar outra implantação para Serviço de Aplicativo.

Não tenho permissões para criar uma identidade atribuída pelo usuário

Consulte Configurar a implantação do GitHub Actions a partir do Centro de Implantação.

Como alterar a conexão do Banco de Dados SQL para usar uma identidade gerenciada?

O Service Connector gerencia o cadeia de conexão padrão para o banco de dados SQL, com o nome defaultConnector e usa a autenticação SQL. Para substituí-lo por uma conexão que usa uma identidade gerenciada, execute os seguintes comandos no cloud shell depois de substituir os espaços reservados:

az extension add --name serviceconnector-passwordless --upgrade
az sql server update --enable-public-network true
az webapp connection delete sql --connection defaultConnector --resource-group <group-name> --name <app-name>
az webapp connection create sql --connection defaultConnector --resource-group <group-name> --name <app-name> --target-resource-group <group-name> --server <database-server-name> --database <database-name> --client-type dotnet --system-identity --config-connstr true
az sql server update --enable-public-network false

Por padrão, o comando az webapp connection create sql --client-type dotnet --system-identity --config-connstr faz o seguinte:

  • Define o usuário como o administrador Microsoft Entra ID do servidor de banco de dados SQL.
  • Crie uma identidade gerenciada atribuída pelo sistema e conceda-lhe acesso ao banco de dados.
  • Gera uma cadeia de conexão sem senha chamada AZURE_SQL_CONNECTIONGSTRING, que seu aplicativo já está usando no final do tutorial.

Seu aplicativo agora deve ter conectividade com o banco de dados SQL. Para obter mais informações, consulte Tutorial: conecte-se a bancos de dados Azure do Serviço de Aplicativo sem segredos usando uma identidade gerenciada.

Dica

Não deseja habilitar a conexão de rede pública? Você pode pular az sql server update --enable-public-network true executando os comandos a partir de um Azure Cloud Shell integrado à sua rede virtual se você tiver a atribuição da função Proprietário em sua assinatura.

Para conceder à identidade o acesso necessário ao banco de dados protegido pela rede virtual, az webapp connection create sql precisa de conectividade direta com a autenticação Entra ID para o servidor de banco de dados. Por padrão, o Azure cloud shell não tem esse acesso ao banco de dados protegido pela rede.

O que posso fazer com GitHub Copilot no meu codespace?

Talvez você tenha notado que a janela de chat do GitHub Copilot já estava disponível quando criou o codespace. Para sua conveniência, incluímos a extensão de chat GitHub Copilot na definição de contêiner (consulte .devcontainer/devcontainer.json). No entanto, você precisa de uma conta GitHub Copilot (avaliação gratuita de 30 dias disponível).

Algumas dicas para você ao falar com GitHub Copilot:

  • Em uma única sessão de chat, as perguntas e respostas se baseiam umas nas outras e você pode ajustar suas perguntas para ajustar a resposta que receber.
  • Por padrão, GitHub Copilot não tem acesso a nenhum arquivo em seu repositório. Para fazer perguntas sobre um arquivo, abra o arquivo no editor primeiro.
  • Para permitir que GitHub Copilot tenham acesso a todos os arquivos no repositório ao preparar suas respostas, comece sua pergunta com @workspace. Para obter mais informações, consulte Use the @workspace agent.
  • Na sessão de chat, GitHub Copilot pode sugerir alterações e (com @workspace) até mesmo onde realizar as alterações, mas não é permitido fazer as alterações para você. Cabe a você adicionar as alterações sugeridas e testá-las.

Veja algumas outras coisas que você pode dizer para ajustar a resposta que você recebe:

  • Quero que esse código seja executado somente no modo de produção.
  • Quero que esse código seja executado apenas em Serviço de Aplicativo do Azure e não localmente.
  • O parâmetro --output-path parece não ter suporte.

Avance para o próximo tutorial para saber como proteger seu aplicativo com um domínio e um certificado personalizados.

Se preferir, confira outros recursos: