Práticas recomendadas para instâncias gerenciadas do Lambda - AWS Lambda

Práticas recomendadas para instâncias gerenciadas do Lambda

Configuração do provedor de capacidade

Separe os provedores de capacidade por nível de confiança. Crie diferentes provedores de capacidade para workloads com diferentes requisitos de segurança. Todas as funções atribuídas ao mesmo provedor de capacidade devem ser mutuamente confiáveis, pois os provedores de capacidade servem como o limite de segurança.

Use nomes descritivos. Nomeie os provedores de capacidade para indicar claramente o uso pretendido e o nível de confiança (por exemplo, production-trusted, dev-sandbox). Isso ajuda as equipes a entenderem o propósito e a postura de segurança de cada provedor de capacidade.

Use várias zonas de disponibilidade. Especifique sub-redes dentre várias zonas de disponibilidade ao criar provedores de capacidade. O Lambda inicia três instâncias por padrão para resiliência de zona de disponibilidade, garantindo alta disponibilidade para suas funções.

Seleção do tipo de instância

Deixe o Lambda escolher os tipos de instância. Por padrão, o Lambda escolhe os melhores tipos de instância para sua workload. Recomendamos que as instâncias gerenciadas do Lambda escolham os tipos de instância para você, pois restringir o número de tipos de instância possíveis pode resultar em menor disponibilidade.

Especifique os tipos de instância para requisitos específicos. Se você tiver requisitos específicos de hardware, defina os tipos de instância permitidos em uma lista de instâncias compatíveis. Por exemplo:

  • Para aplicações que exijam alta largura de banda da rede, selecione vários tipos de instâncias n.

  • Para ambientes de teste ou desenvolvimento com restrições de custo, escolha tipos de instância menores, como a m7a.large

Configuração da função

Escolha as configurações apropriadas de memória e vCPU. Selecione configurações de memória e vCPU que ofereçam suporte a execuções multissimultâneas da sua função. O tamanho mínimo de função com suporte é de 2 GB e 1 vCPU.

  • Para aplicações em Python, escolha uma proporção maior de memória para vCPUs (como 4 para 1 ou 8 para 1) devido à forma como o Python lida com a multissimultaneidade

  • Para operações intensivas de CPU ou funções que executem pouca E/S, escolha mais de uma vCPU

  • Para aplicações com alto nível de E/S, como serviços da Web ou trabalhos em lote, a multissimultaneidade oferece o maior benefício

Configure a simultaneidade máxima de forma adequada. O Lambda escolhe padrões sensatos para a simultaneidade máxima que equilibram o consumo de recursos e o throughput. Ajuste essa configuração com base no uso de recursos da sua função:

  • Aumente a simultaneidade máxima (até 64 por vCPU) se as suas invocações de função usarem muito pouca CPU

  • Reduza a simultaneidade máxima se a sua aplicação consumir uma grande quantidade de memória e muito pouca CPU

Observe que ambientes de execução com simultaneidade muito baixa podem apresentar controles de utilização e dificuldade de escalabilidade.

Scaling configuration (Configuração de escalabilidade)

Defina a meta apropriada de utilização dos recursos. Por padrão, o Lambda mantém espaço suficiente para que seu tráfego dobre em 5 minutos sem controles de utilização. Ajuste isso com base nas características da sua workload:

  • Para workloads muito estáveis ou aplicações que não sejam sensíveis a controles de utilização, defina a meta em um nível alto para obter maior utilização e custos mais baixos

  • Para workloads com possíveis picos de tráfego, defina metas de recursos em um nível baixo para manter mais espaço livre

Planeje o crescimento do tráfego. Se seu tráfego mais do que dobrar em 5 minutos, será possível ver controles de utilização quando o Lambda aumentar a escala verticalmente das instâncias e ambientes de execução. Projete sua aplicação para lidar com possíveis controles de utilização durante períodos rápidos de aumento da escala verticalmente.

Segurança

Aplique o privilégio mínimo às permissões do PassCapacityProvider. Conceda permissões lambda:PassCapacityProvider somente para os provedores de capacidade necessários. Use permissões em nível de recurso para restringir quais provedores de capacidade os usuários podem atribuir às funções.

Monitore o uso do provedor de capacidade. Use o AWS CloudTrail para monitorar as atribuições e os padrões de acesso do provedor de capacidade. Isso ajuda a identificar tentativas de acesso não autorizado e garante a conformidade com as políticas de segurança.

Separe as workloads não confiáveis. Não confie em contêineres para isolamento de segurança entre workloads não confiáveis. Use diferentes provedores de capacidade para separar workloads que não sejam mutuamente confiáveis.

Otimização de custos

Aproveite as opções de preços do EC2. Aproveite os Savings Plans e as instâncias reservadas do EC2 para reduzir custos. Essas opções de preços se aplicam à computação subjacente do EC2 (a taxa de gerenciamento de 15% não é descontada).

Otimize para workload em estado fixo. As instâncias gerenciadas do Lambda são mais adequadas para funções de estado fixo com tráfego previsível de alto volume. Para padrões de tráfego intermitente, o Lambda (padrão) pode ser mais econômico.

Monitore a utilização dos recursos. Acompanhe as métricas do CloudWatch para entender a utilização da CPU e da memória. Ajuste a alocação de memória da função e a seleção do tipo de instância com base nos padrões reais de uso para otimizar os custos.

Monitoramento e observabilidade

Monitore as métricas do provedor de capacidade. Acompanhe as métricas no nível do provedor de capacidade, incluindo CPUUtilization, MemoryUtilization, vCPUAvailable e MemoryAvailable para garantir que recursos suficientes estejam disponíveis para suas workloads.

Monitore as métricas do ambiente de execução. Acompanhe as métricas no nível do ambiente de execução, incluindo ExecutionEnvironmentConcurrency e ExecutionEnvironmentConcurrencyLimit, para entender o comportamento de escalabilidade e identificar possíveis controles de utilização.

Defina alarmes do CloudWatch. Crie alarmes do CloudWatch para as principais métricas para identificar problemas de forma proativa:

  • Alta utilização de CPU ou memória

  • Baixa capacidade disponível

  • Aproximando-se dos limites de simultaneidade

Considerações específicas do runtime

Siga as práticas recomendadas específicas para o runtime. Cada runtime lida com a multissimultaneidade de forma diferente. Consulte os guias específicos do runtime para obter recomendações detalhadas:

  • Java: use coleções com threads seguras, AtomicInteger e ThreadLocal para o estado específico da solicitação

  • Node.js: use o InvokeStore para todos os estados específicos da solicitação e evite variáveis globais

  • Python: use nomes de arquivo exclusivos em /tmp com IDs de solicitação e considere o isolamento de memória baseado em processos

Teste a segurança da thread e problemas de simultaneidade. Antes de implantar na produção, teste minuciosamente suas funções quanto a problemas de segurança da thread, condições de corrida e isolamento de estado adequado sob carga simultânea.

Próximas etapas