Compartilhar via


Práticas recomendadas para funções Azure confiáveis

Azure Functions é um serviço de computação sob demanda controlado por eventos que estende a plataforma de aplicativo Serviço de Aplicativo do Azure existente. Ele adiciona recursos para implementar o código disparado por eventos que ocorrem em Azure, em um serviço de parceiro e em sistemas locais. Usando o Functions, você pode criar soluções que se conectam a fontes de dados ou soluções de mensagens, o que facilita o processamento e a reação a eventos. As funções são executadas em Azure data centers, que são complexos com muitos componentes integrados. Em um ambiente de nuvem hospedado, espera-se que as VMs possam ocasionalmente reiniciar ou mover e as atualizações de sistemas ocorram. Os aplicativos de funções também provavelmente dependem de APIs externas, serviços de Azure e outros bancos de dados, que também são propensos à 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ê deve escolher um plano de hospedagem para seu aplicativo. O plano escolhido afeta o desempenho, a confiabilidade e o custo. Azure Functions fornece os seguintes planos de hospedagem:

Quando possível, use o plano de Consumo Flex para hospedar seus aplicativos de escala dinâmica.

No contexto da plataforma do Serviço de Aplicativo, o plano Premium que hospeda dinamicamente suas funções é o EP (plano Elástico Premium). Outros planos dedicados (Serviço de Aplicativo) são chamados de Premium. Para obter mais informações, consulte Azure Functions plano 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ância é gerenciada.
  • Os recursos disponíveis para cada instância do aplicativo de funções.
  • Suporte para funcionalidade avançada, como conectividade Rede Virtual do Azure.

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

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 obter mais informações, confira Plano de migração.

Configurar o armazenamento corretamente

As funções exigem que uma conta de armazenamento seja associada ao seu aplicativo de funções. O host do Functions usa a conexão da conta de armazenamento 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 obter mais informações, consulte as considerações de Storage para 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 a partir de um ponto de extremidade do Arquivos do Azure em sua conta de armazenamento ou dos servidores de arquivos associados às instâncias expandidas. Esse comportamento é controlado pelas seguintes configurações de aplicativo:

O plano Premium e o plano de consumo em Windows dão suporte a essas configurações. O plano de Consumo Flex não requer essas configurações e usa um contêiner de armazenamento de blobs para hospedar pacotes de implantação em vez de um compartilhamento do Arquivos do Azure.

Ao criar seu aplicativo de funções no portal do Azure ou usando CLI do Azure ou Azure PowerShell, você cria essas configurações para o aplicativo de funções quando necessário. Ao criar seus recursos a partir de um modelo do ARM (modelo de Azure Resource Manager), 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:

Importante

O serviço Arquivos do Azure atualmente não dá suporte a conexões baseadas em identidade. O plano de consumo flex dá suporte total às identidades gerenciadas. Para obter mais informações, consulte Criar um aplicativo sem Arquivos do Azure.

Configuração da conta de armazenamento

Ao criar um aplicativo de funções, você deve criar ou vincular a uma conta de Armazenamento do Azure de uso geral que dê suporte ao Armazenamento de Blobs, Filas e Tabelas. As funções dependem do armazenamento do Azure para operações como o gerenciamento de gatilhos e o registro em log das execuções da função. A cadeia de conexão da conta de armazenamento para seu aplicativo de funções é encontrada nas configurações do aplicativo AzureWebJobsStorage e WEBSITE_CONTENTAZUREFILECONNECTIONSTRING.

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. Esse aspecto é especialmente verdadeiro com funções disparadas por Durable Functions e Hubs de Eventos.

  • Para funções disparadas por Hubs de Eventos, não use uma conta com 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 obter mais informações, confira Montar compartilhamentos de arquivo.

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. Como você agrupa suas funções e aplicativos de funções pode afetar o desempenho, o dimensionamento, a configuração, a implantação e a segurança da 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, lembre-se de que a unidade de implantação para funções no Azure é o aplicativo de funções. Você implanta todas as funções em um aplicativo de funções ao mesmo tempo, geralmente no 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 implantado diretamente em um aplicativo de produção e não dispara uma reinicialização.
    • 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, especialmente para funções JavaScript com árvores de pacotes 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 obter mais informações, consulte gatilho de pré-aquecimento do Azure Functions.

  • Para minimizar o tempo de inatividade da implantação, utilize slots de implantação para os planos Consumption, Premium e Dedicated. Ou configure atualizações contínuas para implantações sem tempo de inatividade no Flex Consumption plan. Para obter mais informações, consulte Azure Functions slots de implementação e estratégias de atualização do site no Flex Consumption.

Escrever funções robustas

Siga os princípios de design que ajudam com o desempenho geral e a disponibilidade de suas funções. Esses princípios incluem:

Falhas transitórias são comuns na computação em nuvem, portanto, use um padrão de repetição ao acessar recursos baseados em nuvem. Muitos gatilhos e vinculações já implementam novas tentativa.

Priorize o teste de integração testando continuamente suas funções no contexto do aplicativo completo e em seus pipelines de automação de build.

Design para segurança

Considere a segurança durante a fase de planejamento, não depois que suas funções estiverem prontas. Para obter mais informações, consulte Securing Azure Functions.

Considerar a simultaneidade

À medida que a demanda pelo seu aplicativo de funções aumenta devido a eventos futuros, os planos Consumption e Premium escalam os aplicativos de funções. É importante entender como seu aplicativo de funções responde ao carregamento e como os gatilhos podem ser configurados para lidar com eventos de entrada. Para obter uma visão geral, consulte Escalo controlado por evento em Azure Functions.

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

Contagem de processos de trabalho

Em alguns casos, é mais eficiente lidar com a carga criando vários processos, chamados de processos de trabalho de idioma, na instância antes da expansão. A configuração de FUNCTIONS_WORKER_PROCESS_COUNT controla o número máximo de processos de trabalho de idioma permitidos. 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 é dimensionado 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), considere 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, entenda como os diferentes tipos de gatilhos processam eventos. Alguns gatilhos fornecem controle sobre comportamentos de processamento em lote e simultaneidade. Ajustar esses valores pode ajudar cada instância a ser dimensionada adequadamente para as demandas das funções invocadas. Você aplica essas opções de configuração a todos os gatilhos em um aplicativo de funções e as mantém no arquivo host.json do aplicativo. Para obter detalhes de configurações, consulte a seção Configuração da referência de gatilho específica.

Para saber mais sobre como o Functions processa fluxos de mensagens, consulte Azure Functions processamento de eventos confiáveis.

Planejar conexões

Aplicam-se limites de conexão a aplicativos funcionais executados no plano de Consumo. Esses limites se aplicam a cada instância. Devido a esses limites e como uma prática recomendada geral, otimize suas conexões de saída do código de função. Para obter mais informações, consulte 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 obter mais informações, veja Inicializações a frio. Se a inicialização a frio for uma preocupação para o seu cenário, consulte Compreendendo a inicialização a frio em ambientes sem servidor.

Recomenda-se tanto o plano Consumo Flexível quanto o plano Premium para reduzir os arranques a frio, mantendo a escalabilidade dinâmica. Use as diretrizes a seguir para reduzir as partidas a frio e melhorar a disponibilidade em todos os planos de hospedagem.

Plano Orientação
Plano de Consumo Flexível Usar instâncias sempre prontas para manter as instâncias em execução
Definir números de instâncias sempre disponíveis
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 Verificação de Saúde 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

Azure Functions oferece integração interna ao Aplicativo Azure Insights para monitorar a execução de suas funções e os rastreamentos gerados a partir do seu código. Para obter mais informações, consulte Monitorar execuções no Azure Functions. Azure Monitor também fornece recursos para monitorar a integridade do próprio aplicativo de funções. Para obter mais informações, consulte Monitor Azure Functions.

Lembre-se das seguintes considerações ao usar a integração do Application Insights para monitorar suas funções:

  • Remova a configuração do aplicativo AzureWebJobsDashboard . Essa configuração tinha suporte em versões mais antigas do Functions. A remoção do 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. Use a excludedTypes configuração para excluir determinados tipos da amostragem, como Request ou Exception. Para obter mais informações, confira Configurar amostragem.

Azure Functions também permite que você envie logs gerados pelo sistema e pelo usuário para o Azure Monitor Logs. A integração com Azure Monitor Logs está atualmente 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 críticas sempre em execução, consulte Reliability no Azure Functions.

Próximas etapas

Gerenciar seu aplicativo de funções