.NET Core + Serverless: publicando uma Azure Function via VS Code
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: