Tutorial: Implantar um aplicativo ASP.NET Core e um Banco de Dados em Aplicativos de Contêiner do Azure usando o GitHub Actions
Neste tutorial, você aprenderá a implantar um aplicativo ASP.NET Core e o Banco de Dados SQL nos Aplicativos de Contêiner do Azure usando o Visual Studio e o GitHub Actions. Você também aprenderá a 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 do Visual Studio 2022 instalado com as cargas de trabalho de desenvolvimento do ASP.NET e para a Web e desenvolvimento do Azure.
Se você já instalou o Visual Studio:
- Instale as atualizações mais recentes no Visual Studio selecionando Ajuda>Verificar atualizações.
- Verifique se as cargas de trabalho desenvolvimento do ASP.NET e para a Web e desenvolvimento do Azure estão instaladas selecionando Ferramentas>Obter Ferramentas e Recursos.
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 ir, mas você precisará estabelecer uma conexão com o localdb
SQL Server que está disponível no Visual Studio. A conexão com localdb
permitirá que você execute o aplicativo e persista listas de tarefas enquanto trabalha localmente.
- 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 SQL Server.
- Na caixa de diálogo Conectar-se a dependência, selecione SQL Server Express LocalDB (Local) e Avançar.
- Na caixa de diálogo Conectar-se 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 o valor da cadeia de conexão em: selecione Nenhum.
- Selecione Próximo
- 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
.
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.
- Selecione o ícone ... à direita da lista de dependências de serviço ao lado da conexão
LocalDB
e escolha Adicionar migração. - 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. - O Visual Studio gera uma pasta
Migrations
no projeto e cria uma classe de migrações iniciais. Essa classe pode ser usada para atualizar o banco de dados com o esquema correto. - Selecione o ícone ... ao lado do serviço
LocalDB
novamente e selecione Atualizar banco de dados. - Na caixa de diálogo Migrações do Entity Framework, aguarde um momento para que o Visual Studio localize a classe
DbContext
novamente e escolha Concluir. O Visual Studio executa a migração e cria o esquema para o banco de dados no servidorLocalDB
.
Inicie o projeto selecionando o botão executar DotNetCoreSqlDb na parte superior do Visual Studio.
Quando o aplicativo for carregado, verifique se o banco de dados está funcionando corretamente inserindo um novo TODO. A TAREFA pendente aparece no modo de exibição de lista principal na home page do aplicativo.
Explorar 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")));
}
Esse código aplica as seguintes configurações:
- Quando o aplicativo é executado localmente, a cadeia de conexão
localdb
é extraída do arquivoappsettings.json
e fornecida ao Entity Framework. Essa configuração permite que a cadeia de conexãolocaldb
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 do GitHub Actions 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:
- Aplicativo de Contêiner: Necessário para hospedar e executar o aplicativo implantado.
- Registro de Contêiner: armazena o artefato de imagem compilado do aplicativo em contêineres.
- Banco de Dados SQL: Um banco de dados do Azure SQL 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
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.
Na caixa de diálogo de publicação, selecione Azure como destino de implantação e selecione Avançar.
Para o destino específico, selecione Aplicativos de Contêiner do Azure (Linux) e, em seguida, Avançar.
Crie um novo aplicativo de contêiner para o qual implantar. Selecione o botão + Criar nova para abrir uma nova caixa de diálogo e insira os seguintes valores:
- Nome do aplicativo contêiner: Deixe o valor padrão ou insira um nome.
- Nome da assinatura: Selecione a assinatura na qual 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 do ambiente de aplicativos de contêiner e insira os seguintes valores:
- Nome do ambiente: Manter o valor padrão.
- Local: Selecione um local próximo a você.
- Workspace do Azure Log Analytics: selecione Novo para abrir a caixa de diálogo do workspace do Log Analytics.
- Nome: Deixe o valor padrão.
- Local: Selecione um local próximo a você e 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 do aplicativo de contêiner. O Visual Studio cria o recurso de aplicativo de contêiner no Azure.
Depois que o recurso for criado, verifique se ele está selecionado na lista de aplicativos de contêiner e selecione Próximo.
Você precisará criar um registro de contêiner do Azure para armazenar o artefato de imagem publicado para seu aplicativo. Selecione o ícone verde + na tela do Registro de Contêiner .
Deixe os valores padrão e selecione Criar.
Depois que o registro de contêiner for criado, verifique se ele está selecionado e selecione o próximo.
Na tela Tipo de implantação, selecione CI/CD usando fluxos de trabalho do GitHub Actions (gera o arquivo yml) e escolha Concluir. Se o Visual Studio solicitar que você habilite o usuário administrador a acessar o contêiner publicado do Docker, selecione Sim.
O Visual Studio cria e exibe o perfil de publicação. A maioria das etapas de publicação e detalhes são descritos no arquivo .yml
do GitHub Actions, que pode ser exibido clicando no botão Editar fluxo de trabalho na exibição de resumo do perfil de publicação. Esse arquivo é abordado com mais profundidade posteriormente no artigo.
Criar o Banco de Dados SQL do Azure
- 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.
- Na caixa de diálogo Conectar-se a dependência, selecione Banco de Dados SQL do Azure e escolha Avançar.
- Selecione + Criar Novo para adicionar um novo banco de dados.
- Na caixa de diálogo do 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.
- Local: Selecione um local próximo a você.
- Nome de usuário administrador: Insira um valor de sua escolha.
- Senha de administrador: Insira um valor de sua escolha.
- Senha do Administrador (confirme): Insira a mesma senha 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
- Na caixa de diálogo Conectar-se ao Banco de Dados SQL do Azure, deixe os valores padrão, mas verifique se Nenhum está selecionado na parte inferior para a opção Salvar valor da cadeia de conexão em.
- Selecione Concluir e o Visual Studio criará os recursos do SQL.
Conectar o aplicativo de contêiner ao SQL do Azure
Na página de visão geral do Aplicativo de Contêiner que você criou, selecione Conector de Serviço (versão prévia) na navegação à esquerda.
Selecione + Criar para criar uma nova conexão.
No submenu Criar conexão, insira os seguintes valores:
Contêiner: Selecione o contêiner dotnetcoresqldb 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.
Banco de dados SQL: selecione o banco de dados criado anteriormente.
Tipo de cliente: Selecionar .NET.
Selecione Avançar: Autenticação e insira os seguintes valores:
- Selecione Cadeia de conexão para o tipo de autenticação.
- Nome de usuário: Insira o nome de usuário usado ao criar o servidor de banco de dados.
- Senha: Insira a senha usada ao criar o servidor de banco de dados.
Deixe o restante das configurações em seu padrão e selecione Avançar: Rede.
Deixe o valor padrão selecionado e escolha Avançar: Revisar + Criar.
Depois que o Azure validar as configurações, selecione Criar.
Após um momento, a conexão com o banco de dados SQL deve aparecer. Selecione a seta para expandir a conexão e veja o valor AZURE_SQL_CONNECTIONSTRING. Esse nome de conexão corresponde ao nome da cadeia de conexão de variável de ambiente definida no aplicativo de exemplo.
Configurar o fluxo de trabalho do GitHub Actions
O arquivo de fluxo de trabalho do 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 geraria uma exceção. Embora o banco de dados SQL do Azure tenha sido criado, uma etapa deve ser adicionada ao fluxo de trabalho do GitHub Actions para gerar o esquema. A cadeia de conexão do 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
No portal do Azure, pesquise o banco de dados que você criou na barra de pesquisa principal e selecione-o nos resultados.
Na página de visão geral do banco de dados, selecione Cadeias de conexão na navegação à esquerda.
Na guia ADO.NET, copie a cadeia de conexão para fora do campo de formulário.
Navegue até o repositório GitHub clonado do aplicativo.
Na guia Configurações, selecione Segredos > Ações na navegação à esquerda e escolha Novo segredo do repositório.
Na página Novo segredo, insira os seguintes valores:
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 do GitHub Actions para habilitar migrações
Abra o arquivo do fluxo de trabalho
.yml
do GitHub Actions gerado pelo Visual Studio, selecionando o botão Editar Fluxo de Trabalho na página de resumo de publicação.Acrescente 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 da estrutura de entidade e executa as migrações de aplicativo. Quando o fluxo de trabalho é executado, o código também usa o parâmetro
connection
do comandodatabase update
para substituir a cadeia de conexãolocaldb
armazenada no arquivoappsettings.json
com o valor que foi adicionado aos segredos do GitHub.
Execute o fluxo de trabalho do GitHub Actions e teste a implantação
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
Navegue até o repositório GitHub e selecione a guia Ações. Uma execução de fluxo de trabalho deve ter sido disparada automaticamente se o push tiver sido bem-sucedido.
Selecione o fluxo de trabalho ativo para exibir os detalhes do log para cada etapa à medida que elas forem concluídas. A migração é executada por último para atualizar o banco de dados no Azure.
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 home page do aplicativo de contêiner e criando um TODO, assim como fez localmente. Você sempre pode encontrar a URL para seu aplicativo de contêiner na página de visão geral do aplicativo no portal do Azure.