Análise detalhada do AWS Lambda

A tradução do artigo foi elaborada especificamente para os alunos do curso "Serviços na nuvem". Interessado em desenvolver nessa direção? Assista à master class de Egor Zuev (TeamLead na InBit) "Serviço AWS EC2" e junte-se ao próximo grupo de cursos: começa em 26 de setembro.

Análise detalhada do AWS Lambda

Mais pessoas estão migrando para o AWS Lambda em busca de escalabilidade, desempenho, economia e capacidade de lidar com milhões ou até trilhões de solicitações por mês. Para fazer isso, não é necessário gerenciar a infraestrutura na qual o serviço é executado. E o escalonamento automático permite atender milhares de solicitações simultâneas por segundo. Acho que o AWS Lambda pode ser considerado um dos serviços AWS mais populares.

AWS Lambda

AWS Lambda é um serviço de computação sem servidor orientado a eventos que permite executar código sem provisionar ou gerenciar servidores e estender outros serviços da AWS usando lógica personalizada. O Lambda responde automaticamente a vários eventos (chamados de gatilhos), como solicitações HTTP por meio do Amazon API Gateway, alterações em dados em buckets do Amazon S3 ou tabelas do Amazon DynamoDB; ou você pode executar seu código por meio de chamadas de API usando o SDK da AWS e transições de estado no AWS Step Functions.

Lambda executa código em uma infraestrutura de computação altamente disponível e é totalmente responsável pela administração da plataforma subjacente, incluindo manutenção de servidores e sistemas operacionais, provisionamento de recursos, escalonamento automático, monitoramento de código e registro em log. Ou seja, basta fazer o upload do seu código e configurar como e quando ele deve ser executado. Por sua vez, o serviço cuidará do seu lançamento e garantirá alta disponibilidade da sua aplicação.

Quando mudar para Lambda?

AWS Lambda é uma plataforma de computação conveniente, adequada para uma variedade de casos de uso, desde que a linguagem e o tempo de execução do seu código sejam suportados pelo serviço. Se você deseja se concentrar em seu código e lógica de negócios enquanto terceiriza a manutenção, o provisionamento e o dimensionamento do servidor a um custo razoável, o AWS Lambda é definitivamente o caminho a seguir.

O Lambda é ideal para criar interfaces de programação e, quando usado em conjunto com o API Gateway, você pode reduzir significativamente os custos e chegar ao mercado com mais rapidez. Existem diferentes maneiras de usar funções Lambda e opções para organizar uma arquitetura sem servidor - todos podem escolher algo adequado com base em seu objetivo.

Lambda permite que você execute uma ampla variedade de tarefas. Assim, graças ao suporte do CloudWatch, você pode criar tarefas adiadas e automatizar processos individuais. Não há restrições quanto à natureza e intensidade de utilização do serviço (são levados em consideração o consumo de memória e o tempo), e nada impede que você trabalhe sistematicamente em um microsserviço completo baseado em Lambda.

Aqui você pode criar ações orientadas a serviços que não são executadas continuamente. Um exemplo típico é o dimensionamento de imagens. Mesmo no caso de sistemas distribuídos, as funções Lambda permanecem relevantes.

Portanto, se você não quiser lidar com a alocação e gerenciamento de recursos de computação, experimente o AWS Lambda; se você não precisar de cálculos pesados ​​e que consomem muitos recursos, experimente também o AWS Lambda; se o seu código for executado periodicamente, isso mesmo, você deve tentar o AWS Lambda.

segurança

Até o momento não há reclamações sobre segurança. Por outro lado, como muitos dos processos internos e recursos de implementação deste modelo estão ocultos ao usuário do ambiente de tempo de execução gerenciado AWS Lambda, algumas regras geralmente aceitas de segurança na nuvem tornam-se irrelevantes.

Como a maioria dos serviços da AWS, o Lambda é fornecido em uma base compartilhada de segurança e conformidade entre a AWS e o cliente. Este princípio reduz a carga operacional do cliente, uma vez que a AWS assume as tarefas de manutenção, administração e monitoramento dos componentes do serviço – desde o sistema operacional host e a camada de virtualização até a segurança física dos ativos de infraestrutura.

Falando especificamente sobre AWS Lambda, a AWS é responsável por gerenciar a infraestrutura subjacente, os serviços subjacentes associados, o sistema operacional e a plataforma de aplicativos. Enquanto o cliente é responsável pela segurança do seu código, armazenando dados confidenciais, controlando o acesso ao mesmo, bem como ao serviço e recursos Lambda (Identity and Access Management, IAM), inclusive dentro dos limites das funções utilizadas.

