Execuções do Lambda
Quando o Lambda executa uma função em seu nome, ele gerencia o provisionamento e a configuração dos sistemas subjacentes necessários para executar seu código. Isso permite que seus desenvolvedores se concentrem na lógica de negócios e na escrita de código, não administrando e gerenciando sistemas subjacentes.
O serviço Lambda é dividido no ambiente de gerenciamento e no plano de dados. Cada ambiente serve a um propósito distinto no serviço. O ambiente de gerenciamento fornece as APIs de gerenciamento (por exemplo, CreateFunction
, UpdateFunctionCode
, PublishLayerVersion
e assim por diante) e gerencia integrações com todos os serviços da AWS. As comunicações com o ambiente de gerenciamento do Lambda são protegidas em trânsito pelo TLS. Todos os dados do cliente armazenados no ambiente de gerenciamento do Lambda são criptografados em repouso por meio do uso do AWS KMS, que foi projetado para protegê-los contra divulgação não autorizada ou adulteração.
O plano de dados é a API Invoke do Lambda que aciona a invocação de funções do Lambda. Quando uma função do Lambda é invocada, o plano de dados aloca um ambiente de execução em um operador do AWS Lambda (ou simplesmente operador, um tipo de instância do Amazon EC2
Ambientes de execução do Lambda
Cada invocação é roteada pelo serviço de invocação do Lambda para um ambiente de execução em um operador capaz de atender à solicitação. Além do plano de dados, os clientes e outros usuários não podem iniciar diretamente comunicações de rede de entrada com um ambiente de execução. Isso ajuda a garantir que as comunicações com o ambiente de execução sejam autenticadas e autorizadas.
Os ambientes de execução são reservados para uma versão de função específica e não podem ser reutilizados entre versões de função, funções ou contas da AWS. Isso significa que uma única função que pode ter duas versões diferentes resultaria em pelo menos dois ambientes de execução exclusivos.
Cada ambiente de execução só pode ser usado para uma invocação simultânea por vez, e eles podem ser reutilizados em várias invocações da mesma versão de função por motivos de performance. Dependendo de vários fatores (por exemplo, taxa de invocação, configuração de função e assim por diante), um ou mais ambientes de execução podem existir para determinada versão da função. Com essa abordagem, o Lambda é capaz de fornecer isolamento no nível da versão da função para seus clientes.
No momento, o Lambda não isola invocações dentro do ambiente de execução de uma versão de função. Isso quer dizer que uma invocação pode deixar um estado que pode afetar a próxima invocação (por exemplo, arquivos gravados em /tmp ou dados na memória). Se você quiser garantir que uma invocação não afete outra, o Lambda recomenda que você crie funções distintas adicionais. Por exemplo, você pode criar funções distintas para operações de análise complexas que são mais propensas a erros e reutilizar funções que não executam operações confidenciais de segurança. No momento, o Lambda não limita o número de funções que os clientes podem criar. Para obter mais informações sobre limites, consulte a página de cotas do Lambda.
Os ambientes de execução são monitorados e gerenciados continuamente pelo Lambda e podem ser criados ou destruídos por vários motivos, incluindo, entre outros:
-
Uma nova invocação chega e não existe um ambiente de execução adequado
-
Ocorre um tempo de execução interno ou uma implantação de software do operador
-
Uma nova configuração de simultaneidade provisionada é publicada
-
O tempo de concessão no ambiente de execução, ou no operador, está se aproximando ou excedeu a vida útil máxima
-
Outros processos internos de reequilíbrio da workload
Os clientes podem gerenciar o número de ambientes de execução pré-provisionados existentes para uma versão de função configurando a simultaneidade provisionada em sua configuração de função. Quando configurado para isso, o Lambda criará, gerenciará e garantirá que o número configurado de ambientes de execução sempre exista. Isso garante que os clientes tenham maior controle sobre a performance de suas aplicações sem servidor em qualquer escala.
Além de uma configuração de simultaneidade provisionada, os clientes não podem controlar deterministicamente o número de ambientes de execução que são criados ou gerenciados pelo Lambda em resposta a invocações.
Função de execução
Cada função do Lambda também deve ser configurada com uma função de execução, que é uma função do IAM que é assumida pelo serviço Lambda ao executar operações do ambiente de gerenciamento e plano de dados relacionados à função. O serviço Lambda assume essa função para buscar credenciais de segurança temporárias que ficam disponíveis como variáveis de ambiente durante a invocação de uma função. Por motivos de performance, o serviço Lambda armazenará em cache essas credenciais e poderá reutilizá-las em diferentes ambientes de execução que usam a mesma função de execução.
Para garantir a adesão ao princípio de privilégio mínimo, o Lambda recomenda que cada função tenha sua própria função exclusiva e que seja configurada com o conjunto mínimo de permissões necessárias.
O serviço Lambda também pode assumir a função de execução para executar determinadas operações do ambiente de gerenciamento, como aquelas relacionadas à criação e configuração de funções das interfaces de rede elásticas (ENI) para funções de VPC, envio de logs para o Amazon CloudWatch Application Insights
Para obter mais informações sobre esse assunto, consulte a página de documentação da função de execução do AWS Lambda.
MicroVMs e operadores do Lambda
O Lambda criará seus ambientes de execução em uma frota de instâncias do Amazon EC2 chamada Operadores do AWS Lambda. Operadores são instâncias bare metal
Como parte do modelo de responsabilidade compartilhada, o Lambda é responsável por manter a configuração de segurança, os controles e o nível de aplicação de patches dos operadores. A equipe do Lambda usa o Amazon Inspector

Figura 3: Modelo de isolamento para operadores do AWS Lambda
Os operadores têm uma vida útil máxima de locação de 14 horas. Quando um operador se aproxima do tempo máximo de concessão, nenhuma outra invocação é roteada para ele, os MVMs são normalmente encerrados e a instância subjacente do operador é encerrada. O Lambda monitora e emite alertas de forma contínua sobre as atividades do ciclo de vida da frota.
Todas as comunicações do plano de dados com os operadores são criptografadas usando o Advanced Encryption Standard with Galois/Counter Mode (AES-GCM). Além de operações de plano de dados, os clientes não podem interagir diretamente com um operador, pois ele está hospedado em uma rede isolada da Amazon VPC gerenciada pelo Lambda nas contas de serviço do Lambda.
Quando um operador precisa criar um ambiente de execução, ele recebe autorização por tempo limitado para acessar artefatos de função do cliente. Esses artefatos são otimizados especificamente para o ambiente de execução e os operadores do Lambda. O código de função, que é carregado usando o formato ZIP, é otimizado uma vez e, depois, armazenado em um formato criptografado usando uma chave gerenciada pela AWS e AES-GCM.
As funções carregadas no Lambda usando o formato de imagem de contêiner também são otimizadas. A imagem do contêiner é primeiramente baixada de sua fonte original, otimizada em partes distintas e apenas depois armazenada e criptografada em blocos usando um método de criptografia convergente que usa uma combinação de AES-CTR