Usar variáveis de ambiente do AWS Lambda - AWS Lambda

Usar variáveis de ambiente do AWS Lambda

É possível usar variáveis de ambiente para ajustar o comportamento da função sem atualizar o código. Uma variável de ambiente é um par de strings armazenadas na configuração específica da versão de uma função. O tempo de execução do Lambda disponibiliza variáveis de ambiente para o código e define variáveis de ambiente adicionais que contêm informações sobre a função e solicitação de chamada.

nota

Para aumentar a segurança do banco de dados, recomendamos que você use o AWS Secrets Manager em vez de variáveis de ambiente para armazenar credenciais de banco de dados. Para obter mais informações, consulte Configurar o acesso ao banco de dados para uma função do Lambda.

Para definir variáveis de ambiente na versão não publicada da função, especifique uma chave e um valor. Quando você publica uma versão, as variáveis de ambiente são bloqueadas para aquela versão com outras configurações específicas da versão.

Para definir variáveis de ambiente no console do Lambda

  1. Abra a página Functions (Funções) do console do Lambda.

  2. Escolha uma função.

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

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

  5. Insira um par de chave e valor.

    Requisitos

    • As chaves começam com uma letra e têm pelo menos dois caracteres.

    • As chaves e os valores contêm somente letras, números e o caractere de sublinhado (_).

    • As chaves não são reservadas pelo Lambda.

    • O tamanho total de todas as variáveis de ambiente não excede 4 KB.

  6. Escolha Save (Salvar).

Use variáveis de ambiente para passar configurações específicas do ambiente para seu código. Por exemplo, você pode ter duas funções com o mesmo código, mas configurações diferentes. Uma função se conecta a um banco de dados de teste e a outra se conecta a um banco de dados de produção. Nessa situação, você usa variáveis de ambiente para informar à função o nome do host e outros detalhes de conexão do banco de dados.

O exemplo a seguir mostra como definir o host do banco de dados e o nome do banco de dados como variáveis de ambiente.


      Variáveis de ambiente no console do Lambda.

Se quiser que o ambiente de teste gere mais informações de depuração do que o ambiente de produção, você poderá definir uma variável de ambiente para configurar o ambiente de teste para usar um registro em log mais detalhado ou um rastreamento mais detalhado.

nota

As variáveis de ambiente não são avaliadas antes da invocação da função. Qualquer valor definido é considerado uma string literal e não expandido. Execute a avaliação da variável no código da função.

Para recuperar variáveis de ambiente em seu código de função, use o método padrão para a sua linguagem de programação.

Node.js
let region = process.env.AWS_REGION
Python
import os region = os.environ['AWS_REGION']
Ruby
region = ENV["AWS_REGION"]
Java
String region = System.getenv("AWS_REGION");
Go
var region = os.Getenv("AWS_REGION")
C#
string region = Environment.GetEnvironmentVariable("AWS_REGION");
PowerShell
$region = $env:AWS_REGION

O Lambda armazena as variáveis de ambiente de forma segura, criptografando-as em repouso. É possível configurar o Lambda para usar uma chave de criptografia diferente, criptografar valores de variáveis de ambiente no lado do cliente ou definir variáveis de ambiente em um modelo do AWS CloudFormation com o AWS Secrets Manager.

Variáveis de ambiente de execução

Os tempos de execução do Lambda definem diversas variáveis de ambiente durante a inicialização. A maioria das variáveis de ambiente fornece informações sobre a função ou o tempo de execução. As chaves para essas variáveis de ambiente são reservadas e não podem ser definidas na configuração de sua função.

Variáveis de ambiente reservadas

  • _HANDLER – o local do handler configurado na função.

  • _X_AMZN_TRACE_ID – o cabeçalho de rastreamento do X-Ray.

  • AWS_REGION – a região da AWS onde a função do Lambda é executada.

  • AWS_EXECUTION_ENV – o identificador de tempo de execução, prefixado por AWS_Lambda_ — por exemplo, AWS_Lambda_java8.

  • AWS_LAMBDA_FUNCTION_NAME – o nome da função.

  • AWS_LAMBDA_FUNCTION_MEMORY_SIZE – a quantidade de memória disponível para a função em MB.

  • AWS_LAMBDA_FUNCTION_VERSION – a versão da função que está sendo executada.

  • AWS_LAMBDA_LOG_GROUP_NAME, AWS_LAMBDA_LOG_STREAM_NAME – o nome do grupo e do fluxo do Amazon CloudWatch Logs para a função.

  • AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN – as chaves de acesso obtidas da função de execução da função.

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

  • LAMBDA_TASK_ROOT – o caminho para o código da função do Lambda.

  • LAMBDA_RUNTIME_DIR – o caminho para bibliotecas de tempo de execução.

  • TZ – o fuso horário do ambiente (UTC). O ambiente de execução usa o NTP para sincronizar o relógio do sistema.

