Blog
Domine a plataforma e otimize seus gastos!
Azure Functions - Invocando uma função não HTTP via HTTP
Quando temos funções do tipo TimeTrigger e precisamos dispará-las antes do tempo estabelecido sempre temos dúvidas da melhor maneira de fazer, no post de hoje vou mostrar de uma forma prática como podemos executar uma função via HTTP, mesmo que ela não tenha uma trigger HTTP.
Ola pessoALL,
Quando trabalhamos com Azure Functions, especialmente em funções do tipo TimeTrigger, executadas em horários específicos, frequentemente precisamos invocar a função para testes, mas não queremos aguardar o tempo de execução. Imagine uma função executada apenas uma vez ao mês, não vamos aguardar até o próximo mês para ver a execução correta.
A forma mais comum de executar a função é utilizando o atributo RunOnStartup para executar a função quando rodamos o projeto.
Inclusive eu fiz um post sobre como executar funções especificas no projeto:
O atributo resolve parcialmente o nosso problema com o potencial de gerar outro maior, ao esquecermos de remover o atributo a todo novo deploy a função vai ser executada, o que pode ocasionar comportamentos indesejados do nosso projeto.
Mas mesmo com todo o cuidado de não subirmos o código para produção com o atributo como true ainda temos os casos que precisamos disparar a função para testes e não queremos fazer outro deploy apenas para isso.
Invocando funções de forma manual
Toda função publicada tem um endereço HTTP para ser invocada, isso funciona para qualquer tipo de função e esta bem documentado na própria documentação do Azure Functions.
Para executarmos nossa função temos que obedecer o seguinte padrão de url:
- Host Name: O nome da sua função e o sufixo azurewebsites.net
- Folder path: Como nossa função não é HTTP o caminho sempre será /admin/functions
- Function name: O nome da função para ser executada.
O próximo passo é copiar a chave master do portal e enviar no cabeçalho da requisição com o nome x-functions-key.
Como meu exemplo é de uma função TimeTrigger para invocá-la devemos enviar uma requisição POST do tipo JSON com o corpo vazio. A função só é executada se o retorno da chamada for 202
Dessa forma podemos invocar qualquer função que precisarmos de forma simples.
Espero que tenham curtido essa dica!
[]s e até a próxima.