Tutorial: implantar um aplicativo ASP.NET Core e conectar-se ao Banco de Dados SQL do Azure no Serviço de Aplicativo do Azure

Nesse tutorial, você aprenderá a implantar um aplicativo baseado em dados ASP.NET Core no 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. O Serviço de Aplicativo do Azure é um serviço de hospedagem na Web com aplicação de patch automática altamente escalonável que pode implantar facilmente aplicativos no Windows ou no Linux. Embora esse tutorial use um aplicativo ASP.NET Core 7.0, o processo é o mesmo para outras versões do ASP.NET Core e do ASP.NET Framework.

Este tutorial exige:

Aplicativo de exemplo

Para explorar o aplicativo de exemplo usado neste tutorial, baixe-o do repositório https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore ou clone-o usando o seguinte comando Git:

git clone https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.git
cd msdocs-app-service-sqldb-dotnetcore

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

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

  • O Nome do aplicativo Web. Esse nome é usado como parte do nome DNS para seu aplicativo Web na forma de https://<app-name>.azurewebsites.net.
  • A Região para executar o aplicativo fisicamente no mundo.
  • A pilha de runtime para o aplicativo. É aqui que você seleciona a versão do .NET a ser usada para o 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 necessários do Azure para o aplicativo.

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

Etapa 1: no portal do Azure:

  1. Insira “banco de dados do aplicativo Web” na caixa de pesquisa na parte superior do portal do Azure.
  2. Selecione o item Web App + Banco de Dados no título Marketplace. Você também pode navegar diretamente para o assistente de criação.

A screenshot showing how to use the search box in the top tool bar to find the Web App + Database creation wizard.

Etapa 2: na página Criar aplicativo Web + Banco de dados, preencha o formulário conforme mostrado a seguir.

  1. Grupo de recursos → Selecione Criar e use o nome msdocs-core-sql-tutorial.
  2. Região → qualquer região do Azure próxima a você.
  3. Nomemsdocs-laravel-mysql-XYZ, em que XYZ são três caracteres aleatórios. Esse nome deve ser exclusivo no Azure.
  4. Pilha de runtime.NET 7 (STS).
  5. Adicionar o Cache do Azure para Redis?Sim.
  6. Plano de hospedagemBásico. Quando estiver pronto, você poderá escalar verticalmente até um tipo de preço de produção posteriormente.
  7. SQLAzure é selecionado por padrão como o mecanismo de banco de dados. O Banco de Dados SQL do Azure é um mecanismo de banco de dados de PaaS (plataforma como serviço) totalmente gerenciado que está sempre em execução na última versão estável do SQL Server.
  8. Selecione Examinar + criar.
  9. Depois de concluir a validação, selecione Criar.

A screenshot showing how to configure a new app and database in the Web App + Database wizard.

Etapa 3: 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ê é levado diretamente para o aplicativo do Serviço de Aplicativo, 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 → Acessar pontos de extremidade para o servidor de banco de dados e o cache Redis na rede virtual.
  • Adaptadores de rede → Representa endereços IP privados, um para cada um dos pontos de extremidade privados.
  • Servidor do Banco de Dados SQL do Azure → Acessível somente por trás do ponto de extremidade privado.
  • Banco de Dados SQL do Azure → Um banco de dados e um usuário são criados no servidor.
  • Cache do Azure para Redis → Acessível somente por trás de seu ponto de extremidade privado.
  • Zonas DNS privado → Habilitar a resolução DNS do servidor de banco de dados e o cache Redis na rede virtual.

A screenshot showing the deployment process completed.

2. Verificar cadeias de conexão

O assistente de criação já gerou cadeias de conexão para o banco de dados SQL e o cache Redis. Nessa etapa, localize as cadeias de conexão gerada para mais tarde.

Etapa 1: na página Serviço de Aplicativo, no menu à esquerda, selecione Configuração.

A screenshot showing how to open the configuration page in App Service.