O diagrama abaixo mostra o modelo de responsabilidade compartilhada aplicado ao AWS Lambda. A responsabilidade da AWS é laranja e a responsabilidade do cliente é azul. Como você pode ver, a AWS assume mais responsabilidade pelos aplicativos implantados no serviço.

Análise detalhada do AWS Lambda

Modelo de responsabilidade compartilhada aplicável ao AWS Lambda

Tempo de execução do Lambda

A principal vantagem do Lambda é que ao realizar uma função em seu nome, o próprio serviço aloca os recursos necessários. Você pode evitar perder tempo e esforço na administração do sistema e focar na lógica de negócios e na codificação.

O serviço Lambda é dividido em dois planos. O primeiro é o plano de controle. Segundo a Wikipedia, o plano de controle é a parte da rede responsável pelo transporte do tráfego de sinalização e roteamento. É o principal componente que toma decisões globais sobre provisionamento, manutenção e distribuição de cargas de trabalho. Além disso, o plano de controle atua como topologia de rede do provedor de soluções, responsável pelo roteamento e gerenciamento do tráfego.

O segundo plano é o plano de dados. Tal como o plano de controlo, tem as suas próprias tarefas. O plano de controle fornece APIs para gerenciar funções (CreateFunction, UpdateFunctionCode) e controla como o Lambda se comunica com outros serviços da AWS. O plano de dados controla a API Invoke, que executa funções Lambda. Depois que uma função é chamada, o plano de controle aloca ou seleciona um ambiente de tempo de execução existente que está pré-preparado para essa função e, em seguida, executa o código nele.

O AWS Lambda oferece suporte a diversas linguagens de programação, incluindo Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 e outras, por meio de seus respectivos ambientes de tempo de execução. A AWS os atualiza regularmente, distribui patches de segurança e realiza outras atividades de manutenção nesses ambientes. O Lambda também permite que você use outras linguagens, desde que você mesmo implemente o tempo de execução apropriado. E então você terá que cuidar de sua manutenção, inclusive monitorando sua segurança.

Como tudo funciona e como o serviço desempenhará suas funções?

Cada função é executada em um ou mais ambientes dedicados, que existem apenas durante a vida daquela função e são então destruídos. Cada ambiente faz apenas uma chamada por vez, mas ela é reutilizada se houver diversas chamadas seriais para a mesma função. Todos os ambientes de tempo de execução são executados em máquinas virtuais com virtualização de hardware – as chamadas microVMs. Cada microVM é atribuído a uma conta AWS específica e pode ser reutilizado por ambientes para executar diferentes funções dentro dessa conta. MicroVMs são empacotados em blocos de construção da plataforma de hardware Lambda Worker, que pertence e é operada pela AWS. O mesmo tempo de execução não pode ser usado por funções diferentes, nem os microVMs são exclusivos para diferentes contas da AWS.

Análise detalhada do AWS Lambda

Modelo de isolamento AWS Lambda

O isolamento de ambientes de tempo de execução é implementado usando vários mecanismos. No nível superior de cada ambiente existem cópias separadas dos seguintes componentes:

  • Código de função
  • Quaisquer camadas do Lambda selecionadas para a função
  • Ambiente de execução de função
  • Espaço mínimo de usuário baseado no Amazon Linux

Os seguintes mecanismos são usados ​​para isolar diferentes ambientes de execução:

  • cgroups - limita o acesso à CPU, memória, armazenamento e recursos de rede para cada ambiente de execução;
  • namespaces - agrupando IDs de processos, IDs de usuários, interfaces de rede e outros recursos gerenciados pelo kernel Linux. Cada tempo de execução é executado em seu próprio namespace;
  • seccomp-bpf - restringe as chamadas de sistema que podem ser usadas em tempo de execução;
  • iptables e tabelas de roteamento - isolamento de ambientes de execução uns dos outros;
  • chroot - fornece acesso limitado ao sistema de arquivos subjacente.

Combinados com tecnologias de isolamento proprietárias da AWS, esses mecanismos garantem uma separação confiável do tempo de execução. Os ambientes isolados desta forma não podem acessar ou modificar dados de outros ambientes.

Embora vários tempos de execução da mesma conta da AWS possam ser executados em uma única microVM, sob nenhuma circunstância as microVMs podem ser compartilhadas entre diferentes contas da AWS. AWS Lambda usa apenas dois mecanismos para isolar microVMs: instâncias EC2 e Firecracker. O isolamento de convidados no Lambda baseado em instâncias EC2 existe desde 2015. Firecracker é um novo hipervisor de código aberto projetado especificamente pela AWS para cargas de trabalho sem servidor e lançado em 2018. O hardware físico que executa microVMs é compartilhado entre cargas de trabalho em contas diferentes.

