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

Renato Groffe
6 min readNov 4, 2019

--

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
Renato Groffe

Written by Renato Groffe

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

No responses yet