Etapa 2:

  1. Role até a parte inferior da página e localize AZURE_SQL_CONNECTIONSTRING na seção Cadeias de conexão. Essa cadeia de caracteres foi gerada do novo banco de dados SQL pelo assistente de criação. Para configurar o aplicativo, basta saber esse nome.
  2. Além disso, localize AZURE_REDIS_CONNECTIONSTRING na seção Configurações de aplicativo. Essa cadeia de caracteres foi gerada do novo cache Redis pelo assistente de criação. Para configurar o aplicativo, basta saber esse nome.
  3. Se desejar, você pode selecionar o botão Editar à direita de cada configuração e ver ou copiar seu valor. Depois, você vai alterar o aplicativo para usar AZURE_SQL_CONNECTIONSTRING e AZURE_REDIS_CONNECTIONSTRING.

A screenshot showing how to create an app setting.

3. Implantar código de exemplo

Nesta etapa, você configurará a implantação do GitHub usando o GitHub Actions. É apenas uma das muitas maneiras de implantar no Serviço de Aplicativo, mas também uma ótima maneira de ter integração contínua em seu processo de implantação. Por padrão, cada git push em seu repositório GitHub iniciará a ação de compilação e implantação.

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.
  3. Selecione Fork.
  4. Selecione Criar fork.

A screenshot showing how to create a fork of the sample GitHub repository.

Etapa 2: na página Serviço de Aplicativo, no menu esquerdo, selecione Centro de Implantação.

A screenshot showing how to open the deployment center in App Service.

Etapa 3: na página Centro de Implantação:

  1. Em Origem, selecione GitHub. Por padrão, o GitHub Actions é selecionado como o provedor de build.
  2. Entre em sua conta do GitHub e siga o prompt para autorizar o Azure.
  3. Em Organização, selecione sua conta.
  4. Em Repositório, selecione msdocs-app-service-sqldb-dotnetcore.
  5. Em Branch, selecione main.
  6. No menu superior, selecione Salvar. O Serviço de Aplicativo confirma um arquivo de fluxo de trabalho no repositório GitHub escolhido, no diretório .github/workflows.

A screenshot showing how to configure CI/CD using GitHub Actions.

Etapa 4: de volta à página do GitHub da amostra bifurcada, abra o Visual Studio Code no navegador pressionando a tecla ..

A screenshot showing how to open the Visual Studio Code browser experience in GitHub.

Etapa 5: no Visual Studio Code, no navegador:

  1. Abra DotNetCoreSqlDb/appsettings.json no explorer.
  2. Altere o nome da cadeia de conexão de MyDbConnection para AZURE_SQL_CONNECTIONSTRING, que corresponde à cadeia de conexão que já foi criada no Serviço de Aplicativo.

A screenshot showing connection string name changed in appsettings.json.

Etapa 6:

  1. Abra DotNetCoreSqlDb/Program.cs no Explorer.
  2. No método options.UseSqlServer, altere o nome da cadeia de conexão de MyDbConnection para AZURE_SQL_CONNECTIONSTRING. É aqui que a cadeia de conexão é usada pelo aplicativo de exemplo.
  3. Remova o método builder.Services.AddDistributedMemoryCache(); e o substitua pelo código a seguir. Ele altera o código do uso de um cache na memória para o cache Redis no Azure e faz isso usando AZURE_REDIS_CONNECTIONSTRING de antes.
builder.Services.AddStackExchangeRedisCache(options =>
{
options.Configuration = builder.Configuration["AZURE_REDIS_CONNECTIONSTRING"];
options.InstanceName = "SampleInstance";
});

A screenshot showing connection string name changed in Program.cs.

Etapa 7:

  1. Abra .github/workflows/main_msdocs-core-sql-XYZ no explorer. Esse arquivo foi criado pelo assistente de criação do Serviço de Aplicativo.
  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 7.0.14.
  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 -p DotNetCoreSqlDb/DotNetCoreSqlDb.csproj -o ${{env.DOTNET_ROOT}}/myapp/migrate. O pacote de migração é um executável autossuficiente que você pode executar no ambiente de produção sem precisar do SDK do .NET. O contêiner do Linux do Serviço de Aplicativo tem apenas o runtime do .NET e não o SDK do .NET.

