Partilhar via


Tutorial: Implantar um aplicativo ASP.NET Core e um banco de dados em aplicativos de contêiner do Azure usando ações do GitHub

Neste tutorial, você aprenderá a implantar um aplicativo ASP.NET Core e o Banco de Dados SQL em Aplicativos de Contêiner do Azure usando o Visual Studio e as Ações do GitHub. Você também aprenderá como gerenciar migrações do Entity Framework e atualizações de banco de dados no GitHub Actions, embora os conceitos também possam ser aplicados a outras ferramentas e ambientes de CI/CD.

Pré-requisitos

Você precisa ter o Visual Studio 2022 instalado com as cargas de trabalho de desenvolvimento ASP.NET e web e de desenvolvimento do Azure.

Se você já instalou o Visual Studio:

  • Instale as atualizações mais recentes no Visual Studio selecionando Ajuda>Verificar se há atualizações.
  • Verifique se o de desenvolvimento ASP.NET e Web e as cargas de trabalho de de desenvolvimento do Azure estão instaladas selecionando Ferramentas >Obter Ferramentas e Recursos.

Advertência

Este artigo faz uso de cadeias de conexão. Tenha cuidado ao gerenciar conexões usando nomes de usuário, senhas ou chaves de acesso. Esses segredos não devem ser comprometidos com o controle do código-fonte ou colocados em locais não seguros onde possam ser acessados por usuários não intencionais. Durante o desenvolvimento local, você geralmente se conectará a um banco de dados local que não requer o armazenamento de segredos ou a conexão direta com o Azure. Durante a produção, se conectar ao seu banco de dados SQL do Azure usando uma abordagem secreta como de ID do Microsoft Entra quando possível.

Configurar o aplicativo de exemplo localmente

Use o aplicativo de exemplo TODO para acompanhar este tutorial. Clone o aplicativo do GitHub usando o seguinte comando:

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

Navegue até a pasta do projeto e abra a solução DotNetCoreSqlDb.sln no Visual Studio.

O aplicativo TODO está pronto para uso, mas você precisará estabelecer uma conexão com o localdb SQL Server que está disponível no Visual Studio. Conectar-se ao localdb permitirá que você execute o aplicativo e persista enquanto trabalha localmente.

  1. Clique com o botão direito do mouse no nó Serviços Conectados no Gerenciador de Soluções do Visual Studio e selecione Adicionar > Banco de Dados do SQL Server.
  2. Na caixa de diálogo Conectar à dependência , selecione SQL Server Express LocalDB (Local) e depois selecione Avançar .
  3. Na caixa de diálogo Conectar ao SQL Server Express LocalDB (Local), defina os seguintes valores:
    • Nome da cadeia de conexão: Deixe o valor padrão.
    • Valor da cadeia de conexão: Deixe o valor padrão.
    • Salvar valor da cadeia de conexão em: Selecione Nenhum.
    • Selecione Próximo
  4. Na tela Resumo das alterações, deixe as configurações em seus valores padrão e selecione Concluir para concluir o fluxo de trabalho.

O Visual Studio exibe um resumo das dependências de serviço, incluindo a conexão com LocalDB.

Uma captura de tela mostrando como adicionar uma migração usando o Visual Studio.

Em seguida, você precisará criar uma migração inicial e usá-la para atualizar o banco de dados local com o esquema correto para o aplicativo TODO.

  1. Selecione o ícone ... à direita da lista de dependências de serviço ao lado da conexão LocalDB e escolha Adicionar migração.
  2. Na caixa de diálogo Migrações do Entity Framework, aguarde um momento para que o Visual Studio localize a classe DbContext incluída no projeto. Depois que os valores forem carregados, selecione Concluir.
  3. O Visual Studio gera uma pasta Migrations no projeto e cria uma classe inicial de migrações. Essa classe pode ser usada para atualizar o banco de dados com o esquema correto.
  4. Selecione o ícone ... ao lado do serviço LocalDB novamente e selecione Atualizar banco de dados.
  5. Na caixa de diálogo Migrações do Entity Framework, aguarde um momento para que o Visual Studio localize a classe DbContext novamente e, em seguida, selecione Concluir. O Visual Studio executa a migração e cria o esquema para o banco de dados no servidor LocalDB.

