Dev (Back & Front)ARTIGO

ASP.NET Core + PowerShell: publicando via linha de comando e em segundos uma Web App no Azure

No seguinte artigo, Renato Groffe apresenta um passo a passo ensinando a publicar, via linha de comando, uma Web App no Microsoft Azure.

ASP.NET Core + PowerShell: publicando via linha de comando e em segundos uma Web App no Azure
Imagem: Renato Groffe

Um dos serviços mais utilizados para hospedagem de aplicações Web no Microsoft AzureAzure76 conteúdosDeploy de Azure Stream Analytics job com CI/CD usando Azure PipelinesDevSecOps · mai 2019Azure – Como criar uma base de dados SQL no Microsoft Azure pronta para ser utilizadaData · abr 2019Azure Static Web Apps com Vue.js e Visual Studio CodeDevSecOps · out 2023Ver tudo em DevSecOps , o App Service, é comumente empregado no deployment de projetos a partir do próprio Visual Studio ou ainda por meio de soluções para automação, como o Azure DevOps.

Embora essas duas alternativas constituam os caminhos mais frequentes para a publicação, outras opções também estão disponíveis.

Scripts do PowerShell constituem uma dessas possibilidades com este processo envolvendo a manipulação de um arquivo ZIP com todos os itens necessários para a publicação em um recurso do Azure App Service.

O objetivo deste artigo é justamente abordar essa alternativa, através do deployment na nuvem de uma API REST para gerenciamento de um catálogo de produtos, baseada no ASP.NET.NET113 conteúdosNovidades do .NET 9 – o tipo genérico OrderedDictionaryDev (Back & Front) · dez 2024Novidades .NET 10: novas formas de uso do .NET CLIDev (Back & Front) · dez 2025Novidades do .NET 5: implementando um proxy reverso com YARP + ASP.NET 5Dev (Back & Front) · nov 2020Ver tudo em Dev (Back & Front) Core 2.2.

Criando um novo recurso do Azure App Service

No portal do Azure um novo recurso deverá ser criado – é preciso selecionar a opção Web App:

Na próxima imagem é possível observar as informações necessárias para a criação de uma nova Web App: nome, sistema operacional, grupo de recursos e plano de serviço.

Concluído este processo, um novo App Service estará disponível para uso, já contando, inclusive, com um endereço para acesso e HTTPS habilitado:

Publicando a aplicação via script do PowerShell

O projeto utilizado nos testes descritos por este artigo já foi disponibilizado no GitHub:

Na listagem a seguir temos um script do PowerShell com as instruções necessárias para gerar o build da aplicação ASP.NET Core, bem como sua publicação em um recurso do Azure App Service:

  • Um diretório indicado pela variável $dirPublicacao conterá os arquivos da publicação. Caso o diretório especificado em $dirPublicacao já exista, o mesmo será removido forçosamente por meio do comando Remove-Item -Recurse -Force;.
  • O comando dotnet publish permitirá a publicação da aplicação com configurações de Release, com os arquivos resultantes deste processo sendo criados na pasta indicada por $dirPublicacao;
  • O nome do arquivo ZIP que conterá o pacote de publicação foi especificado na variável $arqPublicacao (novamente será efetuada a exclusão forçada ao se encontrar uma versão antiga do arquivo em questão);
  • A invocação do método CreateFromDirectory utilizando o assembly de compressão do .NET permitirá a criação do arquivo indicado em $arqPublicacao, tomando como base o diretório vinculado à $dirPublicacao;
  • Finalmente o Azure CLI (Command-Line Interface) será acionado através da instrução azwebapp deployment. Este comando receberá como parâmetros a identificação do recurso (variável $recurso), o grupo correspondente (variável $grupo) e o nome do arquivo compactado (variável $arqPublicacao).
  • Mensagens indicando o horário de início e término do processo também serão exibidas, a fim de permitir a medição do tempo total das tarefas executadas.
$dataHora = Get-Date
'Horario Inicial: ' + $dataHora

$dirPublicacao = "publicacao"
$recurso = "groffeprodutos"
$grupo = "TesteAppService"

# Força a exclusão de uma pasta para publicação criada anteriormente
if (Test-Path $dirPublicacao) {
    Remove-Item -Recurse -Force $dirPublicacao
}

# Realiza a publicação
dotnet publish -c release -o $dirPublicacao

# Remove um arquivo compactado com a publicação (caso o mesmo tenha sido
# criado anteriormente)
$arqPublicacao = "publicacao.zip"
if (Test-Path $arqPublicacao) {
    Remove-Item -Force $arqPublicacao
}

# Efetua a compressão da pasta com a publicação
Add-Type -assembly "system.io.compression.filesystem"
[io.compression.zipfile]::CreateFromDirectory($dirPublicacao, $arqPublicacao)

# Efetua o deployment utilizando o arquivo compactado (.zip)
az webapp deployment source config-zip -n $recurso -g $grupo --src $arqPublicacao

$dataHora = Get-Date
'Horario Final: ' + $dataHora

A seguir temos o resultado da execução do script deployment.ps1, totalizando 26 segundos neste exemplo (um tempo bem inferior àquele que muitos estão habituados ao utilizar o Visual Studio 2017, por exemplo):

Na próxima imagem é possível observar que foram gerados o arquivo publicacao.zip e o diretório publicacao:

Testes

O endereço https://groffeprodutos.azurewebsites.net/api/produtos servirá de base para a realização dos testes envolvendo a manipulação de informações de produtos (nesta URL podemos notar que consta o nome do recurso do App Service — groffeprodutos — criado anteriormente).

Na imagem a seguir temos a inclusão de um produto via Postman:

Uma consulta via browser trará os produtos já cadastrados (para a API REST em questão foi utilizado o Entity Framework Core InMemory, o qual possibilita o armazenamento temporário de dados sem grandes complicações):

Referências

Atua como consultor em atividades voltadas ao desenvolvimento de sistemas há mais de 15 anos. Microsoft MVP (Most Valuable Professional) e participante do programa MTAC (Multi-Plataform Technical Audience Contributor). Bacharel em Sistemas de Informação, com Especialização em Engenharia de Software e MBA em Business Intelligence. Também é palestrante e autor técnico em portais e revistas especializadas, com foco em tecnologias Microsoft e boas práticas na área de software.

Ver perfil