A screenshot showing steps added to the GitHub workflow file for database migration bundle.

Etapa 8:

  1. Selecione a extensão Controle do código-fonte.
  2. Na caixa de texto, digite uma mensagem de commit, como Configure DB & Redis & add migration bundle.
  3. Selecione Fazer commit e efetuar push.

A screenshot showing the changes being committed and pushed to GitHub.

Etapa 9: de volta à página Centro de Implantação no portal do Azure:

  1. Selecione Logs. Uma nova execução de implantação já foi iniciada após as alterações confirmadas.
  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.

A screenshot showing how to open deployment logs in the deployment center.

Etapa 10: você será levado para o repositório do GitHub e verá que a ação do 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 Concluído. Isso pode demorar alguns minutos.

A screenshot showing a GitHub run in progress.

4. 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 Serviço de Aplicativo.

Etapa 1: na página Serviço de Aplicativo, no menu à esquerda, selecione SSH.

A screenshot showing how to open the SSH shell for your app from the Azure portal.

Etapa 2: no terminal 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 do GitHub com ./migrate. Se ele for bem-sucedido, o Serviço de Aplicativo se conectará com êxito ao banco de dados SQL. 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.

A screenshot showing the commands to run in the SSH shell and their output.

5. 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. Você também pode navegar diretamente até https://<app-name>.azurewebsites.net.

A screenshot showing how to launch an App Service from the Azure portal.

Etapa 2: adicione algumas tarefas à lista. Parabéns, você está executando um aplicativo ASP.NET Core seguro, controlado por dados, no Serviço de Aplicativo do Azure.

A screenshot of the .NET Core app running in App Service.

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 muito mais rápido porque está carregando os dados do cache em vez do banco de dados.

6. Logs de diagnóstico de fluxo

O Serviço de Aplicativo do Azure captura todas as mensagens registradas no console para ajudar você a diagnosticar problemas com seu aplicativo. O aplicativo de exemplo gera mensagens de log do console 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 Logs do Serviço de Aplicativo.
  2. Em Log do aplicativo, selecione Sistema de arquivos.

A screenshot showing how to enable native logs in App Service in the Azure portal.

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.

A screenshot showing how to view the log stream in the Azure portal.

7. Limpar os recursos

Quando tiver terminado, você poderá excluir todos os recursos de sua assinatura do Azure ao excluir o grupo de recursos.

Etapa 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.

A screenshot showing how to search for and navigate to a resource group in the Azure portal.

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

A screenshot showing the location of the Delete Resource Group button in the Azure portal.

Etapa 3:

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

A screenshot of the confirmation dialog for deleting a resource group in the Azure portal. :

Perguntas frequentes

Quanto custa essa configuração?

O preço dos recursos de criação é o seguinte:

  • 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 sem servidor de uso geral no hardware da série Standard com o número 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 Preços do Banco de Dados SQL do Azure.
  • O Cache do Azure para Redis é criado na camada Básico 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 Preço 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 os Preços da Rede Virtual do Azure.
  • A zona DNS privada incorre em uma pequena cobrança. Consulte os Preços do DNS do Azure.

Como se conectar ao servidor do Banco de Dados SQL do Azure que está protegido pela rede virtual com outras ferramentas?

  • Para acesso básico de uma ferramenta de linha comando, você pode executar 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 do Visual Studio, o computador precisa estar dentro da rede virtual. Por exemplo, pode ser uma VM do 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 do Azure.

Como o desenvolvimento de aplicativos local funciona com o 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. Em um clone local do repositório do GitHub, você faz as atualizações desejadas efetuarem push para o GitHub. Por exemplo:

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

Como fazer depuração de erros durante a implantação do GitHub Actions?

Se uma etapa falhar no arquivo de fluxo de trabalho do GitHub gerado automaticamente, tente modificar o comando com falha 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.

Próximas etapas

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: