AWS Lambda
Guia do desenvolvedor

Variáveis de ambiente do AWS Lambda

As variáveis de ambiente para as funções do Lambda permitem que você passe dinamicamente as configurações para seu código de função e bibliotecas sem fazer alterações no código. As variáveis de ambiente são pares de chave-valor que você cria e modifica como parte de sua configuração de função, usando o console do AWS Lambda, a CLI do AWS Lambda ou o AWS Lambda SDK. O AWS Lambda então disponibiliza esses pares de chave-valor para o código da sua função do Lambda usando APIs padrão com suporte pela linguagem, como process.env para funções Node.js.

Você pode usar variáveis de ambiente para ajudar as bibliotecas a saberem em qual diretório instalar os arquivos, onde armazenar saídas, armazenar configurações de conexão e logs e muito mais. Ao separar essas configurações da lógica do aplicativo, você não precisará atualizar o código da função quando precisar alterar o comportamento de função com base em diferentes configurações.

Configuração

Vamos supor que você queira que a função Lambda se comporte de forma diferente à medida passa pelos estágios do ciclo de vida, do desenvolvimento à implantação. Por exemplo, os estágios de desenvolvimento, teste e produção podem conter bancos de dados aos quais a função precise se conectar que exigem diferentes informações de conexão e usam diferentes nomes de tabela. Você pode criar variáveis do ambiente para fazer referência a nomes de banco de dados, informações de conexão ou nomes de tabela e definir o valor para a função com base no estágio no qual ela é executada (por exemplo, desenvolvimento, teste, produção), enquanto o código da função permanece inalterado.

As seguintes capturas de tela mostram como modificar a configuração da sua função usando o console da AWS. A primeira captura de tela faz as configurações da função correspondente ao estágio de teste. A segunda faz as configurações de uma etapa de produção.

Observe a seção Encryption configuration. Você aprenderá mais sobre como usá-la no tutorial Criar uma função Lambda usando variáveis de ambiente para armazenar informações confidenciais.

Você também poderá usar a AWS CLI para criar funções Lambda que contenham variáveis do ambiente. Para obter mais detalhes, consulte as APIs CreateFunction e UpdateFunctionConfiguration. Há suporte também para as variáveis de ambiente ao criar e atualizar funções usando o AWS CloudFormation. As variáveis de ambiente também podem ser usadas para fazer configurações específicas do runtime da linguagem ou uma biblioteca incluída na sua função. Por exemplo, você pode modificar PATH para especificar um diretório no qual os executáveis são armazenados. Você também pode definir variáveis de ambiente específicas do runtime, como PYTHONPATH para Python ou NODE_PATH para Node.js.

O exemplo a seguir cria uma nova função do Lambda, que define a variável de ambiente LD_LIBRARY_PATH, usada para especificar um diretório no qual as bibliotecas compartilhadas são carregadas dinamicamente no runtime. Neste exemplo, o código da função do Lambda usa a biblioteca compartilhada no diretório /usr/bin/test/lib64. Observe que o parâmetro Runtime usa nodejs6.10, mas você também pode especificar nodejs8.10.

$ aws lambda create-function --function-name myTestFunction \ --zip-file fileb://package.zip \ --role role-arn \ --environment Variables="{LD_LIBRARY_PATH=/usr/bin/test/lib64}" \ --handler index.handler --runtime nodejs6.10

Regras para dar nome às variáveis de ambiente

Não há limite para o número de variáveis do ambiente que você pode criar, desde que o tamanho total do conjunto não exceda 4 KB.

