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 com o Python 3.8

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.

Como criar e usar um script wrapper com o Python 3.8
  1. Para criar o script wrapper, cole o seguinte código em um arquivo chamado importtime_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[@]}"
  2. Para conceder permissões executáveis ao script, insira chmod +x importtime_wrapper pela linha de comando.

  3. Implante o script como uma camada do Lambda.

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

    1. Abra o console do lambda.

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

    3. Em Basic information (Informações básicas), em Function name (Nome da função), insira wrapper-test-function.

    4. ParaRuntime, escolha Python 3.8.

    5. Escolha Criar Função.

  5. Adicione a camada à função.

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

    2. Escolha Add a layer.

    3. Em Choose a layer (Escolher uma camada), selecione o Name (Nome) e a Version (Versão) da camada compatível criada anteriormente.

    4. Escolha Adicionar.

  6. Adicione o código e a variável de ambiente à função.

    1. No editor de código da função, cole o seguinte código de função:

      import json def lambda_handler(event, context): # TODO implement return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') }
    2. Escolha Salvar.

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

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

    5. Em Chave, digite AWS_LAMBDA_EXEC_WRAPPER.

    6. Em Valor, insira /opt/importtime_wrapper.

    7. Escolha Salvar.

  7. Para executar a função, selecione Test (Testar).

    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:

    ... 2020-06-30T18:48:46.780+01:00 import time: 213 | 213 | simplejson 2020-06-30T18:48:46.780+01:00 import time: 50 | 263 | simplejson.raw_json ...