Inicie o projeto selecionando o botão Executar DotNetCoreSqlDb na parte superior do Visual Studio.

Quando a aplicação carregar, verifique se o banco de dados está a funcionar corretamente inserindo um novo TODO. O TODO aparece na exibição de lista principal na página inicial do aplicativo.

Explore a configuração de inicialização do aplicativo

O aplicativo de exemplo inclui o seguinte código no arquivo Program.cs:

if(builder.Environment.IsDevelopment())
{
    builder.Services.AddDbContext<MyDatabaseContext>(options =>
        options.UseSqlServer(builder.Configuration.GetConnectionString("Default")));
}
else
{
    builder.Services.AddDbContext<MyDatabaseContext>(options =>
        options.UseSqlServer(Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")));
}

Este código aplica as seguintes configurações:

  • Quando o aplicativo é executado localmente, a cadeia de conexão localdb é extraída do arquivo appsettings.json e fornecida ao Entity Framework. Essa configuração permite que a cadeia de conexão localdb seja verificada no controle do código-fonte para que outros desenvolvedores possam se conectar facilmente a um banco de dados local durante o desenvolvimento. Ele também permite que as migrações do Entity Framework sejam executadas localmente. Por padrão, o Entity Framework não descobrirá cadeias de conexão armazenadas na variável de ambiente ao executar migrações.
  • Quando o aplicativo é executado em fluxos de trabalho de Ações do GitHub ou em Produção, a cadeia de conexão é extraída de variáveis de ambiente. As variáveis de ambiente podem impedir que cadeias de conexão seguras de produção sejam verificadas no controle do código-fonte ou incluídas em arquivos de configuração.

Criar os serviços do Azure

O aplicativo exigirá que os seguintes serviços do Azure sejam criados para uma implantação bem-sucedida:

  • Container App: necessário para hospedar e executar o aplicativo implantado.
  • Container Registry: Armazena o artefato de imagem criado do aplicativo em contêiner.
  • Banco de Dados SQL: Um Azure SQL Database para armazenar os dados do aplicativo.

Os recursos de publicação do Visual Studio podem lidar com a criação desses recursos para você.

Criar o Aplicativo de Contêiner do Azure e o Registro de Contêiner do Azure

  1. No Gerenciador de Soluções do Visual Studio, clique com o botão direito do mouse no nó do projeto de nível superior e selecione Publicar.

  2. Na caixa de diálogo de publicação, selecione do Azure como destino de implantação e selecione Avançar.

  3. Para o destino específico, selecione Aplicativos de Contêiner do Azure (Linux)e, em seguida, selecione Avançar.

  4. Crie um novo aplicativo de contêiner para implantar. Selecione o botão + Criar nova para abrir uma nova caixa de diálogo e insira os seguintes valores:

    Uma captura de tela mostrando como criar um aplicativo de contêiner.

    • Nome do aplicativo de contêiner: Deixe o valor padrão ou insira um nome.
    • Nome da assinatura: Selecione a assinatura para implantar.
    • Grupo de recursos: Selecione Novo e crie um novo grupo de recursos chamado msdocs-app-db-ef.
    • Ambiente de aplicativos de contêiner: Selecione Novo para abrir a caixa de diálogo de ambiente de aplicativos de contêiner e insira os seguintes valores:
      • Nome do ambiente: Manter o valor padrão.
      • Localização: Selecione um local perto de você.
      • Espaço de Trabalho do Azure Log Analytics: Selecione Novo para abrir a caixa de diálogo do Log Analytics.
        • Nome: Deixe o valor padrão.
        • Localização: Selecione um local perto de você e, em seguida, selecione Ok para fechar a caixa de diálogo.
      • Selecione Ok para fechar a caixa de diálogo de ambiente de aplicativos de contêiner.
    • Selecione Criar para fechar a caixa de diálogo original dos aplicativos de contêiner. O Visual Studio cria o recurso de aplicativo de contêiner no Azure.
  5. Depois que o recurso for criado, verifique se ele está selecionado na lista de aplicativos de contêiner e selecione Avançar.

  6. Você precisará criar um Registro de Contêiner do Azure para armazenar o artefato de imagem publicado para seu aplicativo. Selecione o ícone verde + no ecrã do Registry de Contêineres .

    Uma captura de tela mostrando como criar um novo registro de contêiner.

  7. Deixe os valores padrão e selecione Criar.

  8. Depois que o registro de contêiner for criado, verifique se ele está selecionado e, em seguida, selecione Avançar.

  9. Na tela Tipo de implantação do, selecione fluxos de trabalho CI/CD usando fluxos de trabalho do GitHub Actions (gera arquivo yml) e escolha Concluir. Se o Visual Studio solicitar que você habilite o usuário Admin para acessar o contêiner do Docker publicado, selecione Sim.

O Visual Studio cria e exibe o perfil de publicação. A maioria das etapas e detalhes de publicação são descritos no arquivo .yml Ações do GitHub, que pode ser visualizado clicando no botão Editar fluxo de trabalho na vista de resumo do perfil de publicação. Este arquivo é abordado em maior profundidade mais adiante no artigo.

Criar o Banco de Dados SQL do Azure

  1. No Gerenciador de Soluções, clique com o botão direito do mouse no nó Serviços Conectados e selecione Adicionar > Banco de Dados do SQL Server.
  2. Na caixa de diálogo Conectar à dependência, selecione Azure SQL Database e, em seguida, escolha Avançar.
  3. Selecione + Criar novo para adicionar um novo banco de dados.
  4. Na caixa de diálogo Banco de Dados SQL do Azure, insira os seguintes valores:
    • Nome do banco de dados: Deixe o valor padrão.
    • Nome da assinatura: Selecione a mesma assinatura que anteriormente.
    • Grupo de Recursos: Selecione o mesmo grupo de msdocs-app-db-ef criado anteriormente.
    • Servidor de Banco de Dados: Selecione Novo... e insira os seguintes valores no novo POP-up:
      • Nome do Servidor de Banco de Dados: Insira um nome de servidor exclusivo ou acrescente números aleatórios ao final do nome gerado automaticamente.
      • Localização: Selecione um local próximo a você.
      • Nome de usuário do administrador: Insira um valor de sua escolha.
      • Senha de administrador: Insira um valor de sua escolha.
      • Palavra-passe de administrador (confirmar): Introduza a mesma palavra-passe para confirmar. Selecione OK para fechar a caixa de diálogo SQL Server
    • Selecione Criar para criar o SQL Server e o banco de dados.
    • Quando a operação for concluída, selecione o servidor na lista e escolha Próximo
  5. Na caixa de diálogo Conectar ao Banco de Dados SQL do Azure, deixe os valores padrão, mas verifique se Nenhum está selecionado na parte inferior da opção Salvar cadeia de conexão na opção.
  6. Selecione Concluir e o Visual Studio criará os recursos SQL.

Conectar o aplicativo de contêiner ao Azure SQL

  1. Na página de visão geral do Aplicativo de Contêiner que você criou, selecione Conector de Serviço (visualização) na navegação à esquerda.

  2. Selecione + Criar para criar uma nova conexão.

  3. No submenu Criar conexão, insira os seguintes valores:

    • Container: Selecione o dotnetcoresqldb contêiner que você criou.

    • Tipo de serviço: Selecione Banco de dados SQL.

    • Assinatura: Selecione a mesma assinatura usada para criar o aplicativo de contêiner.

    • Nome da conexão: Deixe o valor padrão.

    • SQL Server: Selecione o servidor de banco de dados criado anteriormente.

    • base de dados SQL: Selecione a base de dados criada anteriormente.

    • Tipo de cliente: Selecione .NET.

      Uma captura de tela mostrando como usar o conector de serviço.

  4. Selecione Next: Authentication e insira os seguintes valores:

    • Selecione Cadeia de conexão para o tipo de autenticação.
    • Nome de usuário: Digite o nome de usuário usado ao criar o servidor de banco de dados.
    • Senha: Digite a senha que você usou ao criar o servidor de banco de dados.
  5. Deixe o restante das configurações no padrão e selecione Next: Networking.

  6. Deixe o valor padrão selecionado e escolha Seguinte: Rever + Criar.

  7. Depois que o Azure validar as configurações, selecione Criar .

Depois de um momento, a conexão com o banco de dados SQL deve aparecer. Selecione a seta para expandir a conexão e ver o valor AZURE_SQL_CONNECTIONSTRING. Esse nome de conexão corresponde ao nome da cadeia de conexão da variável de ambiente definida no aplicativo de exemplo.

Configurar o fluxo de trabalho de Ações do GitHub

O arquivo de fluxo de trabalho GitHub Actions gerado pelo Visual Studio pode ser usado pelo GitHub para criar e implantar o aplicativo no Azure quando as alterações são enviadas por push. Atualmente, esse processo funcionaria, mas o aplicativo implantado lançaria uma exceção. Embora o banco de dados SQL do Azure tenha sido criado, uma etapa deve ser adicionada ao fluxo de trabalho de Ações do GitHub para gerar o esquema. A cadeia de conexão para o banco de dados SQL do Azure pode ser armazenada com segurança como um segredo no GitHub e recuperada pelo fluxo de trabalho quando ele é executado.

Recuperar a cadeia de conexão e adicioná-la aos segredos do GitHub

  1. No portal do Azure, procure o banco de dados criado na barra de pesquisa principal e selecione-o nos resultados.

  2. Na página de visão geral do banco de dados, selecione Cadeias de conexão na navegação à esquerda.

  3. Na guia ADO.NET, copie a cadeia de conexão para fora do campo de formulário.

    Uma captura de tela mostrando como recuperar a cadeia de conexão.

  4. Navegue até ao repositório GitHub clonado da aplicação.

  5. Na guia Configurações do, selecione > Segredos Ações na navegação à esquerda e escolha Novo segredo do repositório.

  6. Na página Novo segredo, insira os seguintes valores:

    • Nome: Digite um nome de DbConnection.

    • Segredo: Cole a string de conexão copiada do Azure. Certifique-se de substituir o espaço reservado para senha na cadeia de conexão pela senha escolhida ao criar o banco de dados.

    • Selecione Adicionar segredo.

      Uma captura de tela mostrando como criar um segredo do GitHub.

A cadeia de conexão agora é armazenada com segurança nos segredos do repositório GitHub e pode ser recuperada usando um fluxo de trabalho do GitHub.

Modificar o fluxo de trabalho de Ações do GitHub para habilitar migrações

  1. Abra o arquivo de fluxo de trabalho do GitHub Actions .yml gerado pelo Visual Studio ao selecionar o botão Editar Fluxo de Trabalho na página de resumo da publicação.

    Uma captura de tela mostrando como editar o fluxo de trabalho.

  2. Anexe o seguinte yaml ao final do arquivo de fluxo de trabalho:

    - name: Run EF 
      run: | 
        dotnet tool install --global dotnet-ef
        dotnet tool restore
        dotnet ef database update -p DotNetCoreSqlDb --connection '${{ secrets.DBConnection }}'
    

    Esse código instala as ferramentas de linha de comando do entity framework e executa as migrações do aplicativo. Quando o fluxo de trabalho é executado, o código também usa o parâmetro connection do comando database update para substituir a cadeia de conexão localdb armazenada no arquivo appsettings.json pelo valor que foi adicionado aos segredos do GitHub.

Execute o fluxo de trabalho de Ações do GitHub e teste a implantação

  1. Confirme as alterações no aplicativo e envie por push para o repositório bifurcado usando o seguinte comando:

    git add --all
    git commit -m "Added GitHub Actions workflow"
    git push
    
  2. Navegue até o repositório GitHub e selecione o separador Ações. Uma execução de um fluxo de trabalho deve ter sido acionada automaticamente se o envio por push tiver sido bem-sucedido.

  3. Selecione o fluxo de trabalho ativo para exibir os detalhes de log de cada etapa à medida que forem concluídos. A migração é executada por último para atualizar o banco de dados no Azure.

    Uma captura de tela mostrando o fluxo de trabalho de ação do GitHub.

Após a conclusão do fluxo de trabalho, o aplicativo é implantado nos Aplicativos de Contêiner do Azure e conectado ao banco de dados com um esquema atualizado.

Você pode testar a implantação navegando até a página inicial do aplicativo de contêiner e criando um TODO, assim como fez localmente. Você sempre pode encontrar a URL do seu aplicativo de contêiner na página de visão geral do aplicativo no portal do Azure.