Modificar o ambiente de runtime - AWS Lambda

Modificar o ambiente de runtime

É possível usar extensões internas para modificar o processo de runtime. As extensões internas não são processos separados. Elas são executadas como parte do processo de runtime.

O Lambda fornece específicos do idiomaVariáveis de ambiente que você pode definir para adicionar opções e ferramentas ao runtime. O Lambda também fornece scripts wrapper, que permitem ao Lambda delegar o startup do runtime ao seu script. Você pode criar um script wrapper para personalizar o comportamento de startup do runtime.

Variáveis de ambiente específicas de linguagem

O Lambda é compatível com formas somente de configuração para permitir que o código seja pré-carregado durante a inicialização da função por meio das seguintes variáveis de ambiente específicas do idioma:

  • JAVA_TOOL_OPTIONS: no Java, o Lambda é compatível com essa variável de ambiente para definir variáveis da linha de comando adicionais no Lambda. Essa variável de ambiente permite especificar a inicialização de ferramentas, especificamente o lançamento de agentes de linguagem de programação nativa ou Java usando as opções agentlib ou javaagent. Para obter mais informações, consulte Variável de ambiente JAVA_TOOL_OPTIONS.

  • NODE_OPTIONS: disponível em runtimes do Node.js.

  • DOTNET_STARTUP_HOOKS: no .NET Core 3.1 e superior, essa variável de ambiente especifica um caminho para um assembly (dll) que o Lambda pode usar.

Usar variáveis de ambiente específicas de linguagem é a maneira preferida de definir propriedades de startup.

Scripts wrapper

Você pode criar um script wrapper para personalizar o comportamento de startup do runtime da função do Lambda. Um script wrapper permite que você defina parâmetros de configuração que não podem ser definidos por meio de variáveis de ambiente específicas de linguagem.

nota

As chamadas podem falhar se o script wrapper não iniciar com êxito o processo de runtime.

Os scripts wrapper são compatíveis com todos os runtimes nativos do Lambda. Os scripts wrapper não são compatíveis com Runtimes somente para sistema operacional (a família de runtime provided).

Quando você usa um script wrapper para sua função, o Lambda inicia o runtime usando seu script. O Lambda envia ao script o caminho para o intérprete e todos os argumentos originais para o startup padrão do runtime. O script pode estender ou transformar o comportamento de startup do programa. Por exemplo, o script pode injetar e alterar argumentos, definir variáveis de ambiente ou capturar métricas, erros e outras informações de diagnóstico.

Você especifica o script definindo o valor da variável de ambiente AWS_LAMBDA_EXEC_WRAPPER como o caminho do sistema de arquivos de um binário ou script executável.

Exemplo: criar e usar um script wrapper como uma camada do Lambda

No exemplo a seguir, você cria um script wrapper para iniciar o interpretador Python com a opção -X importtime. Quando você executa a função, o Lambda gera uma entrada de log para mostrar a duração de cada importação.

Para criar e usar um script wrapper como uma camada
  1. Crie um diretório para a camada:

    mkdir -p python-wrapper-layer/bin cd python-wrapper-layer/bin
  2. No diretório bin, cole o código a seguir em um novo arquivo chamado importtime_wrapper. Este é o script wrapper.

    #!/bin/bash # the path to the interpreter and all of the originally intended arguments args=("$@") # the extra options to pass to the interpreter extra_args=("-X" "importtime") # insert the extra options args=("${args[@]:0:$#-1}" "${extra_args[@]}" "${args[@]: -1}") # start the runtime with the extra options exec "${args[@]}"
  3. Dê as permissões executáveis de scripts:

    chmod +x importtime_wrapper
  4. Crie um arquivo .zip para a camada:

    cd .. zip -r ../python-wrapper-layer.zip .
  5. Confirme se o arquivo .zip tem a seguinte estrutura de diretórios:

    python-wrapper-layer.zip
    └ bin
        └ importtime_wrapper
  6. Crie uma camada usando o pacote .zip.

  7. Crie uma função usando o console do Lambda.

    1. Abra o console do lambda.

    2. Escolha a opção Criar função.

    3. Insira um Nome de função.

    4. Em Runtime, escolha o último runtime Python em Últimos compatíveis.

    5. Escolha a opção Criar função.

  8. Adicione a camada à função.

    1. Escolha sua função e, em seguida, escolha a guia Código se ela ainda não estiver selecionada.

    2. Role para baixo até a seção Camadas e depois escolha Adicionar uma camada.

    3. Em Origem da camada, selecione Camadas personalizadas e, em seguida, escolha sua camada na lista suspensa Camadas personalizadas.

    4. Em Version, selecione 1.

    5. Escolha Adicionar.

  9. Adicione a variável de ambiente do wrapper.

    1. Escolha a guia Configuração e, em seguida, selecione Variáveis de ambiente.

    2. Em Environment variables (Variáveis de ambiente), selecione Edit (Editar).

    3. Escolha Add environment variable (Adicionar variável de ambiente).

    4. Em Chave, digite AWS_LAMBDA_EXEC_WRAPPER.

    5. Em Valor, insira /opt/bin/importtime_wrapper (/opt/ + a estrutura de pastas da sua camada .zip).

    6. Escolha Salvar.

  10. Teste o script wrapper.

    1. Selecione a guia Testar.

    2. Em Evento de teste, escolha Testar. Não é necessário criar um evento de teste; o evento padrão funcionará.

    3. Role para baixo até Resultado de saída do log. Como o script wrapper iniciou o interpretador Python com a opção -X importtime, os logs mostram o tempo necessário para cada importação. Por exemplo:

      532 |           collections
      import time:        63 |         63 |           _functools
      import time:      1053 |       3646 |         functools
      import time:      2163 |       7499 |       enum
      import time:       100 |        100 |         _sre
      import time:       446 |        446 |           re._constants
      import time:       691 |       1136 |         re._parser
      import time:       378 |        378 |         re._casefix
      import time:       670 |       2283 |       re._compiler
      import time:       416 |        416 |       copyreg