AWS Lambda
Guia do desenvolvedor

Tempos de execução personalizados do AWS Lambda

Você pode implementar um tempo de execução do AWS Lambda em qualquer linguagem de programação. Tempo de execução é um programa que executa um método de handler da função do Lambda quando a função é invocada. Você pode incluir um tempo de execução em seu pacote de implantação da função na forma de um arquivo executável chamado bootstrap.

Um tempo de execução é responsável para executar o código de configuração da função, lendo o nome do handler de uma variável de ambiente e lendo eventos de invocação da API de tempo de execução do Lambda. O tempo de execução transmite os dados de eventos para o handler de funções e publica a resposta do handler de volta no Lambda.

Seu tempo de execução personalizado é executado no ambiente de execução padrão do Lambda. Pode ser um script de shell, um script em uma linguagem incluída no Amazon Linux ou um arquivo executável binário compilado no Amazon Linux.

Para começar a usar tempos de execução personalizados, consulte Tutorial – Publicando um tempo de execução personalizado. Você também pode explorar um tempo de execução personalizado implementado em C++ em awslabs/aws-lambda-cpp no GitHub.

Usando um tempo de execução personalizado

Para usar um tempo de execução personalizado, defina o tempo de execução de sua função como provided. O tempo de execução pode ser incluído no pacote de implantação da sua função ou em uma camada.

exemplo function.zip

. ├── bootstrap ├── function.sh

Se houver um arquivo denominado bootstrap em seu pacote de implantação, o Lambda o executará. Se não, o Lambda procurará um tempo de execução nas camadas da função. Se o arquivo de bootstrap não for encontrado ou não for executável, sua função retornará um erro na invocação.

Criando um tempo de execução personalizado

O ponto de entrada de um tempo de execução personalizado é um arquivo executável denominado bootstrap. O arquivo de bootstrap pode ser o tempo de execução ou ele pode invocar outro arquivo que criará o tempo de execução. O exemplo a seguir usa um pacote de versão do Node.js para executar um tempo de execução JavaScript em um arquivo separado denominado runtime.js.

exemplo bootstrap

#!/bin/sh cd $LAMBDA_TASK_ROOT ./node-v11.1.0-linux-x64/bin/node runtime.js

Seu código de tempo de execução é responsável por executar algumas tarefas de inicialização. Em seguida, ele processa os eventos de invocação em um loop até ser encerrado. As tarefas de inicialização são executadas uma vez por instância da função para preparar o ambiente para processar invocações.

Tarefas de inicialização

  • Recuperar configurações – leia variáveis de ambiente para obter detalhes sobre a função e o ambiente.

    • _HANDLER – A localização do handler, da configuração da função. O formato padrão é file.method, em que file é o nome do arquivo sem uma extensão, e method é o nome de um método ou da função que é definido no arquivo.

    • LAMBDA_TASK_ROOT – o diretório que contém o código da função.

    • AWS_LAMBDA_RUNTIME_API – o host e a porta da API de tempo de execução.

    Consulte Variáveis de ambiente disponíveis para funções de Lambda para uma lista completa das variáveis disponíveis.

  • Inicializar a função – carregar o arquivo de handler e executar qualquer código global ou estático que ele contenha. As funções devem criar recursos estáticos como clientes SDK e conexões de banco de dados uma vez e reutilizá-los para várias invocações.

  • Lidar com erros – se ocorrer um erro, chame a API erro de inicialização e saia imediatamente.

A inicialização é considerada no tempo de execução e tempo limite cobrados. Quando uma execução aciona a inicialização de uma nova instância da função, você pode ver o tempo de inicialização nos logs e no rastreamento do AWS X-Ray.

exemplo Log

REPORT RequestId: f8ac1208... Init Duration: 48.26 ms Duration: 237.17 ms Billed Duration: 300 ms Memory Size: 128 MB Max Memory Used: 26 MB

        Tempo de inicialização em um rastreamento do X-Ray.

Enquanto ela é executada, um tempo de execução usa a interface de tempo de execução do Lambda para gerenciar eventos de entrada e relatar erros. Depois de executar as tarefas de inicialização, o tempo de execução processa eventos de entrada em um loop. No código de tempo de execução, execute as seguintes etapas em ordem.

Tarefas de processamento

  • Obter um evento – chame a API próxima invocação para obter o próximo evento. O corpo da resposta contém os dados do evento. Os cabeçalhos da resposta contêm o ID da solicitação e outras informações.

  • Propagar o cabeçalho de rastreamento – obtenha o cabeçalho de rastreamento do X-Ray do cabeçalho Lambda-Runtime-Trace-Id na resposta da API. Defina a variável de ambiente _X_AMZN_TRACE_ID com o mesmo valor do SDK do X-Ray a ser usado.

  • Criar um contexto de objeto – crie um objeto com informações de contexto de variáveis do ambiente e cabeçalhos na resposta da API.

  • Invocar o handler de funções – transmita o evento e o objeto de contexto para o handler.

  • Processar a resposta – chame a API de resposta de invocação para publicar a resposta do handler.

  • Lidar com erros – se ocorrer um erro, chame a API erro de invocação.

  • Limpeza – libere recursos não utilizados, envie dados para outros serviços ou execute tarefas adicionais antes de receber o próximo evento.

Você pode incluir o tempo de execução no pacote de implantação da sua função ou distribuir o tempo de execução separadamente em uma camada de função. Para ver uma demonstração de exemplo, consulte Tutorial – Publicando um tempo de execução personalizado.