Serviços em background com o Azure Web Jobs

     Fala pessoal, fim de ano está chegando e hoje trarei para vocês o último post de 2016. Trabalhei recentemente na configuração de um serviço para atualização de algumazure logoas regras no sistema online de controle de estoque da minha empresa, o tsEstoque. Sempre tive um executável agendado na máquina virtual em servidores onde hospedei a aplicação, que hoje se encontra no Azure, mas descobri há algum tempo atrás a possibilidade de fazer este agendamento de forma mais fácil com a ferramenta de WebJobs do Azure.

      Muitos já se depararam com a necessidade de executar uma rotina em background na aplicação, um executável que fica responsável por atualizar dados de uma tabela, enviar emails,processar arquivos do Excel ou algo do tipo. Geralmente se cria um projeto console que compilado gera um .exe e utiliza-se o agendador de tarefas do windows para disparar esse programa periodicamente.

agendador tarefas

Tela do agendador de tarefas do windows

     Mas caso sua aplicação esteja na nuvem, isto requer a administração de uma máquina virtual (VM) e todo trabalho associado a mesma, sem contar que os custos podem não ser convidativos se seu job for muito simples. Então para rodar programas e scripts no seu serviço Azure recomendo usar os WebJobs, que podem ser disparados manualmente, de forma contínua ou agendados, e não é feita cobrança adicional por isso.

Quais tipos de programas e scripts são aceitos?

  • cmd, .bat, .exe (using windows cmd)
  • .ps1 (using powershell)
  • .sh (using bash)
  • .php (using php)
  • .py (using python)
  • .js (using node)
  • .jar (using java)

Criando um WebJob programado no portal do Azure

     Vamos agora configurar nosso job no portal do Azure.Acesse o endereço https://portal.azure.com, faça o login com sua assinatura e clique em “Serviços de Aplicativos”.

print azure portal

Tela de acesso a WebJobs no portal do Azure.

     Veja que na imagem acima mostra a entrada “Trabalhos Web” pois meu portal está em português, e para acessar os jobs preciso ter um “Serviço de Aplicativo” previamente configurado. Feito isso, ao clicar em trabalhos web é apresentada a tela na lateral com todos os serviços que possuo cadastrados, neste caso nenhum, então vamos criar um novo no botão superior “+ Adicionar”.

print cadastro job

Formulário de cadastro de WebJobs.

     Para cadastrar um Webjob novo informe um nome para o mesmo, carregue o arquivo do programa ou script que será executado, no meu caso um .exe, informe se o tipo é Contínuo ou Disparado, as diferenças principais são:

  • Contínuo: o código deve ser escrito para rodar em um loop infinito mas só rodam enquanto sua aplicação web estiver de pé. Podem ser depurados, diferente jobs sob demanda/agendados.Esse mecanismo só tem pleno funcionamento nos planos PAGOS, caso contrário, após 20min. de funcionamento, WebJobs são  parados pelo Azure.
  • Disparado: Neste modelo de publicação, WebJobs são executados de tempos em tempos com base em um agendamento. Esse tempo varia de acordo com a parametrização que você configurou no momento de cadastra-lo.

     Em nosso caso de ser Contínuo, deverá informar se é executado em várias instâncias do servidor ou em uma instância única. No nosso caso como o tipo é disparado, informe se o gatilho é Agendado ou Manual, sendo agendado deverá informar também uma expressão CRON no formato {segundos} {minuto} {hora} {dia} {mês} {dias da semana} que descreve a periodicidade do agendamento, alguns exemplos de expressão  CRON podem ser vistos abaixo:

  • A cada hora das 9 AM até 5 PM: 0 0 9-17 * * *
  • Às 9:30 AM todos os dias: 0 30 9 * * *
  • Às 9:30 AM todo dia útil: 0 30 9 * * 1-5

Visualizando o log e histórico de execução

Após disparar a execução do seu serviço, podemos visualizar o histórico de execuções e a saída do console em um registro de log, para isso acesse a lista de jobs cadastrados. A lista mostra o nome que foi dado ao job, o tipo, um status da execução e a expressão CRON com a periodicidade do agendamento.

jobs cadastrados

Exemplo de Webjob cadastrado

Ao clicar com o botão direito do mouse é apresentado um menu com as operações possíveis: Logs, Excluir, Executar e Propriedades do cadastro.

funções do clique no job

Operações possíveis ao clicar no job

      Ao clicar em Logs é mostrada a tela do Microsoft Azure WebJobs com lista de logs disponível, veja imagem abaixo:

tela3

     Ao clica no nome do job somos levados à tela de detalhes com o registro de logs ordenados por data, da mais atual até a mais antiga e se o mesmo foi executado com sucesso ou erro:

tela detalhes log job

     Clicando em um dos registros na coluna “Timing” é apresentada a saída da aplicação, é possível baixar o log clicando em “download”:

texto saida log

     A saída mostrada no log neste caso é através do uso do método console.write() do C# para projetos do tipo “Console Application” do .NET. Podemos observar que trabalhar com WebJobs se torna algo muito mais gerenciável, fácil de monitorar e fácil de escalar. Dado que o funcionamento dos WebJobs se dá através de um WebApp, toda a escala que um WebApp demandar, essa escala também será dada aos WebJobs, vale apenas lembrar que é preciso ter cuidado ao balancear seu serviço web com o WebJob, não da pra jogar qualquer coisa sem se preocupar com o desempenho e a finalidade.

Notas

  • O limite de upload do zip com o job é de 52Mb.
  • Jobs agendados, como o que criamos acima, estão disponíveis para Web Apps pagos rodando em modo Básico, Padrão ou Premium, e necessitam estar com o atributo “Always On” habilitado no seu serviço web, sem isso o job não executará mesmo tendo sido criado e agendado corretamente. Se sua assinatura é gratuita existe uma limitação de execução de 20min para o processo.

 

     Bom pessoal, acho que é isso, se alguém teve uma experiência diferente ou encontrou outras formas de automatizar jobs na nuvem da Microsoft, fique a vontade para comentar.

Até ano que vem e Feliz 2017!

 

 

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s