.NET Core + Serverless: publicando uma Azure Function via VS Code

Renato Groffe
Nov 4 · 6 min read

Em um artigo anterior abordei a implementação de processos de execução contínua empregando Azure Functions, o Visual Studio Code, .NET Core e Timer Triggers:

.NET Core + Serverless: implementando jobs com Azure Functions e o VS Code

Neste novo post darei continuidade a este trabalho, demonstrando agora como proceder com a publicação no Microsoft Azure da rotina de monitoramento detalhada no primeiro artigo. Para isto serão criadas uma Function App para hospedar o projeto, uma Logic App para o envio de notificações de alerta ao Azure, além de uma base de dados do Azure SQL e de uma conta de armazenamento.

E aproveito este espaço também para um convite…

Que tal aprender mais sobre Azure Functions e desenvolvimento de soluções Serverless, em um workshop que acontecerá durante um sábado (dia 18/01/2020) em São Paulo Capital e implementando um case na prática? Acesse então o link a seguir para efetuar sua inscrição com um desconto especial: http://bit.ly/aznp-devops-blog-groffe


Detalhes sobre a Logic App que enviará notificações de alerta para o Slack

Por questões de simplificação não demonstrarei neste artigo o passo a passo envolvendo a criação de uma Logic App no Azure, visto que já abordei este procedimento em outros artigos como o indicado a seguir:

Monitorando recursos com o ASP.NET Core 3.0, Health Checks, Azure Logic Apps e o Slack

Na imagem a seguir é possível observar o workflow que implementei para a Logic App AlertaBD-Slack-LogicApp:

  • Em HTTP POST URL está o endpoint que a function DBCheckTimerTrigger utilizará para envio a um canal em um grupo do Slack de um alerta de indisponibilidade da base de dados;
  • - Os dados detalhando uma falha no acesso à base dados seguirão o payload/contrato indicado em Request Body JSON Schema do step When a HTTP request is received;
  • O canal do Slack alerta-bd receberá mensagens contendo alertas de indisponibilidade através do step Post message.

Criando e configurando a Function App

Para o deployment do projeto contendo a Timer Trigger de monitoramento será necessária a criação de uma Function App no Portal do Azure:

Ao gerar uma nova Function App informar:

  • Um grupo de recursos em Resource Group;
  • O nome do recurso em Function App name;
  • Em Runtime Stack selecionar .NET Core. Outras opções possíveis no Portal do Azure são Node.js, Python, Java e PowerShell Core;
  • O Data Center do Azure em Region.

Acionar então o botão Next: Hosting, preenchendo na sequência:

  • Uma conta de armazenamento nova ou pré-existente deverá ser indicada em Storage account (neste caso será gerada o recurso storagegroffefunctions);
  • O sistema operacional em que será hospedada a aplicação em Operating System (para este exemplo optei por Windows);
  • O plano de hospedagem em Plan type. Ao optar por Consumption teremos 10 minutos como limite para cada execução de uma Function (intervalo de tempo mais do que suficiente para o exemplo deste artigo). Maiores detalhes sobre essa alternativa podem ser encontrados neste link.

Desativar para este exemplo o uso do Application Insights (serviço de monitoramento de aplicações Web que integra o Microsoft Azure):

Finalmente em Review + Create confirmar a criação da Function App clicando no botão Create:

Consultando o grupo de recursos MonitorBD aparecerão a Function App groffefunctions e demais itens criados para o projeto descrito neste artigo:

Acessar agora o recurso storagegroffefunctions. Acionar em seguida a opção Access keys, copiando o conteúdo de Connection string para uso no cadastramento das configurações da Function App groffefunctions:

Como próximo passo agora navegar até a seção Overview do recurso groffefunctions, acionando na sequência a opção Configuration:

Em Application settings serão cadastrados:

  • A string de conexão BaseIndicadores, com o preenchimento num primeiro momento de uma referência a uma base de dados inválida (para log do erro gerado durante os testes);
  • A string de conexão BaseLog, na qual constará a connection string da conta de armazenamento storagegroffefunctions;
  • O item UrlLogicAppAlerta, com o endpoint da Logic App AlertaBD-Slack-LogicApp (configuração esta mostrada na seção anterior).

Em Application settings serão cadastrados:

  • A string de conexão BaseIndicadores, com o preenchimento num primeiro momento de uma referência a uma base de dados inválida (para log do erro gerado durante os testes);
  • A string de conexão BaseLog, na qual constará a connection string da conta de armazenamento storagegroffefunctions;
  • O item UrlLogicAppAlerta, com o endpoint da Logic App AlertaBD-Slack-LogicApp (configuração esta mostrada na seção anterior).

Acionar para isto a opção + New application setting:

Preencher para cada uma destas configurações os campos Name e Value:

Confirmar os valores incluídos clicando finalmente no botão Save:


Deployment a partir do Visual Studio Code

Com o projeto ServerlessMonitorBD aberto no Visual Studio Code acessar o ícone do Microsoft Azure, navegando até FUNCTIONS. Encontrar então a Function App criada via Portal do Azure, clicando com o botão direito do mouse sobre a mesma e acionando a opção Deploy to Function App…:

Uma alerta será então exibido; confirmar a publicação acionando a opção Deploy:

Ao término do deployment um aviso será exibido no VS Code indicando que este procedimento teve sucesso:

Neste momento a função DBCheckTimerTrigger já aparecerá vinculada à Function App groffefunctions no Portal do Azure:

Os fontes do projeto ServerlessMonitorBD já estão disponíveis no GitHub:

https://github.com/renatogroffe/DotNetCore-AzureFunctions2x-MonitorBD


Testes

Acessando a funcionalidade Log em DBCheckTimerTrigger será possível observar falhas na verificação, com o print de mensagens de log indicando inclusive o envio de alertas para a Logic App que efetua a integração com o Slack:

Com o Microsoft Azure Storage Explorer conectado à conta de armazenamento storagegroffefunctions será possível observar as diversas falhas de acesso logadas na tabela LogTable:

O canal do alerta-bd também terá recebido no Slack as notificações enviadas por meio da Logic App AlertaBD-Slack-LogicApp:

Corrigindo o valor associado à string de conexão BaseIndicadores na seção Application settings da Function App groffefunctions será possível observar no Log que não ocorreram mais problemas:

Em LogTable também constarão registros indicando sucesso nas tentativas de conexão, como demonstrado neste novo acesso realizado via Microsoft Azure Storage Explorer:


Renato Groffe

Written by

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade