Extensões do Lambda - AWS Lambda

Extensões do Lambda

É possível usar extensões do Lambda para aumentar as funções do Lambda. Por exemplo, use extensões do Lambda para integrar funções com suas ferramentas preferidas de monitoramento, observação, segurança e governança. Você pode escolher entre várias ferramentas que os parceiros do AWS Lambda fornecem, ou pode criar suas próprias extensões do Lambda.

O Lambda é compatível com extensões internas e externas. Uma extensão externa é executada como um processo independente no ambiente de execução e continua a ser executada após a invocação da função ser totalmente processada. Como as extensões são executadas como processos separados, elas podem ser escritas em uma linguagem diferente da função. Todos os Runtimes do Lambda são compatíveis com extensões.

Uma extensão interna é executada como parte do processo de runtime. A função acessa extensões internas usando scripts wrapper ou mecanismos no processo, como JAVA_TOOL_OPTIONS. Para ter mais informações, consulte Modificar o ambiente de runtime.

É possível adicionar extensões a uma função usando o console do Lambda, a AWS Command Line Interface (AWS CLI) ou serviços e ferramentas da infraestrutura como código (IaC), como o AWS CloudFormation, o AWS Serverless Application Model (AWS SAM) e o Terraform.

Você é cobrado pelo tempo de execução consumido pela extensão (em incrementos de 1 ms). Não há custo para instalar suas próprias extensões. Para obter mais informações sobre a definição de preço para extensões, consulte Definição de preço do AWS Lambda. Para obter informações de definição de preço sobre extensões de parceiros, consulte os sites desses parceiros. Consulte Parceiros de extensões do AWS Lambda para obter uma lista de extensões oficiais de parceiros.

Para ver um tutorial sobre extensões e como usá-las com suas funções do Lambda, consulte o Workshop de extensões do AWS Lambda.

Ambiente de execução

O Lambda invoca a função em um ambiente de execução, que fornece um ambiente do runtime seguro e isolado. O ambiente de execução gerencia os recursos necessários para executar sua função e fornece suporte ao ciclo de vida para o runtime e extensões da função.

O ciclo de vida do ambiente de execução inclui as seguintes fases:

  • Init: nessa fase, o Lambda cria ou descongela um ambiente de execução com os recursos configurados, faz download do código da função e de todas as camadas, inicializa todas as extensões e o runtime, em seguida executa o código de inicialização da função (o código fora do handler principal). OInitocorre durante a primeira invocação, ou antes de invocações de função se você tiver habilitadoSimultaneidade provisionada.

    OInité dividida em três subfases:Extension init,Runtime init, eFunction init. Essas subfases garantem que todas as extensões e o runtime concluam suas tarefas de configuração antes que o código da função seja executado.

    Quando o Lambda SnapStart está ativado, a fase Init ocorre ao você publicar uma versão da função. O Lambda salva um snapshot do estado da memória e do disco do ambiente de execução inicializado, mantém o snapshot criptografado e o armazena em cache para acesso de baixa latência. Se você tiver um hook de runtime beforeCheckpoint, então, o código será executado ao final da fase Init.

  • Restore(SnapStart somente): Quando você invoca uma SnapStartfunção pela primeira vez e à medida que a função aumenta, o Lambda retoma novos ambientes de execução a partir do instantâneo persistente, em vez de inicializar a função do zero. Se você tiver um hook de runtime afterRestore(), o código será executado ao final da fase Restore. Você terá cobranças pela duração dos hooks de runtime afterRestore(). O runtime (JVM) deve ser carregado e os hooks de runtime afterRestore() devem ser concluídos dentro do limite de tempo limite (dez segundos). Caso contrário, você receberá um SnapStartTimeoutException. Quando a fase Restore é concluída, o Lambda invoca o manipulador de função (a Fase de invocação).

  • Invoke: Nesta fase, o Lambda chama o manipulador de função. Depois que a função é executada até a conclusão, o Lambda se prepara para manipular outra invocação de função.

  • Shutdown: Esta fase é acionada se a função do Lambda não receber quaisquer invocações por um período de tempo. Na fase Shutdown, o Lambda encerra o runtime, alerta as extensões para permitir que elas parem de forma limpa e, em seguida, remove o ambiente. Lambda envia umShutdownpara cada extensão, que informa a extensão que o ambiente está prestes a ser encerrado.

Durante oInit, o Lambda extrai camadas contendo extensões para o/optno ambiente de execução. O Lambda procura extensões no/opt/extensions/, interpreta cada arquivo como um bootstrap executável para iniciar a extensão e inicia todas as extensões em paralelo.

Impacto na performance e nos recursos

O tamanho das extensões da função conta para o limite de tamanho do pacote de implantação. Para um arquivo .zip, o tamanho total descompactado da função e de todas as extensões não pode exceder o limite de tamanho do pacote de implantação descompactado de 250 MB.

As extensões podem afetar a performance da função porque compartilham recursos de função, como CPU, memória e armazenamento. Por exemplo, se uma extensão executa operações de computação intensiva, você pode ver o aumento da duração da execução da função.

Cada extensão deve concluir sua inicialização antes de o Lambda invocar a função. Portanto, uma extensão que consome tempo de inicialização significativo pode aumentar a latência da invocação da função.

Para medir o tempo adicional que a extensão leva após a execução da função, você pode usar amétrica da função PostRuntimeExtensionsDuration. Para medir o aumento da memória usada, você pode usar a métrica MaxMemoryUsed. Para entender o impacto de uma extensão específica, você pode executar diferentes versões das funções lado a lado.

Permissões

As extensões têm acesso aos mesmos recursos que as funções. Como as extensões são executadas no mesmo ambiente que a função, as permissões são compartilhadas entre a função e a extensão.

Para um arquivo .zip, é possível criar um modelo do AWS CloudFormation para simplificar a tarefa de anexar a mesma configuração de extensão, incluindo permissões do AWS Identity and Access Management (IAM), a várias funções.