Práticas recomendadas para uso confiável do Azure Functions

O Azure Functions consistem em uma experiência de computação sob demanda controlada por eventos que estende a plataforma de aplicativos existente do Serviço de Aplicativo do Azure com recursos para implementação de código disparados por eventos que estão ocorrendo em outros serviços do Azure, serviços de terceiros e sistemas locais. O Functions permite que você crie soluções conectando-se a fontes de dados ou soluções de mensagens, o que facilita o processamento e a reação a eventos. O Functions é executado em data centers do Azure, que são complexos com muitos componentes integrados. Em um ambiente de nuvem hospedado, espera-se que as VMs possam reiniciar ou serem movidas de vez em quando e que ocorram atualizações de sistemas. Seus aplicativos de funções também provavelmente dependem de APIs externas, Serviços do Azure e outros bancos de dados, que também são propensos a não confiabilidade periódica.

Este artigo detalha algumas práticas recomendadas para projetar e implantar aplicativos de funções eficientes que permanecem íntegras e funcionam bem em um ambiente baseado em nuvem.

Escolher o plano de hospedagem correto

Ao criar um aplicativo de funções no Azure, você precisa escolher um plano de hospedagem para o aplicativo. O plano escolhido tem um efeito sobre o desempenho, a confiabilidade e o custo. Há três plano de hospedagem básicos disponíveis para o Functions:

Todos os planos de hospedagem estão em disponibilidade geral (GA) ao executar o Linux ou Windows.

No contexto da plataforma do Serviço de Aplicativo, o plano Premium usado para hospedar dinamicamente suas funções é o plano de Premium elástico (EP). Há outros planos dedicados (Serviço de Aplicativo) chamados Premium. Para saber mais, confira o artigoPlano Premium.

O plano de hospedagem que você escolher ditará os seguintes comportamentos:

  • Como seu aplicativo de funções é dimensionado com base na demanda e como a alocação de instâncias é gerenciada.
  • Os recursos disponíveis para cada instância do aplicativo de funções.
  • Suporte para funcionalidades avançadas, como conectividade à Rede Virtual do Azure.

Para saber mais sobre como escolher o plano de hospedagem correto e para obter uma comparação detalhada entre os planos, consulte opções de hospedagem do Azure Functions.

É importante que você escolha o plano correto ao criar seu aplicativo de funções. O Functions fornece uma capacidade limitada de alternar seu plano de hospedagem, principalmente entre o planos Consumo e Premium elásticos. Para saber mais, confira Planejar a migração.

Configurar o armazenamento corretamente

As funções exigem que uma conta de armazenamento seja associada ao seu aplicativo de funções. A conexão da conta de armazenamento é usada pelo host do Functions para operações como gerenciamento de gatilhos e execuções de função de registro em log. Ele também é usado ao dimensionar dinamicamente aplicativos de funções. Para saber mais, vejaConsiderações de armazenamento do Azure Functions.

Uma conta de armazenamento ou sistema de arquivos configurado incorretamente em seu aplicativo de funções pode afetar o desempenho e a disponibilidade de suas funções. Para ajudar a solucionar problemas de uma conta de armazenamento configurada incorretamente, consulte o artigo solução de problemas de armazenamento.

Configurações de conexão do armazenamento

Os aplicativos de funções que são dimensionados dinamicamente podem ser executados de um ponto de extremidade do Arquivos do Azure em sua conta de armazenamento ou dos servidores de arquivos associados às suas instâncias escalonadas. Esse comportamento é controlado pelas seguintes configurações de aplicativo:

Essas configurações só têm suporte quando você está executando em um plano Premium ou em um plano de Consumo no Windows.

Quando você cria seu aplicativo de funções no portal do Azure ou usando a CLI do Azure ou Azure PowerShell, essas configurações são criadas para seu aplicativo de funções quando necessário. Ao criar seus recursos de um modelo do Azure Resource Manager (modelo do ARM), você também precisa incluir WEBSITE_CONTENTAZUREFILECONNECTIONSTRING no modelo.

Em sua primeira implantação usando um modelo do ARM, não inclua WEBSITE_CONTENTSHARE, que é gerado para você.

Você pode usar os seguintes exemplos de modelo do ARM para ajudar a definir corretamente essas configurações:

Configuração da conta de armazenamento

Quando você cria um aplicativo de funções, é necessário criar ou vincular uma conta de armazenamento do Azure de uso geral que oferece suporte ao armazenamento de Tabelas, Blobs e Filas. Isso ocorre porque o Functions usa o Armazenamento do Azure para operações como gerenciamento de gatilhos e log de execuções de função. A cadeia de conexão da conta de armazenamento para seu aplicativo de funções é encontrada nas AzureWebJobsStorage configurações WEBSITE_CONTENTAZUREFILECONNECTIONSTRING do aplicativo.