As variáveis de ambiente adicionais a seguir não são reservadas e podem ser estendidas na configuração de sua função.

Variáveis de ambiente não reservadas

  • LANG – esta é a localidade do tempo de execução (en_US.UTF-8).

  • PATH – O caminho de execução (/usr/local/bin:/usr/bin/:/bin:/opt/bin).

  • LD_LIBRARY_PATH – o caminho da biblioteca do sistema (/lib64:/usr/lib64:$LAMBDA_RUNTIME_DIR:$LAMBDA_RUNTIME_DIR/lib:$LAMBDA_TASK_ROOT:$LAMBDA_TASK_ROOT/lib:/opt/lib).

  • NODE_PATH – (Node.js) o caminho da biblioteca Node.js (/opt/nodejs/node12/node_modules/:/opt/nodejs/node_modules:$LAMBDA_RUNTIME_DIR/node_modules).

  • PYTHONPATH – (Python 2.7, 3.6, 3.8) o caminho da biblioteca Python ($LAMBDA_RUNTIME_DIR).

  • GEM_PATH – (Ruby) o caminho da biblioteca Ruby ($LAMBDA_TASK_ROOT/vendor/bundle/ruby/2.5.0:/opt/ruby/gems/2.5.0).

  • AWS_XRAY_CONTEXT_MISSING – para o rastreamento do X-Ray, o Lambda define isso como LOG_ERROR para evitar a execução de erros de tempo de execução no SDK do X-Ray.

  • AWS_XRAY_DAEMON_ADDRESS – para o X-Ray, configure o endereço IP e a porta do daemon do X-Ray.

Os valores de exemplo mostrados refletem os tempos de execução mais recentes. A presença de variáveis específicas ou seus valores pode variar nos tempos de execução anteriores.

Proteger variáveis de ambiente

O Lambda criptografa variáveis de ambiente com uma chave que ele cria na sua conta (uma chave mestra do cliente (CMK) gerenciada pela AWS). O uso dessa chave é gratuito. Você também pode optar por fornecer sua própria chave para ser usada pelo Lambda em vez da chave padrão.

Quando você fornece a chave, somente os usuários em sua conta com acesso à chave podem visualizar ou gerenciar variáveis de ambiente na função. Sua organização também pode ter requisitos internos ou externos para gerenciar as chaves usadas para criptografia e para controlar quando elas são rotacionadas.

Para usar uma CMK gerenciada pelo cliente

  1. Abra a página Functions (Funções) do console do Lambda.

  2. Escolha uma função.

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

  4. Expanda Encryption configuration (Configuração de criptografia).

  5. Escolha Uso de chave mestra do cliente.

  6. Escolha a CMK gerenciada pelo cliente.

  7. Escolha Save (Salvar).

As CMKs gerenciadas pelo cliente incorrem em cobranças do AWS KMS padrão.

Para usar a chave de criptografia padrão, não é necessária nenhuma permissão do AWS KMS para o usuário ou para a função de execução da função. Para usar uma CMK gerenciada pelo cliente, é necessário permissão para usar a chave. O Lambda usa essas permissões para criar uma concessão na chave. Isso permite que o Lambda use-a para criptografia.

  • kms:ListAliases – para visualizar as teclas no console do Lambda.

  • kms:CreateGrant kms:Encrypt – para configurar uma CMK gerenciada pelo cliente em uma função.

  • kms:Decrypt – para visualizar e gerenciar variáveis de ambiente criptografadas com uma CMK gerenciada pelo cliente.

É possível obter essas permissões da sua conta de usuário ou da política de permissão baseada em recursos de uma chave. ListAliases é fornecido pelas políticas gerenciadas para o Lambda. As políticas de chave concedem as permissões restantes aos usuários no grupo Usuários de chaves.

Os usuários sem permissões Decrypt ainda poderão gerenciar funções, mas não poderão visualizar variáveis de ambiente nem gerenciá-las no console do Lambda. Para impedir que um usuário visualize variáveis de ambiente, adicione uma declaração às permissões do usuário que negue o acesso à chave padrão, a uma chave gerenciada pelo cliente ou a todas as chaves.

exemplo Política do IAM – negar acesso pelo ARN da chave

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Deny", "Action": [ "kms:Decrypt" ], "Resource": "arn:aws:kms:us-east-2:123456789012:key/3be10e2d-xmpl-4be4-bc9d-0405a71945cc" } ] }

        Mensagem de erro para o usuário sem permissões para descriptografar no console do Lambda.

Para obter detalhes sobre o gerenciamento de permissões de chaves, consulte Usar políticas de chaves no AWS KMS.

Também é possível criptografar valores de variáveis de ambiente no lado do cliente antes de enviá-los para o Lambda, e descriptografá-los em seu código de função. Isso obscurece valores secretos na saída do console e da API do Lambda, mesmo para usuários que têm permissão para usar a chave. Em seu código, você recupera o valor criptografado do ambiente e o descriptografa a API do AWS KMS.

Como criptografar variáveis de ambiente no lado do cliente

  1. Abra a página Functions (Funções) do console do Lambda.

  2. Escolha uma função.

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

  4. Expanda Encryption configuration (Configuração de criptografia).

  5. Escolha Enable helpers for encryption in transit (Ativar auxiliares para criptografia em trânsito).

  6. Escolha Encrypt (Criptografar) ao lado de uma variável, para criptografar seu valor.

  7. Escolha Save (Salvar).

nota

Quando você usa os auxiliares de criptografia do console, sua função precisa de permissão para chamar a operação de API kms:Decrypt na função de execução.

Para exibir o código de exemplo para o idioma da sua função, escolha Code (Código) ao lado de uma variável de ambiente. O código de exemplo mostra como recuperar uma variável de ambiente em uma função e descriptografar seu valor.

Outra opção é armazenar senhas nos segredos do AWS Secrets Manager. É possível fazer referência ao segredo em seus modelos do AWS CloudFormation para definir senhas em bancos de dados. Também é possível definir o valor de uma variável de ambiente na função do Lambda. Consulte a próxima seção para ver um exemplo.

Configurar variáveis de ambiente com a API do Lambda

Para gerenciar variáveis de ambiente com a AWS CLI ou o SDK da AWS, use as operações de API a seguir.

O exemplo a seguir define duas variáveis de ambiente em uma função denominada my-function.

$ aws lambda update-function-configuration --function-name my-function \ --environment "Variables={BUCKET=my-bucket,KEY=file.txt}"

Quando você aplica variáveis de ambiente com o comando update-function-configuration, todo o conteúdo da estrutura Variables é substituído. Para manter variáveis de ambiente existentes ao adicionar uma nova, inclua todos os valores existentes em sua solicitação.

Para obter a configuração atual, use o comando get-function-configuration.

$ aws lambda get-function-configuration --function-name my-function { "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs12.x", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Environment": { "Variables": { "BUCKET": "my-bucket", "KEY": "file.txt" } }, "RevisionId": "0894d3c1-2a3d-4d48-bf7f-abade99f3c15", ... }

Para garantir que os valores não mudam entre a leitura da configuração e a atualização desta, você pode passar o ID de revisão da saída de get-function-configuration como um parâmetro para update-function-configuration.

Para configurar a chave de criptografia de uma função, defina a opção KMSKeyARN.

$ aws lambda update-function-configuration --function-name my-function \ --kms-key-arn arn:aws:kms:us-east-2:123456789012:key/055efbb4-xmpl-4336-ba9c-538c7d31f599

Modelos e código de exemplo

Os aplicativos de exemplo no repositório do GitHub deste guia demonstram a utilização de variáveis de ambiente em modelos de código de função e AWS CloudFormation.

Aplicativos de exemplo

  • Função em branco – crie uma função e um tópico do Amazon SNS no mesmo modelo. Passe o nome do tópico para a função em uma variável de ambiente. Leia variáveis de ambiente no código (vários idiomas).

  • RDS MySQL – crie uma VPC e uma instância de banco de dados do Amazon RDS em um modelo, com uma senha armazenada no Secrets Manager. No modelo de aplicativo, importe detalhes do banco de dados da pilha da VPC, leia a senha do Secrets Manager e passe toda a configuração da conexão para a função em variáveis de ambiente.