Como o Lambda funciona - AWS Lambda

Como o Lambda funciona

As funções do Lambda são as peças básicas que você usa para desenvolver aplicações do Lambda. Para escrever funções, é essencial entender os principais conceitos e componentes do modelo de programação do Lambda. Esta seção o guiará pelos elementos fundamentais que você precisa conhecer para começar a desenvolver aplicações com tecnologia sem servidor usando o Lambda.

  • Funções do Lambda e manipuladores de funções: uma função do Lambda é um pequeno bloco de código executado em resposta a eventos. As funções são as peças básicas que você usa para desenvolver aplicações. Os manipuladores da função são o ponto de entrada para objetos de eventos que o código da função do Lambda processa.

  • Ambiente de execução e runtimes do Lambda: os ambientes de execução do Lambda gerenciam os recursos necessários para executar a função. Os runtimes do Lambda são os ambientes específicos da linguagem nos quais as funções são executadas.

  • Eventos e acionadores: como outros Serviços da AWS invocam as funções em resposta a eventos específicos.

  • Permissões e perfis do Lambda: como você controla quem pode acessar as funções e com quais outros Serviços da AWS as funções podem interagir.

dica

Se quiser começar entendendo o desenvolvimento com tecnologia sem servidor de maneira mais geralizada, consulte Diferença entre desenvolvimento tradicional e com tecnologia sem servidor, no Guia do desenvolvedor do AWS com tecnologia sem servidor.

Funções do Lambda e manipuladores de funções

No Lambda, funções são os blocos de construção fundamentais utilizados para criar aplicações. Uma função do Lambda é um bloco de código executado em resposta a eventos, como o clique de um usuário em um botão em um site ou o upload de um arquivo em um bucket do Amazon Simple Storage Service (Amazon S3). Imagine uma função como um tipo de programa independente com as seguintes propriedades. Um manipulador da função do Lambda é o método no código da função que processa eventos. Quando uma função é executada em resposta a um evento, o Lambda executa o manipulador da função. Os dados sobre o evento que causou a execução da função são transmitidos diretamente ao manipulador. Embora o código em uma função do Lambda possa conter mais de um método ou função, funções do Lambda podem conter apenas um manipulador.

Para criar uma função do Lambda, agrupe o código dessa função e suas dependências em um pacote de implantação. O Lambda oferece suporte a dois tipos de pacotes de implantação, arquivos .zip e imagens de contêineres.

  • Funções têm um trabalho ou propósito específico

  • São executadas somente quando necessário em resposta a eventos específicos

  • Param de ser executadas automaticamente quando são encerradas

Ambiente de execução e runtimes do Lambda

Funções do Lambda são executadas em um ambiente de execução seguro e isolado gerenciado pelo Lambda para você. Esse ambiente de execução gerencia os processos e os recursos necessários para executar essa função. Quando uma função é invocada pela primeira vez, o Lambda cria um novo ambiente de execução no qual essa função será executada. Concluída a execução da função, o Lambda não interrompe o ambiente de execução imediatamente: se a função for novamente invocada, o Lambda poderá reutilizar o ambiente de execução existente.

O ambiente de execução do Lambda também contém um runtime, ou seja, um ambiente específico de linguagem que retransmite informações de eventos e respostas entre o Lambda e sua função. O Lambda inclui vários runtimes gerenciados para as linguagens de programação mais populares, ou você pode criar o seu próprio.

Para runtimes gerenciados, o Lambda aplica automaticamente atualizações e patches de segurança às funções que usam o runtime.

Eventos e acionadores

Também é possível invocar uma função do Lambda diretamente usando o console do Lambda, a AWS CLI ou um dos Kits de Desenvolvimento de Software (SDKs) da AWS. Em uma aplicação de produção, é mais comum que a função seja invocada por outro AWS service (Serviço da AWS) em resposta a um evento específico. Por exemplo, você pode desejar que uma função seja executada sempre que um item for adicionado a uma tabela do Amazon DynamoDB.

Para fazer a função responder a eventos, você configura um acionador. Um acionador conecta a função a uma origem de eventos, e a função pode ter vários acionadores. Quando ocorre um evento, o Lambda recebe os dados do evento como um documento JSON e os converte em um objeto que o código possa processar. Você pode definir o formato JSON a seguir para o evento, e o runtime do Lambda converte esse JSON em um objeto antes de passá-lo ao manipulador da função.

exemplo evento do Lambda personalizado
{ "Location": "SEA", "WeatherData":{ "TemperaturesF":{ "MinTempF": 22, "MaxTempF": 78 }, "PressuresHPa":{ "MinPressureHPa": 1015, "MaxPressureHPa": 1027 } } }

Para serviços de fluxos e filas, como o Amazon Kinesis ou o Amazon SQS, o Lambda usa um mapeamento da origem do evento em vez de um acionador padrão. Os mapeamentos da origem do evento sondam a origem em busca de novos dados, agrupam os registros em lotes e depois invocam a função com os eventos em lotes.

Para entender como um acionador funciona, faça o tutorial Usar um acionador do Amazon S3 ou, para obter uma visão geral sobre o uso de acionadores e instruções para criar um acionador usando o console do Lambda, consulte Integração com outros serviços.

Permissões e perfis do Lambda

Para o Lambda, existem dois tipos principais de permissões que você precisa configurar:

  • Permissões necessárias para a sua função acessar outros Serviços da AWS

  • Permissões necessárias para outros usuários acessarem sua função

As próximas seções descrevem esses dois tipos de permissão e discutem as práticas recomendadas para aplicar permissões com privilégios mínimos.

Permissões para funções acessarem outros recursos da AWS

As funções do Lambda geralmente precisam acessar outros recursos da AWS e executar ações neles. Por exemplo, uma função pode ler itens de uma tabela do DynamoDB, armazenar um objeto em um bucket do S3 ou gravar em uma fila do Amazon SQS. Para dar às funções as permissões necessárias para realizar essas ações, você deve usar um perfil de execução.

Um perfil de execução do Lambda é um tipo especial de perfil do AWS Identity and Access Management (IAM), uma identidade criada na conta que tem permissões específicas associadas a ela definidas em uma política.

Cada função do Lambda deve ter um perfil de execução, e um único perfil pode ser usado por mais de uma função. Quando uma função é invocada, o Lambda assume o perfil de execução dessa função e recebe permissão para realizar as ações definidas na política do perfil.

Quando você cria uma função no console do Lambda, o Lambda cria automaticamente um perfil de execução para essa função. A política do perfil concede permissões básicas à sua função para gravar saídas de log no Amazon CloudWatch Logs. Para dar permissão à sua função para realizar ações em outros recursos da AWS, é necessário editar o perfil de forma a adicionar as permissões extras. A maneira mais fácil de adicionar permissões é usar uma política gerenciada da AWS. Políticas gerenciadas são criadas e administradas pela AWS e fornecem permissões para diversos casos de uso comuns. Por exemplo, se a sua função executa operações de CRUD em uma tabela do DynamoDB, você pode adicionar a política AmazonDynamoDBFullAccess ao seu perfil.

Permissões para outros usuários e recursos acessarem sua função

Para conceder a outros AWS service (Serviço da AWS) permissão para acessar sua função do Lambda, é necessário usar uma política baseada em recursos. No IAM, políticas baseadas em recurso são anexadas a um recurso (neste caso, a função do Lambda) e definem quem pode acessar esse recurso e quais ações podem ser realizadas.

Para que outro AWS service (Serviço da AWS) invoque sua função por meio de um gatilho, a política baseada em recursos dessa função deve conceder permissão a esse serviço para usar a ação lambda:InvokeFunction. Se você criar o gatilho usando o console, o Lambda adicionará automaticamente essa permissão.

Para conceder permissão para outros usuários da AWS acessarem sua função, você pode definir isso na política baseada em recursos da sua função da mesma maneira que para outro AWS service (Serviço da AWS) ou recurso. Também é possível usar uma política baseada em identidade associada ao usuário.

Práticas recomendadas para permissões do Lambda

Quando você define permissões usando políticas do IAM, a prática recomendada de segurança é conceder apenas as permissões necessárias para realizar uma tarefa. Isso é conhecido como o princípio do privilégio mínimo. Para começar a conceder permissões para sua função, você pode optar por usar uma política gerenciada pela AWS. Políticas gerenciadas podem ser a maneira mais rápida e simples de conceder permissões para realizar uma tarefa, mas também podem incluir outras permissões desnecessárias. À medida que você passa do desenvolvimento inicial para teste e produção, recomendamos limitar permissões apenas às necessárias, definindo políticas gerenciadas pelo cliente.

O mesmo princípio é aplicável ao conceder permissões para acessar uma função usando uma política baseada em recursos. Por exemplo, se quiser dar permissão ao Amazon S3 para invocar sua função, a prática recomendada é limitar o acesso a buckets individuais, ou buckets em particular Contas da AWS, em vez de conceder permissões gerais ao serviço S3.