Tenha em mente as seguintes considerações ao criar essa conta de armazenamento:

  • Para reduzir a latência, crie a conta de armazenamento na mesma região que o aplicativo de funções.

  • Use uma conta de armazenamento separada para cada aplicativo de funções para maximizar o desempenho na produção. Isso é particularmente verdadeiro com Durable Functions e funções disparadas pelo Hub de Eventos.

  • Para funções disparadas pelo Hub de Eventos, não use uma conta com o Data Lake Storage habilitado.

Gerenciando conjuntos de dados grandes

Ao executar no Linux, você pode adicionar armazenamento extra montando um compartilhamento de arquivos. Montar um compartilhamento é uma maneira conveniente para uma função processar um grande conjunto de dados existente. Para saber mais, confira Montar compartilhamentos de arquivos.

Organizar suas funções

Como parte de sua solução, você provavelmente desenvolverá e publicará várias funções. Essas funções geralmente são combinadas em um único aplicativo de funções, mas também podem ser executadas em aplicativos de funções separados. Nos planos de hospedagem Premium e Dedicado (Serviço de aplicativo), vários aplicativos de funções também podem compartilhar os mesmos recursos executando no mesmo plano. A forma como você agrupa suas funções e seus aplicativos de função pode afetar o desempenho, o dimensionamento, a configuração, a implantação e a segurança de sua solução geral.

Para Consumo e Premium, todas as funções em um aplicativo de funções são dinamicamente dimensionadas juntas.

Para obter mais informações sobre como organizar suas funções, consulte Melhores recomendadas na organização de funções.

Otimizar implantações

Ao implantar um aplicativo de funções, é importante ter em mente que a unidade de implantação para funções no Azure é o aplicativo de funções. Todas as funções em um aplicativo de funções são implantadas ao mesmo tempo, geralmente do mesmo pacote de implantação.

Considere estas opções para uma implantação bem-sucedida:

  • Fazer com que suas funções executem no pacote de implantação. Essa abordagem de executar do pacote oferece os seguintes benefícios:

    • Reduz o risco de problemas de bloqueio de cópia de arquivo.
    • Pode ser implantada diretamente em um aplicativo de produção, o que dispara uma reinicialização.
    • Saber que todos os arquivos no pacote estão disponíveis para seu aplicativo.
    • Melhora o desempenho das implantações de modelo do ARM.
    • Pode reduzir os tempos de inicialização a frio, particularmente para as funções de JavaScript com árvores de pacote npm grandes.
  • Considere usar a implantação contínua para conectar implantações à sua solução de controle do código-fonte. As implantações contínuas também permitem que você execute no pacote de implantação.

  • Para o Plano Premium de hospedagem, considere adicionar um gatilho de aquecimento para reduzir a latência quando novas instâncias forem adicionadas. Para saber mais, consulte Gatilhos de evento de aquecimento do Azure Functions.

  • Para minimizar o tempo de inatividade da implantação e ser capaz de reverter implantações, considere o uso de Slots de implantação. Para saber mais, veja Slots de implantação do Azure Functions.

Escrever funções robustas

Há vários princípios de design que você pode seguir ao escrever seu código de função, que ajudam com o desempenho geral e a disponibilidade de suas funções. Esses princípios incluem:

Como as falhas transitórias são comuns na computação em nuvem, você deve usar um padrão de nova tentativa ao acessar recursos baseados em nuvem. Muitos gatilhos e vinculações já implementam novas tentativa.

Design para segurança

A segurança é melhor considerada durante a fase de planejamento, e não depois que suas funções estão prontas para começar. Para saber como desenvolver e implantar funções com segurança, consulte Protegendo o Azure Functions.

Considerar a simultaneidade

À medida que a demanda se baseia em seu aplicativo de funções como resultado de eventos de entrada, os aplicativos de funções em execução nos planos Consumo e Premium são escalados. É importante entender como seu aplicativo de funções responde à carga e como os gatilhos podem ser configurados para lidar com eventos de entrada. Para obter mais informações, consulte Dimensionamento controlado por eventos no Azure Functions.

Os planos Dedicados (Serviço de Aplicativo) exigem que você forneça o dimensionamento de seus aplicativos de funções.

Contagem de processos de trabalho

Em alguns casos, é mais eficiente lidar com a carga criando vários processos, chamados processos de trabalho de linguagem, na instância antes da expansão. O número máximo de processos de trabalho de idioma permitidos é controlado pela configuraçãoFUNCTIONS_WORKER_PROCESS_COUNT. O padrão para essa configuração é 1, o que significa que vários processos não são usados. Depois que o número máximo de processos é atingido, o aplicativo de funções é expandido para mais instâncias para lidar com a carga. Essa configuração não se aplica a funções de biblioteca de classes C#, que são executados no processo de host.

