Tutorial: Implantar um aplicativo ASP.NET Core e do Banco de Dados SQL do Azure no Serviço de Aplicativo do Azure
Neste tutorial, você aprenderá a implantar um aplicativo ASP.NET Core orientado por dados no Serviço de Aplicativo do Azure e conectar-se a um Banco de Dados SQL do Azure. Você também implantará um Cache Redis do Azure para habilitar o código de cache em seu aplicativo. O Serviço de Aplicativo do Azure é um serviço de hospedagem na Web altamente escalável, auto-corrigido que pode implantar facilmente aplicativos no 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, irá aprender a:
- Crie um Serviço de Aplicativo seguro, Banco de Dados SQL e arquitetura de cache Redis seguro por padrão.
- Proteja segredos de conexão usando uma identidade gerenciada e referências do Cofre de Chaves.
- Implante um exemplo de aplicativo ASP.NET Core no Serviço de Aplicativo a partir de um repositório 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.
- Gere o esquema do banco de dados carregando um pacote de migrações.
- Transmita logs de diagnóstico do Azure.
- Gerencie o aplicativo no portal do Azure.
- Provisione a mesma arquitetura e implante usando a CLI do Azure Developer.
- Otimize seu fluxo de trabalho de desenvolvimento com o GitHub Codespaces e o GitHub Copilot.
Pré-requisitos
- Uma conta do Azure com uma subscrição ativa. Se não tiver uma conta do Azure, pode criar uma gratuitamente.
- Uma conta GitHub. Você também pode obter um gratuitamente.
- Conhecimento do desenvolvimento ASP.NET Core.
- (Opcional) Para experimentar o GitHub Copilot, uma conta do GitHub Copilot. Está disponível uma versão experimental gratuita de 30 dias.
- Uma conta do Azure com uma subscrição ativa. Se não tiver uma conta do Azure, pode criar uma gratuitamente.
- CLI do Desenvolvedor do Azure instalada. Você pode seguir as etapas com o Azure Cloud Shell porque ele já tem a CLI do Desenvolvedor do Azure instalada.
- Conhecimento do desenvolvimento ASP.NET Core.
- (Opcional) Para experimentar o GitHub Copilot, uma conta do GitHub Copilot. Está disponível uma versão experimental gratuita de 30 dias.
Saltar para o fim
Você pode implantar rapidamente o aplicativo de exemplo neste tutorial e vê-lo em execução no Azure. Basta executar os seguintes comandos no Azure Cloud Shell e seguir 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 controlado por dados de exemplo como ponto de partida. Para sua conveniência, o repositório de exemplo inclui uma configuração de contêiner 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 espaço de código GitHub, o que significa que você pode executar o exemplo em qualquer computador com um navegador da Web.
Passo 1: Em uma nova janela do navegador:
- Iniciar sessão na sua conta do GitHub.
- Navegar para https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore/fork.
- Desmarque Copiar somente a ramificação principal. Você quer todos os ramos.
- Selecione Criar bifurcação.
Passo 2: Na bifurcação do GitHub:
- Selecione o starter-no-infra principal>para o ramo inicial. Esta ramificação contém apenas o projeto de exemplo e nenhum arquivo ou configuração relacionados ao Azure.
- Selecione Code>Create codespace on starter-no-infra. O codespace leva alguns minutos para ser configurado.
Passo 3: No terminal codespace:
- Execute migrações de banco de dados com
dotnet ef database update
o . - Execute o aplicativo com
dotnet run
o . - 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 parar o aplicativo, digiteCtrl
+C
.
Gorjeta
Você pode perguntar ao GitHub Copilot sobre este repositório. Por exemplo:
- @workspace O que faz este projeto?
- @workspace O que faz a pasta .devcontainer?
Tem problemas? Verifique a seção Solução de problemas.
2. Criar Serviço de Aplicativo, banco de dados e cache
Nesta etapa, você cria 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. Ele é usado como parte do nome DNS do seu aplicativo na forma de
https://<app-name>-<hash>.<region>.azurewebsites.net
. - A região para executar o aplicativo fisicamente no mundo. Ele também é usado como parte do nome DNS do seu aplicativo.
- A pilha de tempo de execução para o aplicativo. É onde você seleciona a versão .NET a ser usada para seu aplicativo.
- O plano de hospedagem para o aplicativo. É a camada de preço que inclui o conjunto de recursos e a capacidade de dimensionamento para seu aplicativo.
- O Grupo de Recursos para o aplicativo. Um grupo de recursos permite agrupar (em um contêiner lógico) todos os recursos do Azure necessários 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:
- Insira "banco de dados de aplicativo Web" na barra de pesquisa na parte superior do portal do Azure.
- Selecione o item rotulado Web App + Database sob o título Marketplace . Você também pode navegar diretamente para o assistente de criação.
Etapa 2: Na página Criar Aplicativo Web + Banco de Dados , preencha o formulário da seguinte maneira.
- Grupo de Recursos: Selecione Criar novo e use um nome de msdocs-core-sql-tutorial.
- Região: qualquer região do Azure perto de você.
- Nome: msdocs-core-sql-XYZ onde XYZ é qualquer três caracteres aleatórios. Este nome tem de ser exclusivo em todo o Azure.
- Pilha de tempo de execução: .NET 8 (LTS).
- Motor: SQLAzure. O Banco de Dados SQL do Azure é um mecanismo de banco de dados de plataforma como serviço (PaaS) totalmente gerenciado que está sempre em execução na versão estável mais recente do SQL Server.
- Adicionar Cache do Azure para Redis?: Sim.
- Plano de hospedagem: Básico. Quando estiver pronto, você poderá escalar para um nível de preço de produção.
- Selecione Rever + criar.
- Após a conclusão da validação, selecione Criar.
Etapa 3: A implantação leva alguns minutos para ser concluída. Quando 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. Um plano Linux na camada Basic é criado.
- Serviço de Aplicativo: representa seu aplicativo e é executado no plano do Serviço de Aplicativo.
- Rede virtual: integrada ao aplicativo Serviço de Aplicativo e isola o tráfego de rede back-end.
- Pontos de extremidade privados: pontos de extremidade de acesso para o cofre de chaves, o servidor de banco de dados e o cache Redis na rede virtual.
- Interfaces 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 de seu ponto de extremidade 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 apenas por trás de seu ponto de extremidade privado.
- Cofre de chaves: acessível apenas por trás de seu ponto de extremidade privado. Usado para gerenciar segredos para o aplicativo Serviço de Aplicativo.
- Zonas DNS privadas: habilite a resolução DNS do cofre de chaves, do servidor de banco de dados e do cache Redis na rede virtual.
3. Segredos de conexão seguros
O assistente de criação gerou a cadeia de conectividade para você já como cadeias de conexão .NET e configurações do aplicativo. No entanto, a prática recomendada de segurança é manter os segredos completamente fora do Serviço de Aplicativo. Você moverá seus segredos para um cofre de chaves e alterará a configuração do aplicativo para referências do Cofre de Chaves com a ajuda dos Conectores de Serviço.
Gorjeta
Para usar a autenticação sem senha, consulte Como alterar a conexão do Banco de dados SQL para usar uma identidade gerenciada?
Etapa 1: Na página Serviço de Aplicativo:
- No menu à esquerda, selecione Configurações > Variáveis de ambiente Cadeias > de conexão.
- Selecione AZURE_SQL_CONNECTIONSTRING.
- Em Adicionar/Editar cadeia de conexão, no campo Valor , localize a parte Senha= no final da cadeia de caracteres.
- Copie a cadeia de caracteres de senha após Password= para uso posterior. Essa cadeia de conexão permite que você se conecte ao banco de dados SQL protegido por trás de um ponto de extremidade privado. A senha é salva diretamente no aplicativo do Serviço de Aplicativo, o que não é o melhor. Da mesma forma, a cadeia de conexão do cache Redis na guia Configurações do aplicativo contém um segredo. Você vai mudar isso.
Passo 2: Crie um cofre de chaves para a gestão segura de segredos.
- Na barra de pesquisa superior, digite "cofre de chaves" e selecione Cofre de chaves do Marketplace>.
- Em Grupo de Recursos, selecione msdocs-core-sql-tutorial.
- Em Nome do cofre de chaves, digite um nome que consista apenas em letras e números.
- Em Região, defina-o como o local de exemplo como o grupo de recursos.
Passo 3:
- Selecione o separador Rede.
- Desmarque Ativar acesso público.
- Selecione Criar um ponto de extremidade privado.
- Em Grupo de Recursos, selecione msdocs-core-sql-tutorial.
- Em Nome do cofre de chaves, digite um nome que consista apenas em letras e números.
- Em Região, defina-o como o local de exemplo como o grupo de recursos.
- Na caixa de diálogo, em Local, selecione o mesmo local do seu aplicativo do Serviço de Aplicativo.
- Em Grupo de Recursos, selecione msdocs-core-sql-tutorial.
- Em Nome, digite msdocs-core-sql-XYZVvaultEndpoint.
- Em Rede virtual, selecione msdocs-core-sql-XYZVnet.
- Em Sub-rede, msdocs-core-sql-XYZSubnet.
- Selecione OK.
- Selecione Rever + criar e, em seguida, selecione Criar. Aguarde a conclusão da implantação do cofre de chaves. Você deve ver "Sua implantação está concluída".
Passo 4:
- Na barra de pesquisa superior, digite msdocs-core-sql e, em seguida, o recurso do Serviço de Aplicativo chamado msdocs-core-sql-XYZ.
- Na página Serviço de Aplicativo, no menu à esquerda, selecione Configurações > do Conector de Serviço. Já existem dois conectores, que o assistente de criação de aplicativos criou para você.
- Marque a caixa de seleção ao lado do conector do Banco de dados SQL e selecione Editar.
- Selecione a guia Autenticação .
- Em Senha, cole a senha copiada anteriormente.
- Selecione Armazenar segredo no Cofre da chave.
- Em Conexão do Cofre da Chave, selecione Criar novo. Uma caixa de diálogo Criar conexão é aberta na parte superior da caixa de diálogo de edição.
Etapa 5: Na caixa de diálogo Criar conexão para a conexão do Cofre da Chave:
- No Cofre de Chaves, selecione o cofre de chaves criado anteriormente.
- Selecione Rever + Criar. Você verá que a identidade gerenciada atribuída ao sistema está definida como Selecionada.
- Quando a validação for concluída, selecione Criar.
Etapa 6: Você está de volta na caixa de diálogo de edição para defaultConnector.
- Na guia Autenticação, aguarde até que o conector do cofre de chaves seja criado. Quando terminar, a lista suspensa Conexão do Cofre da Chave selecioná-la-á automaticamente.
- Selecione Next: Networking.
- Selecione Configurar regras de firewall para habilitar o acesso ao serviço de destino. O assistente de criação de aplicativos já protegia o banco de dados SQL com um ponto de extremidade privado.
- Selecione Guardar. Aguarde até que a notificação Atualização bem-sucedida seja exibida.
Etapa 7: Na página Service Connectors:
- Marque a caixa de seleção ao lado do conector Cache para Redis e selecione Editar.
- Selecione a guia Autenticação .
- Selecione Armazenar segredo no Cofre da chave.
- Em Conexão do Cofre da Chave, selecione o cofre da chave que você criou.
- Selecione Next: Networking.
- Selecione Configurar regras de firewall para habilitar o acesso ao serviço de destino. O assistente de criação de aplicativos já protegia o banco de dados SQL com um ponto de extremidade privado.
- Selecione Guardar. Aguarde até que a notificação Atualização bem-sucedida seja exibida.
Passo 8: Para verificar as alterações:
- No menu à esquerda, selecione Variáveis > de ambiente Cadeias de conexão novamente.
- 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 porque o segredo agora é gerenciado no cofre de chaves. - Para verificar a cadeia de conexão Redis, selecione a guia Configuração do aplicativo. Ao lado de AZURE_REDIS_CONNECTIONSTRING, selecione Mostrar valor. O valor também deve ser
@Microsoft.KeyVault(...)
.
4. Implantar código de exemplo
Nesta etapa, você configura a implantação do GitHub usando as Ações do GitHub. É 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
um no repositório do GitHub inicia a ação de compilação e implantação.
Etapa 1: no menu à esquerda, selecione Deployment>Deployment Center.
Etapa 2: Na página Centro de Implantação:
- Em Source, selecione GitHub. Por padrão, as Ações do GitHub são selecionadas como o provedor de compilação.
- Entre na sua conta do GitHub e siga o prompt para autorizar o Azure.
- Em Organização, selecione sua conta.
- No Repositório, selecione msdocs-app-service-sqldb-dotnetcore.
- Em Ramo, selecione starter-no-infra. Essa é a mesma ramificação em que você trabalhou com seu aplicativo de exemplo, sem nenhum arquivo ou configuração relacionada ao Azure.
- Em Tipo de autenticação, selecione Identidade atribuída pelo usuário.
- No menu superior, selecione Salvar.
O Serviço de Aplicativo confirma um arquivo de fluxo de trabalho no repositório GitHub escolhido, no
.github/workflows
diretório. Por padrão, o centro de implantação cria uma identidade atribuída pelo usuário para que o fluxo de trabalho seja autenticado usando o Microsoft Entra (autenticação OIDC). Para obter opções de autenticação alternativas, consulte Implantar no Serviço de Aplicativo usando ações do GitHub.
Passo 3: De volta ao espaço de código do GitHub da sua bifurcação de exemplo, execute git pull origin starter-no-infra
.
Isso extrai o arquivo de fluxo de trabalho recém-confirmado para seu espaço de código.
Passo 4 (Opção 1: com o GitHub Copilot):
- Inicie uma nova sessão de chat selecionando a vista Chat e, em seguida, selecionando +.
- Pergunte: "@workspace Como o aplicativo se conecta ao banco de dados e ao cache?" O Copilot pode lhe dar algumas explicações sobre a
MyDatabaseContext
classe e como ela é configurada em Program.cs. - 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 lhe dar uma sugestão de código semelhante à da Opção 2: sem as etapas do Copilot do GitHub abaixo e até mesmo dizer para você fazer a alteração no arquivo Program.cs .
- Abra Program.cs no explorador e adicione a sugestão de código. O GitHub Copilot não lhe dá a mesma resposta todas as vezes, e nem sempre é correto. Talvez seja necessário fazer mais perguntas para ajustar a resposta. Para obter dicas, consulte O que posso fazer com o GitHub Copilot no meu codespace?.
Passo 4 (Opção 2: sem o Copilot do GitHub):
- Abra Program.cs no explorador.
- 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çãoAZURE_REDIS_CONNECTIONSTRING
do aplicativo .
Passo 5 (Opção 1: com o GitHub Copilot):
- Abra .github/workflows/starter-no-infra_msdocs-core-sql-XYZ no explorador. Esse arquivo foi criado pelo assistente de criação do Serviço de Aplicativo.
- Realce o
dotnet publish
passo e selecione . - Pergunte ao Copilot, "Instale dotnet ef e, em seguida, crie um pacote de migrações na mesma pasta de saída."
- Se a sugestão for aceitável, selecione Aceitar. O GitHub Copilot não lhe dá a mesma resposta todas as vezes, e nem sempre é correto. Talvez seja necessário fazer mais perguntas para ajustar a resposta. Para obter dicas, consulte O que posso fazer com o GitHub Copilot no meu codespace?.
Passo 5 (Opção 2: sem o Copilot do GitHub):
- Abra .github/workflows/starter-no-infra_msdocs-core-sql-XYZ no explorador. Esse arquivo foi criado pelo assistente de criação do Serviço de Aplicativo.
dotnet publish
Na etapa, adicione uma etapa para instalar a ferramenta Entity Framework Core com o comandodotnet tool install -g dotnet-ef --version 8.*
.- 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 autônomo 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 tempo de execução do .NET e não o SDK do .NET.
Passo 6:
- Selecione a extensão Controle do código-fonte.
- Na caixa de texto, digite uma mensagem de confirmação como
Configure Azure database and cache connections
. Ou selecione e deixe o GitHub Copilot gerar uma mensagem de confirmação para você. - Selecione Confirmar e, em seguida, confirme com Sim.
- Selecione Sincronizar alterações 1 e, em seguida, confirme com OK.
Etapa 7: De volta à página Centro de Implantação no portal do Azure:
- Selecione a guia Logs e, em seguida, selecione Atualizar para ver a nova implantação ser executada.
- No item de log para a execução da implantação, selecione a entrada Compilar/Implantar Logs com o carimbo de data/hora mais recente.
Etapa 8: Você é levado ao repositório do GitHub e vê que a ação do GitHub está em execução. O arquivo de fluxo de trabalho define dois estágios separados, build e deploy. Aguarde até que a execução do GitHub mostre um status de Sucesso. Demora cerca de 5 minutos.
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 dotnet é em uma sessão SSH com o contêiner do Serviço de Aplicativo.
Etapa 1: De volta à página Serviço de Aplicativo, no menu à esquerda, selecione Ferramentas>de Desenvolvimento SSH e, em seguida, selecione Ir.
Passo 2: No terminal SSH:
- Execute o
cd /home/site/wwwroot
. Aqui estão todos os seus arquivos implantados. - Execute o pacote de migração que o fluxo de trabalho do GitHub gerou, com o comando
./migrationsbundle -- --environment Production
. Se for bem-sucedido, o Serviço de Aplicativo está se conectando 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, apenas as alterações nos arquivos podem /home
persistir além das reinicializações do aplicativo. As mudanças fora do /home
não são persistentes.
Tem problemas? Verifique a seção Solução de problemas.
6. Navegue até o aplicativo
Etapa 1: Na página Serviço de Aplicativo:
- No menu à esquerda, selecione Visão geral.
- Selecione o URL do seu aplicativo.
Passo 2: Adicione algumas tarefas à lista. Parabéns, você está executando um aplicativo ASP.NET Core seguro orientado por dados no Serviço de Aplicativo do Azure.
Gorjeta
O aplicativo de exemplo implementa o padrão cache-side . 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.
7. Logs de diagnóstico de fluxo
O Serviço de Aplicativo do Azure captura todas as mensagens registradas no console para ajudá-lo 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 esse recurso.
Etapa 1: Na página Serviço de Aplicativo:
- No menu à esquerda, selecione Monitoramento>de logs do Serviço de Aplicativo.
- Em Registo de aplicações, selecione Sistema de Ficheiros e, em seguida, selecione Guardar.
Passo 2: No menu à esquerda, selecione Log stream. Você vê os logs do seu aplicativo, incluindo logs da plataforma e logs de dentro do contêiner.
8. Limpar os recursos
Quando terminar, pode eliminar todos os recursos da sua subscrição do Azure eliminando o grupo de recursos.
Etapa 1: Na barra de pesquisa na parte superior do portal do Azure:
- Insira o nome do grupo de recursos.
- Selecione o grupo de recursos.
Etapa 2: na página do grupo de recursos, selecione Excluir grupo de recursos.
Passo 3:
- Introduza o nome do grupo de recursos para confirmar a sua eliminação.
- Selecione Eliminar.
2. Crie recursos do Azure e implante um aplicativo de exemplo
Nesta etapa, você cria os recursos do Azure e implanta um aplicativo de exemplo no Serviço de Aplicativo no Linux. 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 Redis.
O contêiner de desenvolvimento já tem a CLI do Desenvolvedor do Azure (AZD).
A partir da raiz do repositório, execute
azd init
.azd init --template dotnet-app-service-sqldb-infra
Quando solicitado, dê as seguintes respostas:
Pergunta Resposta O diretório atual não está vazio. Gostaria de inicializar um projeto aqui no '<seu-diretório>'? Y O que você gostaria de fazer com esses arquivos? Manter os meus ficheiros existentes inalterados Insira um novo nome de ambiente Escreva um nome exclusivo. O modelo AZD usa esse nome como parte do nome DNS do seu aplicativo Web no Azure ( <app-name>-<hash>.azurewebsites.net
). São permitidos caracteres alfanuméricos e hífenes.Entre no Azure executando o
azd auth login
comando e seguindo o prompt:azd auth login
Crie os recursos necessários do Azure e implante o código do aplicativo com o
azd up
comando. Siga o prompt para selecionar a assinatura desejada e o local para os recursos do Azure.azd up
O
azd up
comando 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á o código mais tarde para trabalhar com o Serviço de Aplicativo. Enquanto está em execução, o comando fornece mensagens sobre o processo de provisionamento e implantação, incluindo um link para a implantação no Azure. Quando terminar, o comando também exibirá um link para o aplicativo deploy.Este modelo AZD contém arquivos (azure.yaml e o diretório infra ) que geram uma arquitetura segura por padrão com os seguintes recursos do 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. Um plano Linux na camada Basic é criado.
- Serviço de Aplicativo: representa seu aplicativo e é executado no plano do Serviço de Aplicativo.
- Rede virtual: integrada ao aplicativo Serviço de Aplicativo e isola o tráfego de rede back-end.
- Pontos de extremidade privados: pontos de extremidade de acesso para o cofre de chaves, o servidor de banco de dados e o cache Redis na rede virtual.
- Interfaces 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 de seu ponto de extremidade 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 apenas por trás de seu ponto de extremidade privado.
- Cofre de chaves: acessível apenas por trás de seu ponto de extremidade privado. Usado para gerenciar segredos para o aplicativo Serviço de Aplicativo.
- Zonas DNS privadas: habilite a resolução DNS do cofre de chaves, do servidor de banco de dados e do cache Redis na rede virtual.
Quando o comando terminar de criar recursos e implantar o código do aplicativo pela primeira vez, o aplicativo de exemplo implantado ainda não funcionará porque você deve fazer pequenas alterações para que ele se conecte ao banco de dados no Azure.
Tem problemas? Verifique a seção Solução de problemas.
3. Verificar cadeias de conexão
Gorjeta
A cadeia de conexão padrão do banco de dados SQL usa autenticação SQL. Para uma autenticação mais segura e sem senha, consulte Como alterar a conexão do Banco de dados SQL para usar uma identidade gerenciada?
O modelo AZD que você usa gerou as variáveis de conectividade para você já 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ódigo.
Na saída AZD, localize as configurações
AZURE_SQL_CONNECTIONSTRING
eAZURE_REDIS_CONNECTIONSTRING
. Somente os nomes das configurações são exibidos. Eles se parecem com isso na saída 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 eAZURE_REDIS_CONNECTIONSTRING
contém a cadeia de conexão para o cache Redis do Azure. Você precisa usá-los em seu código mais tarde.Para sua conveniência, o modelo AZD mostra o link direto para a página de configurações do aplicativo. Encontre o link e abra-o em uma nova guia do navegador.
Tem problemas? Verifique a seção Solução de problemas.
4. Modifique o código de exemplo e reimplante
No espaço de código do GitHub, inicie uma nova sessão de chat selecionando a visualização Chat e, em seguida, selecionando +.
Pergunte: "@workspace Como o aplicativo se conecta ao banco de dados e ao cache?" O Copilot pode lhe dar algumas explicações sobre a
MyDatabaseContext
classe e como ela é configurada em Program.cs.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 lhe dar uma sugestão de código semelhante à da Opção 2: sem as etapas do Copilot do GitHub abaixo e até mesmo dizer para você fazer a alteração no arquivo Program.cs .
Abra Program.cs no explorador e adicione a sugestão de código.
O GitHub Copilot não lhe dá a mesma resposta todas as vezes, e nem sempre é correto. Talvez seja necessário fazer mais perguntas para ajustar a resposta. Para obter dicas, consulte O que posso fazer com o GitHub Copilot no meu codespace?.
Antes de implantar essas alterações, você ainda precisa gerar um pacote de migração.
Tem problemas? Verifique a seção 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 é em uma sessão SSH com o contêiner do Serviço de Aplicativo. No entanto, os contêineres Linux do Serviço de Aplicativo não têm o SDK do .NET, portanto, a maneira mais fácil de executar migrações de banco de dados é carregar um pacote de migrações independente.
Gere um pacote de migrações para seu projeto com o seguinte comando:
dotnet ef migrations bundle --runtime linux-x64 -o migrationsbundle
Gorjeta
O aplicativo de exemplo (consulte DotNetCoreSqlDb.csproj) está configurado para incluir esse arquivo migrationsbundle . Durante o
azd package
estágio, migrationsbundle será adicionado ao pacote de implantação.Implante todas as alterações com
azd up
o .azd up
Na saída azd, encontre o URL para a sessão SSH e navegue até ele no navegador. Tem esta aparência na saída:
Open SSH session to App Service container at: https://<app-name>-<hash>.scm.azurewebsites.net/webssh/host
No terminal SSH, execute os seguintes comandos:
cd /home/site/wwwroot ./migrationsbundle -- --environment Production
Se 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.
Na sessão SSH, apenas as alterações nos arquivos podem /home
persistir além das reinicializações do aplicativo. As mudanças fora do /home
não são persistentes.
Tem problemas? Verifique a seção Solução de problemas.
6. Navegue até o aplicativo
Na saída AZD, localize a URL do seu aplicativo e navegue até ela no navegador. O URL tem esta aparência na saída AZD:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: https://<app-name>-<hash>.azurewebsites.net/
Adicione algumas tarefas à lista.
Parabéns, você está executando um aplicativo Web no Serviço de Aplicativo do Azure, com conectividade segura ao Banco de Dados SQL do Azure.
Tem problemas? Verifique a seção Solução de problemas.
7. Logs de diagnóstico de fluxo
O Serviço de Aplicativo do Azure pode capturar logs do console para ajudá-lo a diagnosticar problemas com seu aplicativo. Por conveniência, o modelo AZD já habilitava o registro no sistema de arquivos local e está enviando os logs para um espaço de trabalho do Log Analytics.
O aplicativo de exemplo inclui instruções de log padrão para demonstrar essa capacidade, conforme mostrado no seguinte trecho:
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 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 AZD:
Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream
Saiba mais sobre como fazer logon em aplicativos .NET na série Habilitar o Azure Monitor OpenTelemetry para aplicativos .NET, Node.js, Python e Java.
Tem problemas? Verifique a seção Solução de problemas.
8. Limpar os recursos
Para excluir todos os recursos do Azure no ambiente de implantação atual, execute azd down
e siga os prompts.
azd down
Resolução de Problemas
- A vista de implementação do portal para a Base de Dados SQL do Azure mostra um estado de Conflito
- No portal do Azure, a interface do usuário do fluxo de log do aplicativo Web mostra erros de rede
- A sessão SSH no navegador mostra
SSH CONN CLOSED
- A página de fluxo de log do portal mostra,
Connected!
mas não registra
A vista de implementação do portal para a Base de Dados SQL do Azure mostra um estado de Conflito
Dependendo da sua subscrição e da região selecionada, poderá ver o estado de implementação da Base de Dados SQL do Azure como Conflict
, com a seguinte mensagem em Detalhes da operação:
Location '<region>' is not accepting creation of new Windows Azure SQL Database servers at this time.
Este erro é provavelmente causado por um limite na sua subscrição para a região que selecionou. Tente escolher uma região diferente para sua implantação.
No portal do Azure, a interface do usuário do fluxo de log do aplicativo Web mostra erros de rede
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.
Isso geralmente é 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
Leva alguns minutos para o contêiner Linux iniciar. Aguarde alguns minutos e verifique novamente.
A página de fluxo de log do portal mostra, Connected!
mas não registra
Depois de configurar os logs de diagnóstico, o aplicativo é reiniciado. Talvez seja necessário atualizar a página para que as alterações entrem em vigor no navegador.
Perguntas mais frequentes
- Quanto custa esta configuração?
- Como faço para me conectar ao servidor do Banco de Dados SQL do Azure protegido pela rede virtual com outras ferramentas?
- Como funciona o desenvolvimento de aplicativos locais com o GitHub Actions?
- Como depuro erros durante a implantação das Ações do GitHub?
- Como faço para alterar a conexão do Banco de dados SQL para usar uma identidade gerenciada?
- Não tenho permissões para criar uma identidade atribuída pelo utilizador
- O que posso fazer com o GitHub Copilot no meu codespace?
Quanto custa esta configuração?
O preço dos recursos criados é o seguinte:
- O plano do Serviço de Aplicativo é criado na camada Básica e pode ser dimensionado para cima ou para baixo. Consulte Preços 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 os núcleos mínimos. Há um custo pequeno e pode ser distribuído para outras regiões. Você pode minimizar ainda mais o custo reduzindo seu tamanho máximo ou pode escalá-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. Veja Preços da Base de Dados SQL do Azure.
- O Cache Redis do Azure é criado na camada Básica com o tamanho mínimo do cache. Há um pequeno custo associado a este nível. Você pode dimensioná-lo para níveis de desempenho mais altos para maior disponibilidade, clustering e outros recursos. Consulte 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 da Rede Virtual do Azure.
- A zona DNS privada incorre em uma pequena cobrança. Consulte Preços do DNS do Azure.
Como faço para me conectar ao servidor do Banco de Dados SQL do Azure protegido pela rede virtual com outras ferramentas?
- Para acesso básico a partir de uma ferramenta de linha de comando, você pode executar
sqlcmd
a partir do terminal SSH do aplicativo. O contêiner do aplicativo não vem comsqlcmd
, então você deve instalá-lo manualmente. Lembre-se de que o cliente instalado não persiste nas reinicializações do aplicativo. - Para se conectar a partir de um cliente do SQL Server Management Studio ou do Visual Studio, sua máquina deve estar dentro da rede virtual. Por exemplo, pode ser uma VM do Azure conectada a uma das sub-redes ou uma máquina em uma rede local que tenha uma conexão VPN site a site com a rede virtual do Azure.
Como funciona o desenvolvimento de aplicativos locais com o GitHub Actions?
Tome o arquivo de fluxo de trabalho gerado automaticamente do Serviço de Aplicativo como exemplo, cada git push
um inicia uma nova compilação e execução de implantação. A partir de um clone local do repositório GitHub, você faz com que as atualizações desejadas o enviem para o GitHub. Por exemplo:
git add .
git commit -m "<some-message>"
git push origin main
Como depuro erros durante a implantação das Ações do GitHub?
Se uma etapa falhar no arquivo de fluxo de trabalho GitHub gerado automaticamente, tente modificar o comando failed para gerar uma saída mais detalhada. Por exemplo, você pode obter mais saída de qualquer um dos dotnet
comandos adicionando a -v
opção. Confirme e envie suas alterações por push para disparar outra implantação no Serviço de Aplicativo.
Não tenho permissões para criar uma identidade atribuída pelo utilizador
Consulte Configurar a implantação de ações do GitHub a partir do Centro de Implantação.
Como faço para alterar a conexão do Banco de dados SQL para usar uma identidade gerenciada?
A cadeia de conexão padrão para o banco de dados SQL é gerenciada pelo Service Connector, com o nome defaultConnector, e usa autenticação SQL. Para substituí-lo por uma conexão que usa uma identidade gerenciada, execute os seguintes comandos no shell de nuvem 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 seu usuário como o administrador do Microsoft Entra ID do servidor de banco de dados SQL.
- Crie uma identidade gerenciada atribuída ao sistema e conceda 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: Conectar-se a bancos de dados do Azure a partir do Serviço de Aplicativo sem segredos usando uma identidade gerenciada.
Gorjeta
Não quer ativar a conexão de rede pública? Você pode pular az sql server update --enable-public-network true
executando os comandos de um shell de nuvem do Azure integrado à sua rede virtual se tiver a atribuição de 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 shell de nuvem do Azure não tem esse acesso ao banco de dados protegido pela rede.
O que posso fazer com o GitHub Copilot no meu codespace?
Você deve ter notado que a visualização de bate-papo do GitHub Copilot já estava lá para você quando você criou o espaço de código. Para sua conveniência, incluímos a extensão de chat do GitHub Copilot na definição de contêiner (consulte .devcontainer/devcontainer.json). No entanto, você precisa de uma conta GitHub Copilot (teste gratuito de 30 dias disponível).
Algumas dicas para você quando falar com o GitHub Copilot:
- Em uma única sessão de bate-papo, as perguntas e respostas se baseiam umas nas outras e você pode ajustar suas perguntas para ajustar a resposta obtida.
- Por padrão, 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 o GitHub Copilot tenha acesso a todos os arquivos no repositório ao preparar suas respostas, comece sua pergunta com
@workspace
. Para obter mais informações, veja Use the @workspace agent. - Na sessão de chat, o GitHub Copilot pode sugerir alterações e (com
@workspace
) até mesmo onde fazer as alterações, mas não é permitido fazer as alterações para você. Cabe a você adicionar as alterações sugeridas e testá-las.
Aqui estão algumas outras coisas que você pode dizer para ajustar a resposta que obtém:
- Quero que este código seja executado apenas no modo de produção.
- Quero que esse código seja executado somente no Serviço de Aplicativo do Azure e não localmente.
- O parâmetro --output-path parece não ser suportado.
Conteúdos relacionados
Avance para o próximo tutorial para saber como proteger seu aplicativo com um domínio e certificado personalizados.
Ou confira outros recursos: