Executar o código sob demanda com o Azure Functions

Concluído

Agora que criamos um aplicativo de funções, veremos como criar, configurar e executar uma função. Executaremos nossa função no próximo exercício, para que você não precise concluir nenhuma tarefa nesta unidade.

Gatilhos

As funções são controladas por eventos, o que significa que elas são executadas em resposta a um evento. O tipo de evento que inicia uma função é chamado de gatilho. Cada função deve ser configurada com exatamente um gatilho.

Você pode disparar a execução da função de gatilho usando solicitações HTTP, um temporizador agendado e eventos dos seguintes serviços do Azure:

Serviço do Azure Descrição do gatilho
Armazenamento de Blobs Inicia uma função quando um blob novo ou atualizado é detectado.
Azure Cosmos DB Inicia uma função quando inserções e atualizações são detectadas.
Grade de Eventos Inicia uma função quando um evento é recebido da Grade de Eventos.
Hubs de Eventos Inicia uma função quando um evento é recebido dos Hubs de Eventos.
Armazenamento de Filas Inicia uma função quando um novo item é recebido em uma fila. A mensagem da fila é fornecida como entrada para a função.
Barramento de Serviço Inicia uma função em resposta a mensagens de uma fila do Barramento de Serviço.

Associações

Uma associação é um modo declarativo de conectar dados e serviços à função. As associações interagem com várias fontes de dados, o que significa que você não precisa escrever um código na função para se conectar a fontes de dados e gerenciar conexões. A plataforma cuida dessa complexidade para você como parte do código de associação. Cada associação tem uma direção: Seu código lê dados de associações de entrada e escreve dados em associações de saída. Cada função pode ter zero ou mais associações para gerenciar os dados de entrada e saída processados pela função.

Um gatilho é um tipo de associação de entrada que tem a capacidade de iniciar a execução de algum código.

O Azure fornece uma grande quantidade de associações para se conectar a diferentes serviços de armazenamento e de mensagens.

Definir uma associação de exemplo

Vamos examinar um exemplo de configuração de uma função com uma associação de entrada (gatilho) e uma associação de saída. Suponha que você deseje gravar uma nova linha no Armazenamento de Tabelas do Azure sempre que uma nova mensagem é exibida no Armazenamento de Filas do Azure. Esse cenário pode ser implementado usando um gatilho do Armazenamento de Filas do Azure e uma associação de saída do Armazenamento de Tabelas do Azure.

O snippet a seguir é o arquivo function.json para este cenário.

{
  "bindings": [
    {
      "name": "order",
      "type": "queueTrigger",
      "direction": "in",
      "queueName": "myqueue-items",
      "connection": "MY_STORAGE_ACCT_APP_SETTING"
    },
    {
      "name": "$return",
      "type": "table",
      "direction": "out",
      "tableName": "outTable",
      "connection": "MY_TABLE_STORAGE_ACCT_APP_SETTING"
    }
  ]
}

A configuração JSON especifica que a função será disparada quando uma mensagem for adicionada a uma fila chamada myqueue-items. O valor retornado da função é então gravado na outTable no Armazenamento de Tabelas do Azure.

Para funções do PowerShell, as associações de saída são gravadas explicitamente com o cmdlet Push-OutputBinding.

Este exemplo é uma ilustração simples de como configuramos associações para uma função. Poderíamos alterar a saída para ser um email usando uma associação do SendGrid ou colocar um evento em um Barramento de Serviço para notificar outro componente em nossa arquitetura. Também poderíamos ter várias associações de saída para efetuar push de dados para vários serviços.

Dica

Para exibir e editar os conteúdos de function.json no portal do Azure, na Página Inicial, selecione seu aplicativo de funções e, no painel direito, selecione Exibição JSON. A exibição JSON do Recurso mostra a ID do Recurso e o código JSON editável. Para fechar a exibição JSON, clique no X no canto superior direito do painel.

Nem todos os idiomas compatíveis com o Functions usam o arquivo function.json para definir funções.

Criar uma função no portal do Azure

O Azure Functions fornece modelos de função predefinidos, que são baseados em um tipo específico de gatilho. Esses modelos, no idioma escolhido, facilitam a criação da sua primeira função.

Este módulo não tem suporte para todos os idiomas compatíveis com o Functions e o próprio portal não dá suporte à criação de funções em todos os idiomas compatíveis com o Functions.

Para idiomas com suporte que usam o arquivo function.json para definir funções, você pode criar e editar essas funções diretamente no portal do Azure. Essas linguagens compatíveis com o portal incluem: JavaScript, PowerShell, Python e Script C# (.csx). Os idiomas que definem funções diretamente no próprio código devem ser desenvolvidos fora do portal e implantados no Azure. Essas linguagens com suporte que não são do portal incluem: C#, Java, Python (modelo de programação v2) e JavaScript/TypeScript (modelo de programação Node.js v4).

Modelos de função

Ao criar sua primeira função no portal, você poderá selecionar um gatilho predefinido para sua função. Com base em suas seleções, o Azure gera informações de código e de configuração padrão, como a criação de uma entrada de log de eventos quando os dados de entrada são recebidos.

Selecionar um modelo no painel Adicionar função dá acesso fácil aos ambientes de desenvolvimento, gatilhos e dependências mais comuns. Ao criar uma função no portal do Azure, você pode escolher entre mais de 20 modelos. Depois de criado, você pode personalizar ainda mais o código.

Quando você cria uma função de um modelo, vários arquivos são criados, incluindo um arquivo de configuração, function.json, e um arquivo de código-fonte, index.js.

Você pode criar ou editar funções para seu aplicativo de funções selecionando Funções na categoria Funções no menu Aplicativo de Funções.

Quando você seleciona uma função que você criou em seu aplicativo de funções, o painel Função é aberto. Ao selecionar Código + Teste no menu Função, você tem acesso às ações na barra de comandos para testar e executar o código, para salvar ou descartar as alterações feitas ou para obter a URL publicada. Ao selecionar Testar/Executar na barra de comandos, você pode executar casos de uso para solicitações que incluem cadeias de caracteres de consulta e valores. O caminho da função acima da caixa de código exibe o nome do arquivo que está aberto. Você pode selecionar um arquivo específico no menu suspenso para testar ou editar, por exemplo, function.json.

Screenshot of the function code and test editor showing the expanded Test/Run view, with menu options highlighted.

Na imagem anterior, o painel do lado direito tem as guias Entrada e Saída. Selecionar a guia Entrada permite que você crie e teste a função adicionando parâmetros de consulta e fornecendo valores para a cadeia de caracteres de consulta. A guia Saída exibe os resultados da solicitação.

Testar a função do Azure

Após criar uma função no portal, você deverá testá-la. Há duas abordagens:

  • Testes no portal
  • Como executar de modo manual

Testar no portal do Azure

O portal também oferece uma maneira conveniente de testar suas funções. Conforme descrito anteriormente na captura de tela anterior. Quando você seleciona Executar nesse painel, os resultados aparecem automaticamente na guia Saída e o painel Logs é aberto para exibir o status.

Executar a função de modo manual

É possível iniciar uma função disparando manualmente o gatilho configurado. Por exemplo, se você estiver usando um gatilho HTTP, poderá usar uma ferramenta, como o Postman ou o cURL, para iniciar uma solicitação HTTP à URL de ponto de extremidade da função, que está disponível na definição de função (Obter URL da função).

Monitoramento e painel do Application Insights

A capacidade de monitorar as funções é essencial durante o desenvolvimento e em produção. O portal do Azure fornece um painel de monitoramento, que você ativa habilitando a integração Application Insights. No menu Aplicativo de Funções, em Configurações, selecione Application Insights, selecione Ativar Application Insights e selecione Aplicar. Na caixa de diálogo, selecione Sim. O painel do Application Insights fornece uma forma rápida para exibir o histórico de operações de função exibindo o carimbo de data/hora, o código de resultado, a duração e a ID da operação, preenchidos pelo Application Insights.

Screenshot showing the HTTP function Application Insights dashboard with function results, corresponding HTTP status codes, and the Monitoring menu items highlighted.

Painel de logs de streaming

Depois de habilitar o Application Insights no portal do Azure, você pode adicionar instruções de log à sua função para depuração. Os métodos chamados para cada linguagem são passados para um objeto "registro em log", que pode ser usado para adicionar informações de log ao painel Logs no painel Código + Teste ao executar um teste.

Escreva em logs do código usando o método log no objeto context, que é passado para o manipulador. O exemplo a seguir grava no nível de log padrão (informações):

context.log('Enter your logging statement here');

Escreva em logs do código usando o cmdlet Write-Host, conforme mostrado no exemplo a seguir:

Write-Host "Enter your logging statement here"

Erros, falhas, avisos e anomalias

Use as Métricas ou as opções da categoria Investigar no menu Função para monitorar o desempenho, diagnosticar falhas ou configurar dezenas de pastas de trabalho predefinidas para gerenciar seu aplicativo de funções. Tudo, de erros de compilação e avisos no código às estatísticas de uso por função.