Outros requisitos incluem:

  • Deve começar com letras [a-zA-Z].

  • Só pode conter caracteres alfanuméricos e sublinhados ([a-zA-Z0-9_].

Além disso, há um conjunto específico de teclas reservadas para o AWS Lambda. Se você tentar definir os valores de qualquer uma dessas chaves reservadas, receberá uma mensagem de erro indicando que a ação não é permitida. Para mais informações sobre essas chaves, consulte Variáveis de ambiente disponíveis para funções de Lambda.

Variáveis de ambiente e versionamento da função

O versionamento da função cria uma maneira de gerenciar o código da sua função do Lambda, permitindo que você publique uma ou mais versões da sua função do Lambda à medida que passa do desenvolvimento para o teste e daí para a produção. Para cada versão de uma função do Lambda que você publicar, as variáveis de ambiente (e outras configurações específicas da função, como limite de MemorySize e Timeout) são salvas como snapshot dessa versão, e essas configurações são imutáveis (não podem ser alteradas).

À medida que os requisitos de aplicativos e configuração evoluem, você pode criar novas versões da sua função Lambda e atualizar as variáveis do ambiente para atender a esses requisitos antes de a versão mais recente ser publicada. A versão atual da sua função é $LATEST.

Além disso, você pode criar aliases, que são indicadores para uma versão específica da sua função. A vantagem dos aliases é que, se você precisar reverter para uma versão anterior da função, indicará o alias para essa versão, que contém as variáveis de ambiente necessárias para essa versão. Para obter mais informações, consulte Versionamento e aliases da função AWS Lambda.

Criptografia da variável de ambiente

Quando você cria ou atualiza as funções do Lambda que usam variáveis de ambiente, o AWS Lambda as criptografa usando o AWS Key Management Service. Quando sua função do Lambda for invocada, esses valores serão descriptografados e disponibilizados ao código do Lambda.

Na primeira vez que você criar ou atualizar funções Lambda que usam variáveis do ambiente em uma região, uma chave de serviço padrão será criada para você automaticamente dentro do AWS KMS. Essa chave é usada para criptografar variáveis de ambiente. No entanto, se você quiser usar auxiliares de criptografia e usar o KMS para criptografar variáveis de ambiente depois de sua função do Lambda ser criada, será preciso criar sua própria chave do AWS KMS e escolhê-la em vez de escolher a chave padrão. A chave padrão dará erros quando escolhida. Criar sua própria chave oferece mais flexibilidade, incluindo a capacidade de criar, ativar, desativar e definir controles de acesso, além de auditar as chaves de criptografia usadas para proteger seus dados. Para obter mais informações, consulte Guia do Desenvolvedor do AWS Key Management Service.

Se você usar sua própria chave, será cobrado de acordo com as diretrizes de Definição de preço do AWS Key Management Service. Você não será cobrado se usar a chave de serviço padrão fornecida pelo AWS Lambda.

Se você estiver usando a chave de serviço KMS padrão para Lambda, nenhuma permissão adicional do IAM será necessária na sua função de execução – a função funcionará automaticamente, sem alterações. Se você estiver fornecendo a sua própria chave de KMS (personalizada), precisará adicionar kms:Decrypt à sua função de execução. Além disso, o usuário que criará e atualizará a função Lambda deve ter permissões para usar a chave do KMS. Para obter mais informações sobre chaves de KMS, consulte Uso de políticas de chave no AWS KMS.

nota

O AWS Lambda autoriza sua função a usar a chave KMS padrão por meio de uma concessão de usuário, que é adicionada quando você atribui a função para a função. Se você excluir a função e criar outra com o mesmo nome, você precisará atualizar a concessão da função. Atualize a concessão reatribuindo a função para a função.

Armazenamento de informações confidenciais

Como mencionado na seção anterior, ao implantar sua função Lambda, todas as variáveis de ambiente especificadas por você serão criptografadas por padrão depois, mas não durante o processo de implantação. Elas serão, então, descriptografadas automaticamente pelo AWS Lambda quando a função for invocada. Se você precisar armazenar informações confidenciais em uma variável de ambiente, sugerimos enfaticamente que você criptografe essas informações antes de implantar sua função Lambda.

Felizmente, o console do Lambda facilita isso para você, pois fornece auxiliares de criptografia que usam o AWS Key Management Service para armazenar essas informações confidenciais como Ciphertext. O console do Lambda também fornece o código auxiliar de descriptografia para descriptografar essas informações para uso no código da sua função do Lambda. Para obter mais informações, consulte Criar uma função Lambda usando variáveis de ambiente para armazenar informações confidenciais.

Cenários de erro

Se a configuração da sua função exceder 4 KB, ou se você usar chaves de variáveis do ambiente reservadas pelo AWS Lambda, sua operação de atualização ou criação falhará com um erro de configuração. Durante o tempo de execução, é possível que a criptografia/descriptografia das variáveis do ambiente falhem. Se o AWS Lambda não conseguir descriptografar as variáveis de ambiente por causa de uma exceção de serviço do AWS KMS, o AWS KMS retornará uma mensagem de exceção explicando quais são as condições de erro e quais remédios, se houver, você pode aplicar para resolver o problema. Esses erros serão registrados no fluxo de log da função do Amazon CloudWatch Logs. Por exemplo, se a chave do KMS que você estiver usando para acessar as variáveis de ambiente estiver desativada, você verá o seguinte erro:

Lambda was unable to configure access to your environment variables because the KMS key used is disabled. Please check your KMS key settings.