Salvando ambientes e estados de processos

Embora os tempos de execução do Lambda sejam exclusivos para funções diferentes, eles podem chamar a mesma função repetidamente, o que significa que o tempo de execução pode sobreviver por várias horas antes de ser destruído.

Cada tempo de execução do Lambda também possui um sistema de arquivos gravável acessível por meio do diretório /tmp. Seu conteúdo não pode ser acessado de outros tempos de execução. No que diz respeito à persistência do estado do processo, os arquivos gravados em /tmp existem durante todo o ciclo de vida do ambiente de tempo de execução. Isso permite que os resultados de múltiplas chamadas sejam acumulados, o que é especialmente útil para operações caras, como carregar modelos de aprendizado de máquina.

Transferência de dados de chamadas

A API Invoke pode ser usada em dois modos: modo de evento e modo de solicitação-resposta. No modo evento, a chamada é adicionada a uma fila para execução posterior. No modo solicitação-resposta, a função é chamada instantaneamente com a carga fornecida, após a qual a resposta é retornada. Em ambos os casos, a função é executada em um ambiente Lambda, mas com caminhos de carga diferentes.

Durante chamadas de solicitação-resposta, a carga flui de uma API de processamento de solicitação (API Caller), como AWS API Gateway ou AWS SDK, para o balanceador de carga e, em seguida, para o serviço de chamada Lambda (Invoke Service). Este último determina o ambiente apropriado para executar a função e passa a carga para lá para completar a chamada. O balanceador de carga recebe tráfego protegido por TLS pela Internet. O tráfego dentro do serviço Lambda (após o balanceador de carga) passa por uma VPC interna em uma região específica da AWS.

Análise detalhada do AWS Lambda

Modelo de processamento de chamadas AWS Lambda: modo solicitação-resposta

As chamadas de eventos podem ser feitas imediatamente ou adicionadas a uma fila. Em alguns casos, a fila é implementada usando o Amazon SQS (Amazon Simple Queue Service), que passa chamadas para o serviço de atendimento de chamadas Lambda por meio de um processo de pesquisa interno. O tráfego transmitido é protegido por TLS e não há criptografia adicional de dados armazenados no Amazon SQS.

As chamadas de evento não retornam respostas — o Lambda Worker simplesmente ignora qualquer informação de resposta. Chamadas baseadas em eventos do Amazon S3, Amazon SNS, CloudWatch e outras fontes são processadas pelo Lambda no modo de evento. Chamadas de streams do Amazon Kinesis e DynamoDB, filas SQS, Application Load Balancer e chamadas do API Gateway são processadas de maneira solicitação-resposta.

Monitoramento

Você pode monitorar e auditar funções do Lambda usando vários mecanismos e serviços da AWS, incluindo os seguintes.

Amazon CloudWatch
Coleta diversas estatísticas, como o número de solicitações, a duração das solicitações e o número de solicitações que falharam.

Amazon CloudTrail
Permite registrar, monitorar continuamente e manter informações de atividades de conta associadas à sua infraestrutura AWS. Você terá um histórico completo de ações realizadas usando o AWS Management Console, o AWS SDK, ferramentas de linha de comando e outros serviços da AWS.

Raio-X da AWS
Fornece visibilidade completa de todos os estágios do processamento de solicitações em seu aplicativo com base em um mapa de seus componentes internos. Permite analisar aplicações durante o desenvolvimento e em ambientes de produção.

Configuração da AWS
Você será capaz de rastrear alterações na configuração da função Lambda (incluindo exclusão) e tempos de execução, tags, nomes de manipuladores, tamanho de código, alocação de memória, configurações de tempo limite e configurações de simultaneidade, bem como função de execução Lambda IAM, sub-redes e ligações de grupos de segurança .

Conclusão

O AWS Lambda oferece um conjunto poderoso de ferramentas para criar aplicativos seguros e escaláveis. Muitas das práticas de segurança e conformidade no AWS Lambda são as mesmas de outros serviços da AWS, embora haja exceções. Desde março de 2019, o Lambda está em conformidade com SOC 1, SOC 2, SOC 3, PCI DSS, conformidade com a Lei de Portabilidade e Responsabilidade de Seguros de Saúde (HIPAA) e outras regulamentações. Portanto, quando você estiver pensando em implementar sua próxima aplicação, considere o serviço AWS Lambda – ele pode ser o mais adequado para sua tarefa.

Fonte: habr.com

Adicionar um comentário