Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Neste tutorial, aprende como implementar uma aplicação ASP.NET Core orientada por dados para o Serviço de Aplicações do Azure e ligá-la a uma Base de Dados SQL do Azure. Também vais implementar um Cache do Azure para Redis para ativar o código de cache na tua aplicação. O Serviço de Aplicações do Azure é um serviço de alojamento web altamente escalável, auto-patchável, que pode facilmente implementar aplicações no Windows ou Linux. Embora este tutorial utilize uma aplicação 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.
- Proteger os segredos da ligação usando uma identidade gerida e referências ao Key Vault.
- Implemente um exemplo de aplicação ASP.NET Core para um Serviço de Aplicações 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.
- Transmitir registos de diagnóstico a partir do Azure.
- Gerir a aplicação no portal do Azure.
- Provisione a mesma arquitetura e implemente usando a CLI do Azure Developer.
- Otimize o seu fluxo de trabalho de desenvolvimento com GitHub Codespaces e GitHub Copilot.
Pré-requisitos
- Uma conta no Azure com uma subscrição ativa. Se não tiveres uma conta Azure, podes criar uma gratuitamente.
- Uma conta no GitHub. Você também pode obter um gratuitamente.
- Conhecimento do desenvolvimento ASP.NET Core.
- (Opcional) Para tentar GitHub Copilot, uma conta GitHub Copilot. Está disponível uma versão experimental gratuita de 30 dias.
- Uma conta no Azure com uma subscrição ativa. Se não tiveres uma conta Azure, podes criar uma gratuitamente.
- Azure Developer CLI instalado. Podes seguir os passos com o Azure Cloud Shell porque já tem Azure CLI de Desenvolvedor instalado.
- Conhecimento do desenvolvimento ASP.NET Core.
- (Opcional) Para tentar GitHub Copilot, uma conta GitHub Copilot. Está disponível uma versão experimental gratuita de 30 dias.
Saltar para o fim
Se quiser apenas ver a aplicação de exemplo neste tutorial a correr em 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 contentor 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 contentor de desenvolvimento pode correr num espaço de código GitHub, o que significa que podes executar o exemplo em qualquer computador com um navegador web.
Passo 1: Em uma nova janela do navegador:
- Inicia sessão na tua conta no GitHub.
- Navegue até 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: No fork GitHub:
- Selecione principal>starter-no-infra para o ramo inicial. Esta ramificação contém apenas o projeto de exemplo e nenhum ficheiro ou configuração relacionada com o Azure.
- Selecione Código>>Criar codespace em starter-no-infra. O codespace leva alguns minutos para ser configurado.
Passo 3: No terminal do codespace:
- Execute as migrações de banco de dados com
dotnet ef database update. - Executa a aplicação com
dotnet run. - 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
Pode perguntar a 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
Neste passo, cria os recursos do Azure. Os passos usados neste tutorial criam um conjunto de recursos seguros por defeito que incluem App Service, Base de Dados SQL do Azure e Azure Cache. Para o processo de criação, você especificará:
- O Nome do aplicativo Web. Ele é usado como parte do nome DNS do seu aplicativo.
- A região onde o aplicativo será executado fisicamente no mundo. Ele também é usado como parte do nome DNS do seu aplicativo.
- A Runtime stack para a aplicação. É quando selecionas a versão .NET para usar na tua aplicação.
- 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-lhe agrupar (num contentor lógico) todos os recursos do Azure necessários para a aplicação.
Inicie sessão no portal Azure e siga estes passos para criar os seus recursos Serviço de Aplicações do Azure.
Passo 1: No portal do Azure:
- Na barra de pesquisa superior, digite serviço de aplicativo.
- Selecione o item rotulado Serviço de Aplicativo sob o título Serviços.
- Selecione Criar>Aplicação Web. Também podes navegar diretamente para o assistente de criação.
Etapa 2: Na página Criar aplicativo Web, preencha o formulário da seguinte maneira.
- Nome: msdocs-core-sql-XYZ. Um grupo de recursos chamado msdocs-core-sql-XYZ_group será gerado para você.
- Runtime stack: .NET 8 (LTS).
- Sistema Operacional: Linux.
- Região: a sua região preferida.
- Plano Linux: Crie um novo e use o nome msdocs-core-sql-XYZ.
- Plano de preços: Basic B1. Quando estiver pronto, você poderá escalar para um nível de preço diferente.
Passo 3:
- Selecione a guia Banco de dados .
- Selecione Criar um banco de dados.
- Em Mecanismo, selecione SQLAzure.
- Selecione Criar Cache do Azure para Redis.
- Em Nome (em Cache), insira um nome para o cache.
- Em SKU, selecione Básico.
Passo 4:
- Selecione o separador Implantação.
- Habilite a implantação contínua.
- Em Organization, selecione o seu GitHub alias.
- No Repositório, selecione msdocs-app-service-sqldb-dotnetcore.
- Em Branch, selecione starter-no-infra.
- Certifique-se de que a autenticação básica está desativada.
- Selecionar Rever e Criar.
- Após a conclusão da validação, selecione Criar.
5º Passo: 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 a aplicação 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. Um plano Linux na Camada Básica foi criado.
- Serviço de Aplicativo: representa seu aplicativo e é executado no plano do Serviço de Aplicativo.
- Rede virtual: integrada na aplicação App Service e isola o tráfego de rede de 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 Base de Dados SQL do Azure: Acessível apenas através do seu endpoint privado.
- Base de Dados SQL do Azure: Uma base de dados e um utilizador são criados para si no servidor.
- Cache do Azure para Redis: Acessível apenas por trás do seu endpoint privado.
- Cofre de chaves: acessível apenas por trás de seu ponto de extremidade privado. Usado para gerir segredos para a aplicação App Service.
- DNS Privado zones: Ativar a resolução DNS do cofre de chaves, do servidor de base de dados e da cache Redis na rede virtual.
3. Segredos de conexão seguros
O assistente de criação já gerou a variável de conectividade para si como cadeias de ligação .NET e definições da aplicação. No entanto, a prática recomendada de segurança é manter os segredos completamente fora do Serviço de Aplicativo. Vai mover os seus segredos para um Key Vault e alterar a configuração da aplicação para referências de Key Vault com a ajuda dos Service Connectors.
Gorjeta
Para usar a autenticação sem senha, consulte Como alterar a conexão do Banco de dados SQL para usar uma identidade gerenciada?
Passo 1: Recuperar a string de conexão existente
- No menu esquerdo da página Serviço de Aplicativo, selecione Configurações > Variáveis de ambiente Cadeias > de conexão.
- Selecione AZURE_SQL_CONNECTIONSTRING.
- Em Add/Edit cadeia de ligação, no campo Value, encontre a parte Password= no final da cadeia.
- Copie a cadeia de caracteres de senha após Password= para uso posterior.
Esta cadeia de ligação permite-lhe ligar à base de dados SQL protegida atrás de um endpoint privado. No entanto, os segredos são salvos diretamente na aplicação do App Service, o que não é a melhor prática. Da mesma forma, a cache Redis cadeia de ligação no separador
aplicação contém um segredo. Você vai mudar isso.
Etapa 2: Criar um cofre de chaves para gerenciamento seguro de segredos
- Na barra de pesquisa superior, escreva "key vault" e depois selecione Marketplace>Key Vault.
- Em Grupo de Recursos, selecione msdocs-core-sql-XYZ_group.
- Em Nome do cofre de chaves, digite um nome que consista apenas em letras e números.
- Em Região, defina-o para o mesmo local que o grupo de recursos.
Etapa 3: Proteger o cofre de chaves com um Endpoint Privado
- Selecione a aba Rede.
- Desmarque Ativar acesso público.
- Selecione Criar um ponto de extremidade privado.
- Em Grupo de recursos, selecione msdocs-core-sql-XYZ_group.
- Na caixa de diálogo, em Localização, selecione a mesma localização do seu Serviço de Aplicações.
- Em Nome, digite msdocs-core-sql-XYZVvaultEndpoint.
- Em Rede virtual, selecione a rede virtual no grupo msdocs-core-sql-XYZ_group .
- Em Sub-rede, selecione a sub-rede compatível disponível. O assistente de Aplicativo Web o criou para sua conveniência.
- 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 o separador Autenticação.
- Em Senha, cole a senha copiada anteriormente.
- Selecione Guardar Segredo em Key Vault.
- 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.
Passo 5: Estabelecer a ligação Key Vault
- No diálogo Criar ligação para a ligação Key Vault, em Key Vault, selecione a key vault que criou anteriormente.
- Selecione Rever + Criar.
- Quando a validação for concluída, selecione Criar.
Etapa 6: Finalizar as configurações do conector do Banco de dados SQL
- Você está de volta na caixa de diálogo de edição para defaultConnector. No separador Autenticação, aguarde que o conector do cofre de chaves seja criado. Quando termina, o menu suspenso Key Vault Connection seleciona-o 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.
Passo 7: Configure o conector Redis para usar Key Vault secrets
- Na página Service Connector, marque a caixa de seleção ao lado do conector Cache para Redis e selecione Editar.
- Selecione o separador Autenticação.
- Selecione Guardar Segredo em Key Vault.
- Em Key Vault Connection, selecione o key vault que criou.
- Selecione Next: Networking.
- Selecione Configurar regras de firewall para habilitar o acesso ao serviço de destino.
- Selecione Guardar. Aguarde até que a notificação Atualização bem-sucedida seja exibida.
Passo 8: Verificar a integração Key Vault
- No menu à esquerda, selecione Definições > 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 ao key vault porque o segredo é atualmente mantido no key vault. - Para verificar a cadeia de conexão Redis, selecione o separador Definições da aplicação. Ao lado de AZURE_REDIS_CONNECTIONSTRING, selecione Mostrar valor. O valor também deve ser
@Microsoft.KeyVault(...).
Para resumir, o processo para proteger seus segredos de conexão envolveu:
- Recuperando os segredos de conexão das variáveis de ambiente da aplicação do Serviço de Aplicações.
- Criação de um cofre de chaves.
- Criação de uma ligação ao Key Vault com a identidade gerida pelo sistema.
- Atualizar os conectores de serviço para armazenar os segredos no cofre de chaves.
4. Implantar código de exemplo
Neste passo, configura a implementação do GitHub usando o GitHub Actions. É apenas uma das muitas maneiras de fazer a implementação no App Service, mas também uma excelente forma de assegurar integração contínua no seu processo de implantação. Por defeito, cada git push ao teu repositório de GitHub inicia a ação de build e deploy.
Passo 1: De volta ao espaço de código GitHub do seu fork 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 2 (Opção 1: com GitHub Copilot):
- Inicie uma nova sessão de chat selecionando a vista Chat e, em seguida, selecionando +.
- Pergunta, "@workspace Como é que a aplicação se liga à base de dados e à cache?" Copilot pode dar-te alguma explicação sobre a classe
MyDatabaseContexte como está configurada em Program.cs. - Pergunte: "Em modo de produção, quero que a aplicação use a cadeia de conexão chamada AZURE_SQL_CONNECTIONSTRING para a base de dados e a configuração da aplicação chamada AZURE_REDIS_CONNECTIONSTRING." O Copilot pode dar-lhe uma sugestão de código semelhante à apresentada nos passos da Opção 2: sem GitHub Copilot, que se seguem, e até pode indicar-lhe para fazer a alteração no ficheiro Program.cs.
- Abra Program.cs no explorador e adicione a sugestão de código. O GitHub Copilot não te dá sempre a mesma resposta, e nem sempre está correta. Talvez seja necessário fazer mais perguntas para ajustar a resposta. Para dicas, veja O que posso fazer com GitHub Copilot no meu espaço de código?.
Passo 2 (Opção 2: sem GitHub Copilot):
- Abra o ficheiro 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_CONNECTIONSTRINGe se conecta ao cache Redis usando a configuraçãoAZURE_REDIS_CONNECTIONSTRINGdo aplicativo .
Passo 3 (Opção 1: com GitHub Copilot):
- Abra .github/workflows/starter-no-infra_msdocs-core-sql-XYZ no explorador. O assistente de criação do App Service criou este ficheiro.
- Realce o
dotnet publishpasso e selecione
. - Perguntar ao Copilot, "Install dotnet ef, depois cria 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 te dá sempre a mesma resposta, e nem sempre está correta. Talvez seja necessário fazer mais perguntas para ajustar a resposta. Para dicas, veja O que posso fazer com GitHub Copilot no meu espaço de código?.
Passo 3 (Opção 2: sem GitHub Copilot):
- Abra .github/workflows/starter-no-infra_msdocs-core-sql-XYZ no explorador. O assistente de criação do serviço de aplicações criou este ficheiro
- No passo
dotnet publish, adicione um passo 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 pode correr no ambiente de produção sem precisar do SDK .NET. O contentor do App Service Linux só tem o runtime .NET e não o SDK .NET.
Passo 4:
- Selecione a extensão Controlo de Código-Fonte.
- Na caixa de texto, escreve uma mensagem de commit como
Configure Azure database and cache connections. Ou, selecione
e deixe que GitHub Copilot gere uma mensagem de commit para si. - Selecione Confirmar e, em seguida, confirme com Sim.
- Selecione Sincronizar alterações 1 e, em seguida, confirme com OK.
Passo 5: Voltar à página do Centro de Implementação no portal Azure:
- Selecione o separador Registos e, em seguida, selecione Atualizar para ver a execução da nova implementação.
- No item de registo para a execução do desdobramento, selecione a entrada Registos de Compilação/Desdobramento com a marca temporal mais recente.
Passo 6: És levado ao teu repositório de GitHub e vês que a ação GitHub está a correr. O arquivo de fluxo de trabalho define dois estágios separados, build e deploy. Espere que a execução no GitHub mostre um status de Sucesso. Demora cerca de 5 minutos.
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 dotnet é em uma sessão SSH com o contêiner Linux no Serviço de Aplicativo.
Etapa 1: De volta à página do Serviço de Aplicativo, no menu à esquerda,
- Selecione Ferramentas>de desenvolvimento SSH.
- Selecione Avançar. (O arranque demora alguns minutos.)
Passo 2: Na sessão SSH:
- Executar
cd /home/site/wwwroot. Aqui estão todos os seus arquivos descarregados. - Executa o pacote de migração que o fluxo de trabalho da 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 Productioncorresponde às alterações de código feitas no Program.cs.
Na sessão SSH, apenas as alterações nos arquivos em /home podem 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, está a executar uma aplicação web no Serviço de Aplicações do Azure, com ligação segura ao Base de Dados SQL do Azure.
Gorjeta
O aplicativo de exemplo implementa o padrão cache-aside. Quando visitas uma vista de dados pela segunda vez, ou recarregas a mesma página depois de fazeres alterações nos dados, o tempo de processamento na página web mostra um tempo mais rápido porque está a carregar os dados do cache em vez da base de dados.
7. Logs de diagnóstico de fluxo de dados
O Serviço de Aplicações do Azure captura todos os logs da consola para o ajudar a diagnosticar problemas na sua aplicação. O aplicativo de exemplo inclui código de registo em cada um dos seus endpoints para demonstrar essa capacidade.
Etapa 1: Na página Serviço de Aplicativo:
- No menu à esquerda, selecione Monitorização>Registos do Serviço de Aplicações.
- Em Registo de aplicações, selecione Sistema de ficheiros.
- No menu superior, selecione Salvar.
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 terminares, podes eliminar todos os recursos da tua subscrição do Azure eliminando o grupo de recursos.
Passo 1: Na barra de pesquisa no topo do portal 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. Criar recursos Azure e implementar uma aplicação de exemplo
Neste passo, cria os recursos do Azure e implementa uma aplicação de exemplo para o Serviço de Aplicações no Linux. Os passos usados neste tutorial criam um conjunto de recursos seguros por defeito que incluem App Service, Base de Dados SQL do Azure e Cache do Azure para Redis.
O contentor de desenvolvimento já tem o Azure Developer CLI (AZD).
A partir da raiz do repositório, execute
azd init.azd init --template dotnet-app-service-sqldb-infraQuando 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 este nome como parte do nome DNS da sua aplicação web em Azure ( <app-name>-<hash>.azurewebsites.net). São permitidos caracteres alfanuméricos e hífenes.Inicie sessão no Azure executando o comando
azd auth logine seguindo as instruções do prompt:azd auth loginCrie os recursos de Azure necessários e implemente o código da aplicação com o comando
azd up. Siga o prompt para selecionar a subscrição e a localização desejadas para os recursos do Azure.azd upO
azd upcomando 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á a correr, o comando fornece mensagens sobre o processo de provisionamento e implementação, incluindo um link para a implementação no Azure. Quando terminar, o comando também exibirá um link para a aplicação de implementação.Este modelo AZD contém ficheiros (azure.yaml e o diretório infra) que geram uma arquitetura segura por defeito com os seguintes recursos 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 Básica foi criado.
- Serviço de Aplicativo: representa seu aplicativo e é executado no plano do Serviço de Aplicativo.
- Rede virtual: integrada na aplicação App Service e isola o tráfego de rede de 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.
- Base de Dados SQL do Azure servidor: Acessível apenas por trás do seu endpoint privado.
- Base de Dados SQL do Azure: Uma base de dados e um utilizador são criados para si no servidor.
- Cache do Azure para Redis: Acessível apenas por trás do seu endpoint privado.
- Cofre de chaves: acessível apenas por trás de seu ponto de extremidade privado. Usado para gerir segredos para a aplicação App Service.
- DNS Privado zones: Ativar a resolução DNS do cofre de chaves, do servidor de base de dados e da cache Redis na rede virtual.
Quando o comando termina de criar recursos e implementar o código da aplicação pela primeira vez, a aplicação de exemplo implementada ainda não funciona porque tens de fazer pequenas alterações para a ligar à base de dados no Azure.
Tem problemas? Verifique a seção Solução de problemas.
3. Verificar cadeias de conexão
Gorjeta
A cadeia de ligação padrão da base de dados SQL utiliza 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_CONNECTIONSTRINGeAZURE_REDIS_CONNECTIONSTRING. Somente os nomes das configurações são exibidos. Assim se apresentam na saída AZD:App Service app has the following connection strings: - AZURE_SQL_CONNECTIONSTRING - AZURE_REDIS_CONNECTIONSTRING - AZURE_KEYVAULT_RESOURCEENDPOINT - AZURE_KEYVAULT_SCOPEAZURE_SQL_CONNECTIONSTRINGcontém o cadeia de ligação para a base de dados SQL em Azure, eAZURE_REDIS_CONNECTIONSTRINGcontém o cadeia de ligação para a cache Azure Redis. 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 GitHub, inicie uma nova sessão de chat selecionando a vista Chat e depois selecionando +.
Pergunta, "@workspace Como é que a aplicação se liga à base de dados e à cache?" Copilot pode dar-te alguma explicação sobre a classe
MyDatabaseContexte como está configurada em Program.cs.Pergunte: "No modo de produção, quero que a aplicação use a cadeia de conexões chamada AZURE_SQL_CONNECTIONSTRING para a base de dados e a configuração da aplicação chamada AZURE_REDIS_CONNECTIONSTRING*." Copilot pode dar-lhe uma sugestão de código semelhante à do Opção 2: sem GitHub Copilot, nos passos que se seguem, e pode até lhe dizer para fazer a alteração no ficheiro Program.cs.
Abra Program.cs no explorador e adicione a sugestão de código.
O GitHub Copilot não te dá sempre a mesma resposta, e nem sempre está correta. Talvez seja necessário fazer mais perguntas para ajustar a resposta. Para dicas, veja O que posso fazer com GitHub Copilot no meu espaço de código?.
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 contentores do App Service Linux não têm o SDK .NET, por isso a forma mais fácil de executar migrações de bases de dados é carregar um pacote de migrações autónomo.
Gere um pacote de migrações para seu projeto com o seguinte comando:
dotnet ef migrations bundle --runtime linux-x64 -o migrationsbundleGorjeta
A aplicação de exemplo (ver DotNetCoreSqlDb.csproj) está configurada para incluir este ficheiro migrationsbundle. Durante a fase
azd package, o migrationsbundle será adicionado ao pacote de implantação.Implante todas as alterações com
azd up.azd upNa saída AZD, localize o URL da sessão SSH e navegue até ele no navegador. Tem esta aparência na saída:
Open SSH session to App Service container at: <URL>
Na sessão SSH, execute os seguintes comandos:
cd /home/site/wwwroot ./migrationsbundle -- --environment ProductionSe for bem-sucedido, o Serviço de Aplicativo está se conectando com êxito ao banco de dados. Lembre-se de que
--environment Productioncorresponde às alterações de código feitas no Program.cs.Observação
Somente as alterações nos
/homearquivos podem persistir além das reinicializações do aplicativo. As mudanças fora do/homenã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: <URL>
Adicione algumas tarefas à lista.
Parabéns, está a executar uma aplicação web no Serviço de Aplicações do Azure, com ligação segura ao Base de Dados SQL do Azure.
Tem problemas? Verifique a seção Solução de problemas.
7. Logs de diagnóstico de fluxo de dados
O Serviço de Aplicações do Azure pode capturar logs da consola para o ajudar a diagnosticar problemas com a sua aplicação. Para conveniência, o modelo AZD já ativou o registo no sistema de ficheiros local e está a enviar os registos para um espaço de trabalho 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 visualizar os logs do Azure App Service e navegue até ele no navegador. O link tem esta aparência na saída AZD:
Stream App Service logs at: <URL>
Saiba mais sobre registos em aplicações .NET na série Ative Azure Monitor OpenTelemetry para aplicações .NET, Node.js, Python e Java.
Tem problemas? Verifique a seção Solução de problemas.
8. Limpar os recursos
Para eliminar todos os recursos Azure no ambiente de implementação atual, execute azd down e siga as indicações.
azd down
Resolução de Problemas
- A vista de implementação do portal para Base de Dados SQL do Azure mostra um estado de Conflito
- No portal Azure, a interface do fluxo de registo da aplicação 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 exibe logs
A visualização de implementação do portal do Base de Dados SQL do Azure mostra um status de Conflito
Dependendo da sua subscrição e da região selecionada, pode ver o estado de implementação da Base de Dados SQL do Azure como sendo 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.
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 Azure, a interface do fluxo de registo da aplicação 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 há registos.
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 é que me ligo ao servidor Base de Dados SQL do Azure que está protegido atrás da rede virtual com outras ferramentas?
- Como funciona o desenvolvimento de aplicações locais com GitHub Actions?
- Como posso depurar erros durante a implementação GitHub Actions?
- 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 GitHub Copilot no meu espaço de código?
Quanto custa esta configuração?
O preço dos recursos criados é o seguinte:
- O plano do Serviço de Aplicativos é criado na camada Básica e pode ser aumentado ou reduzido. Consulte Preços do Serviço de Aplicativo.
- A Base de Dados SQL do Azure é criada em nível de uso geral, serverless, em hardware da série Standard com 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 do Base de Dados SQL do Azure.
- A Cache do Azure para Redis é criada no nível Basic com o tamanho mínimo da 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. Veja os preços do Cache do Azure para Redis.
- A rede virtual não incorre em custos, exceto se configurar funcionalidades adicionais, como interligação. Veja, preços da Rede Virtual do Azure.
- A zona DNS privada incorre em uma pequena cobrança. Veja os preços do DNS do Azure.
Como é que me ligo ao servidor Base de Dados SQL do Azure que está protegido atrás da rede virtual com outras ferramentas?
- Para acesso básico a partir de uma ferramenta de linha de comando, você pode executar
sqlcmda 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 ligar a partir de um cliente SQL Server Management Studio ou do Visual Studio, a sua máquina deve estar dentro da rede virtual. Por exemplo, pode ser uma VM Azure ligada a uma das sub-redes, ou uma máquina numa rede local que tem uma ligação VPN site-to-site com a rede virtual Azure.
Como funciona o desenvolvimento de aplicações locais com o GitHub Actions?
Pegue o arquivo de fluxo de trabalho gerado automaticamente do App Service como exemplo, cada git push inicia uma nova compilação e execução de implantação. A partir de um clone local do repositório GitHub, fazes as atualizações desejadas e envias para o GitHub. Por exemplo:
git add .
git commit -m "<some-message>"
git push origin main
Como posso depurar erros durante a implementação do GitHub Actions?
Se um passo falhar no ficheiro de workflow do GitHub gerado automaticamente, tente modificar o comando falhado 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 as suas alterações por push para disparar outra implantação no serviço de aplicações.
Não tenho permissões para criar uma identidade atribuída pelo utilizador
Consulte Configurar GitHub Actions implantação 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?
O Service Connector gere o cadeia de ligação predefinido da base de dados SQL, com o nome defaultConnector, e utiliza autenticação SQL. Para substituí-lo por uma conexão que utiliza uma identidade gerida, execute os seguintes comandos no shell de nuvem após substituir os marcadores de posição:
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 seu utilizador como administrador do Microsoft Entra ID do servidor de base de dados SQL.
- Crie uma identidade gerenciada atribuída ao sistema e conceda acesso ao banco de dados.
- Gera um cadeia de ligação sem palavra-passe chamado
AZURE_SQL_CONNECTIONGSTRING, que a tua aplicação já está a usar no final do tutorial.
Seu aplicativo agora deve ter conectividade com o banco de dados SQL. Para mais informações, consulte Tutorial: Conectar-se a bases de dados Azure do App Service sem segredos usando uma identidade gerida.
Gorjeta
Não quer ativar a conexão de rede pública? Pode ignorar az sql server update --enable-public-network true executando os comandos a partir de um Azure Cloud Shell integrado com a sua rede virtual se tiver a atribuição de função Owner na sua subscrição.
Para conceder à identidade o acesso necessário à base de dados que é protegida pela rede virtual, az webapp connection create sql precisa de conectividade direta com autenticação Entra ID ao servidor da base de dados. Por defeito, a cloud shell do Azure não tem este acesso à base de dados segura em rede.
O que posso fazer com o GitHub Copilot no meu espaço de código?
Talvez tenhas reparado que a vista de chat do GitHub Copilot já estava lá para ti quando criaste o codespace. Para sua conveniência, incluímos a extensão de chat GitHub Copilot na definição do contentor (ver .devcontainer/devcontainer.json). No entanto, precisa de uma conta GitHub Copilot (período experimental gratuito de 30 dias disponível).
Algumas dicas para si 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 defeito, o GitHub Copilot não tem acesso a nenhum ficheiro no teu repositório. Para fazer perguntas sobre um arquivo, abra o arquivo no editor primeiro.
- Para GitHub Copilot ter acesso a todos os ficheiros do repositório ao preparar as respostas, comece a sua pergunta com
@workspace. Para obter mais informações, veja Use the @workspace agent. - Na sessão de chat, GitHub Copilot pode sugerir alterações e até indicar onde fazer as alterações (com
@workspace), mas não é permitido realizar as alterações por si mesmo. 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 este código corra apenas no Serviço de Aplicações 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: