O Lambda é um serviço de computação com tecnologia sem servidor e orientado por eventos e, portanto, usa um paradigma de programação diferente das aplicações Web tradicionais. Se você é iniciante no desenvolvimento com o Lambda ou com a tecnologia sem servidor, as próximas seções descrevem alguns conceitos fundamentais que ajudarão a dar início ao seu caminho de aprendizado. Além de uma explicação de cada conceito, as seções também incluem links para tutoriais, documentação detalhada e outros recursos que você pode utilizar para expandir sua compreensão de cada tópico.
Nesta página, você aprenderá:
-
Funções do Lambda: os blocos de construção básicos do Lambda usados para criar aplicações
-
Runtimes do Lambda: os ambientes específicos da linguagem nos quais as suas funções são executadas
-
Acionadores e mapeamentos de origem de eventos: de que forma outros Serviços da AWS podem invocar suas funções em resposta a eventos específicos
-
O objeto de evento: um objeto JSON contendo dados de eventos para a sua função processar
-
Permissões do Lambda: a maneira de controlar com quais outros Serviços da AWS as suas funções podem interagir e quem pode acessá-las
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
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.
-
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
Quando uma função é executada em resposta a um evento, o Lambda executa a função de manipulador dessa 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.
Para compreender melhor as funções do Lambda, recomendamos que você comece concluindo o tutorial Criar sua primeira função do Lambda, caso ainda não tenha feito isso. Esse tutorial oferece mais detalhes sobre a função de manipulador e como transmitir dados para dentro e fora da sua função. Também fornece uma introdução à criação de logs de funções.
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.
Gatilhos e mapeamentos de origens de eventos
Embora você possa invocar uma função do Lambda manualmente usando o AWS Command Line Interface (AWS CLI) ou a API do Lambda, 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 configurar uma função de forma que ela seja executada em resposta a um evento específico, você adiciona um gatilho. Quando um gatilho é criado, outros Serviços da AWS podem invocar a função diretamente, enviando um objeto de evento ao Lambda sempre que um evento específico acontecer. Uma função pode ter vários gatilhos, cada um invocando a função de maneira independente.
Alguns tipos de serviço de transmissão e fila, como o Amazon Kinesis ou o Amazon Simple Queue Service (Amazon SQS), não podem invocar diretamente o Lambda usando um gatilho. Para eles, você precisa criar um mapeamento de origem de evento. Mapeamentos de origem de eventos são um tipo especial de recurso do Lambda que sonda continuamente uma transmissão ou fila em busca de novos eventos. Por exemplo, um mapeamento de origem de evento pode sondar uma fila do Amazon SQS para verificar se foram adicionadas novas mensagens. O Lambda agrupa novas mensagens em uma única carga útil até que um limite configurado pelo usuário seja atingido e depois invoca a função com um único objeto de evento contendo todos os registros do lote.
A maneira mais fácil de criar um gatilho ou mapeamento de origem de evento é usando o console do Lambda. Embora os recursos subjacentes criados pelo Lambda e a maneira como a função é invocada sejam diferentes, o processo de criação de um gatilho ou mapeamento de origens de eventos no console utiliza o mesmo método.
Para ver um exemplo de um gatilho em ação, comece executando o tutorial Usar um gatilho do Amazon S3 para invocar uma função do Lambda ou, para obter uma visão geral sobre o uso de gatilhos e instruções sobre como criar um gatilho usando o console do Lambda, consulte Invocando o Lambda com eventos de outros serviços da AWS.
O objeto de evento
O Lambda é um serviço de computação orientado por eventos. Isso significa que o código é executado em resposta a eventos gerados por produtores externos. Dados de eventos são transmitidos para a sua função como um documento formatado em JSON, que o runtime converte em um objeto a ser processado pelo código. Por exemplo, em Python, o runtime converte um objeto JSON em um dicionário Python e o passa para a função como o argumento de entrada event
.
Quando o evento é gerado por outro AWS service (Serviço da AWS), seu formato depende do serviço que o gera. Por exemplo, um evento do Amazon S3 inclui o nome do bucket que acionou sua função e também informações sobre objetos nesse bucket. Para obter mais informações sobre o formato dos eventos gerados por diferentes Serviços da AWS, consulte os capítulos relevantes em Invocando o Lambda com eventos de outros serviços da AWS.
Também é possível invocar uma função do Lambda diretamente usando o console do Lambda, a AWS CLI
exemplo evento do Lambda personalizado
{ "Location": "SEA", "WeatherData":{ "TemperaturesF":{ "MinTempF": 22, "MaxTempF": 78 }, "PressuresHPa":{ "MinPressureHPa": 1015, "MaxPressureHPa": 1027 } } }
Como o runtime do Lambda converte o evento em um objeto, você pode facilmente atribuir valores nesse evento a variáveis sem precisar desserializar o JSON. Os trechos de código de exemplo a seguir demonstram como atribuir o valor mínimo de temperatura do evento de exemplo anterior a uma variável MinTemp
utilizando os runtimes do Python e do Node.js. Em ambos os casos, o objeto do evento é transmitido à função de manipulador da sua função como um argumento denominado event
.
exemplo Trecho do código Python
MinTemp = event['WeatherData']['TemperaturesF']['MinTempF']
exemplo Trecho do código Node.js
let MinTemp = event.WeatherData.TemperaturesF.MinTempF;
Para obter um exemplo de invocação de uma função do Lambda com um evento personalizado, consulte Criar sua primeira função do Lambda.
Permissões 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.