Manipulador de função do Lambda em Python - AWS Lambda

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Manipulador de função do Lambda em Python

O manipulador da função do Lambda é o método no código da função que processa eventos. Quando sua função é invocada, o Lambda executa o método do manipulador. A função é executada até que o manipulador retorne uma resposta, seja encerrado ou atinja o tempo limite.

Você pode usar a seguinte sintaxe geral ao criar um manipulador de funções no Python:

def handler_name(event, context): ... return some_value

Nomenclatura

O nome do manipulador da função do Lambda especificado no momento em que você cria uma função do Lambda é derivado:

  • do nome do arquivo no qual a função de manipulador do Lambda está localizada.

  • do nome da função do manipulador do Python.

Um manipulador de funções pode ter qualquer nome; no entanto, o padrão no console do Lambda é lambda_function.lambda_handler. Esse nome de manipulador da função reflete o nome da função (lambda_handler) e o arquivo em que o código do manipulador está armazenado (lambda_function.py).

Se você criar uma função no console usando um nome de arquivo ou nome de manipulador de funções diferente, deverá editar o nome do manipulador padrão.

Para alterar o nome do manipulador de funções (console)
  1. Abra a página Funções do console do Lambda e escolha sua função.

  2. Escolha a guia Código.

  3. Role para baixo até o painel Configurações de runtime e escolha Editar.

  4. Em Manipulador, insira o novo nome para seu manipulador de funções.

  5. Escolha Salvar.

Como funciona

Quando o Lambda invoca seu handler de função, o runtime do Lambda transmite dois argumentos ao handler da função:

  • O primeiro argumento é o objeto do evento. Um evento é um documento no formato JSON que contém dados para uma função do Lambda processar. O runtime do Lambda converte o evento em um objeto e o transmite para o código da função. Ele geralmente é do tipo Python dict. Ele também pode ser do tipo list, str, int, float, ou NoneType.

    O objeto do evento contém informações do serviço de chamada. Ao invocar uma função, você determina a estrutura e o conteúdo do evento. Quando um serviço da AWS invoca a função, ele define a estrutura do evento. Para obter mais informações sobre eventos de serviços da AWS, consulte Usar o AWS Lambda com outros serviços.

  • O segundo argumento é o objeto de contexto. Um objeto de contexto é passado para sua função pelo Lambda no runtime. Esse objeto oferece métodos e propriedades que fornecem informações sobre a invocação, a função e o ambiente de runtime.

Retornar um valor

Opcionalmente, um manipulador poderá retornar um valor. O que acontece com o valor retornado depende do tipo de invocação e do serviço que invocou a função. Por exemplo:

  • Se você usar o tipo de invocação RequestResponse, como o Invocação síncrona, o AWS Lambda retornará o resultado da chamada de função Python para o cliente que invoca a função do Lambda (na resposta HTTP à solicitação de invocação, serializada em JSON). Por exemplo, o console do AWS Lambda usa o tipo de invocação RequestResponse, assim, quando você invocar a função no console, ele exibirá o valor retornado.

  • Se o handler retornar objetos que não podem ser serializados por json.dumps, o runtime retornará um erro.

  • Se o handler retornar None, assim como funções Python sem uma instrução return fazem implicitamente, o runtime retornará null.

  • Se você usar o tipo de invocação Event (uma invocação assíncrona), o valor será descartado.

nota

No Python 3.9 e em versões posteriores, o Lambda inclui o requestId da invocação na resposta de erro.

Exemplos

A seção a seguir mostra exemplos de funções Python com as quais você pode usar o Lambda. Se você usar o console do Lambda para criar sua função, não será necessário associar um arquivo .zip para executar as funções nesta seção. Essas funções usam bibliotecas Python padrão que estão incluídas no runtime do Lambda selecionado. Para ter mais informações, consulte Pacotes de implantação do Lambda.

Retornar uma mensagem

O exemplo a seguir mostra uma função chamada lambda_handler. A função aceita a entrada do usuário de um nome e sobrenome, e retorna uma mensagem que contém dados do evento recebido como entrada.

def lambda_handler(event, context): message = 'Hello {} {}!'.format(event['first_name'], event['last_name']) return { 'message' : message }

Você pode usar os seguintes dados de evento para chamar a função:

{ "first_name": "John", "last_name": "Smith" }

A resposta mostra os dados do evento passados como entrada:

{ "message": "Hello John Smith!" }

Analisar uma resposta

O exemplo a seguir mostra uma função chamada lambda_handler. A função usa dados de evento passados pelo Lambda no runtime. Ele analisa a variável de ambiente na AWS_REGION retornada na resposta JSON.

import os import json def lambda_handler(event, context): json_region = os.environ['AWS_REGION'] return { "statusCode": 200, "headers": { "Content-Type": "application/json" }, "body": json.dumps({ "Region ": json_region }) }

Você pode usar quaisquer dados de eventos para chamar a função:

{ "key1": "value1", "key2": "value2", "key3": "value3" }

Os runtimes do Lambda definem diversas variáveis de ambiente durante a inicialização. Para obter mais informações sobre as variáveis de ambiente retornadas na resposta no runtime, consulte Como usar variáveis ​​de ambiente do Lambda.

A função neste exemplo depende de uma resposta bem-sucedida (em 200) da API Invoke. Para obter mais informações sobre o status da API de invocação, consulte a Sintaxe de resposta Invoke.

Retornar um cálculo

O exemplo a seguir mostra uma função chamada lambda_handler. A função aceita a entrada do usuário e retorna um cálculo para ele. Para obter mais informações sobre esse exemplo, consulte o aws-doc-sdk-examples GitHub repositório.

import logging logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): ... result = None action = event.get('action') if action == 'increment': result = event.get('number', 0) + 1 logger.info('Calculated result of %s', result) else: logger.error("%s is not a valid action.", action) response = {'result': result} return response

Você pode usar os seguintes dados de evento para chamar a função:

{ "action": "increment", "number": 3 }