Ao usar FUNCTIONS_WORKER_PROCESS_COUNT em um plano Premium ou plano Dedicado (Serviço de Aplicativo), tenha em mente o número de núcleos fornecidos pelo seu plano. Por exemplo, o plano Premium EP2 fornece dois núcleos, portanto, você deve começar com um valor de 2 e aumentar em dois conforme necessário, até o máximo.

Configuração de gatilho

Ao planejar a taxa de transferência e o dimensionamento, é importante entender como os diferentes tipos de gatilhos processam eventos. Alguns gatilhos permitem que você controle os comportamentos de lote e gerencie a simultaneidade. Geralmente, ajustar os valores nessas opções pode ajudar a escalar cada instância adequadamente para as demandas das funções invocadas. Essas opções de configuração são aplicadas a todos os gatilhos em um aplicativo de funções e são mantidas no arquivo host.json para o aplicativo. Consulte a seção Configuração da referência de gatilho específica para obter detalhes de configurações.

Para saber mais sobre como o Functions processa fluxos de mensagens, confira Processamento de eventos confiáveis no Azure Functions.

Planejar conexões

Os aplicativos de funções em execução noPlano de consumo estão sujeitos a limites de conexão. Esses limites são aplicados por instância. Devido a esses limites e como uma melhor prática geral, você deve otimizar suas conexões de saída do código de função. Para saber mais, confira Gerenciar conexões no Azure Functions.

Considerações específicas de linguagens

Para sua linguagem de escolha, tenha em mente as seguintes considerações:

Maximizar a disponibilidade

O início frio é uma consideração importante para arquiteturas sem servidor. Para saber mais, confira Inicia a frio. Se o início frio for uma preocupação para seu cenário, você poderá se aprofundar na postagem Noções básicas sobre o início frio sem servidor.

O plano Premium é o plano recomendado para reduzir as iniciações a frio e, ao mesmo tempo, manter a escala dinâmica. Você pode usar as diretrizes a seguir para reduzir as iniciações a frio e melhorar a disponibilidade em todos os três planos de hospedagem.

Plano Diretrizes
Plano Premium Implementar um gatilho de aquecimento em seu aplicativo de funções
Definir os valores para instâncias Always-Ready e o limite máximo de intermitência
Usar o suporte a gatilhos de rede virtual ao usar gatilhos não HTTP em uma rede virtual
Planos dedicados Executar em pelo menos duas instâncias com a verificação de integridade do Serviço de Aplicativo do Azure habilitada
Implementar o dimensionamento automático
Plano de consumo • Revise o uso de padrões Singleton e as configurações de simultaneidade para vinculações e gatilhos a fim de evitar colocar limites artificialmente em como seu aplicativo de funções é dimensionado.
Revise a functionAppScaleLimit configuração, que pode limitar a expansão
• Verifique se há um limite de cota de uso diário (GB-seg) definido durante o desenvolvimento e o teste. Considere remover esse limite em ambientes de produção.

Monitorar com eficiência

O Azure Functions oferece integração interna com o Azure Applicatio Insights para monitorar a execução da função e os rastreamentos gravados do seu código. Para saber mais, consulte Monitorar Azure Functions. O Azure Monitor também fornece recursos para monitorar a saúde do próprio aplicativo de funções. Para saber mais, confira Monitoramento com o Azure Monitor.

Você deve estar ciente das seguintes considerações ao usar a integração do Application Insights para monitorar suas funções:

  • Certifique-se de que a configuração do aplicativo AzureWebJobsDashboard foi removida. Essa configuração era suportada na versão mais antiga do Functions. Se ela existir, a remoção AzureWebJobsDashboard melhora o desempenho de suas funções.

  • Revisar os logs do Application Insights. Se os dados que você espera encontrar estão ausentes, considere ajustar as configurações de amostragem para capturar melhor o cenário de monitoramento. Você pode usar a excludedTypes configuração para excluir determinados tipos da amostragem, como Request ou Exception. Para obter mais informações, consulte Configurar amostragem.

O Azure Functions também permite que você envie logs gerados pelo sistema e pelo usuário para o Logs do Azure Monitor. Atualmente, a integração aos Logs do Azure Monitor está em versão prévia.

Criar em redundância

Suas necessidades de negócios talvez exijam que suas funções sempre estejam disponíveis, mesmo quando um data center estiver indisponível. Para saber como usar uma abordagem multi-regional para manter suas funções importantes sempre em execução, consulte a recuperação de desastre geográfica e alta disponibilidade do Azure Functions.

Próximas etapas

Gerenciar seu aplicativo de funções