Uso de variables de entorno de AWS Lambda - AWS Lambda

Uso de variables de entorno de AWS Lambda

Puede usar variables de entorno para ajustar el comportamiento de su función sin actualizar el código. Una variable de entorno es un par de cadenas almacenadas en la configuración específica de la versión de una función. El tiempo de ejecución de Lambda hace que las variables de entorno estén disponibles para el código y establece variables de entorno adicionales que contienen información sobre la función y la solicitud de invocación.

nota

Para aumentar la seguridad de la base de datos, se recomienda utilizar AWS Secrets Manager en lugar de variables de entorno para almacenar las credenciales de la base de datos. Para obtener más información, consulte Configuración del acceso a la base de datos para una función de Lambda .

Las variables de entorno no se evalúan antes de la invocación de la función. Cualquier valor que defina se considera una cadena literal y no expandida. Realice la evaluación de variables en el código de función.

Configuración de variables de entorno

Las variables de entorno se definen en la versión no publicada de la función. Al publicar una versión, las variables de entorno se bloquean para esa versión junto con otra configuración específica de la versión.

Puede crear una variable de entorno en su función definiendo una clave y un valor. Su función utiliza el nombre de la clave para recuperar el valor de la variable de entorno.

Para establecer variables de entorno en la Lambda consola

  1. Abra la Página de funciones en la consola de Lambda.

  2. Elija una función.

  3. Elija Configuración y, a continuación, elija Variables de entorno.

  4. En Environment variables (Variables de entorno), elija Edit (Editar).

  5. Elija Add environment variable (Añadir variable de entorno).

  6. Introduzca una clave y un valor.

    Requisitos

    • Las claves comienzan con una letra y tienen como mínimo dos caracteres.

    • Las claves solo contienen letras, números y guiones bajos (_).

    • Las llaves no están reservadas por Lambda.

    • El tamaño total de todas las variables de entorno no supera los 4 KB.

  7. Seleccione Save.

Configuración de variables de entorno con la API

Para administrar variables de entorno con la AWS CLI o el SDK de AWS, utilice las siguientes operaciones de la API.

En el ejemplo siguiente se establecen dos variables de entorno en una función denominada my-function.

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

Cuando se aplican variables de entorno con el comando update-function-configuration, se remplaza todo el contenido de la Variables estructura. Para conservar las variables de entorno existentes al agregar una nueva, incluya todos los valores existentes en la solicitud.

Para obtener la configuración actual, use el comando get-function-configuration.

aws lambda get-function-configuration --function-name my-function

Debería ver los siguientes datos de salida:

{ "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 asegurarse de que los valores no cambian entre cuando lee la configuración y cuando la actualiza, puede pasar el ID de revisión del resultado de get-function-configuration como parámetro a update-function-configuration.

Para configurar la clave de cifrado de una función, establezca la opción 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

Escenario de ejemplo para variables de entorno

Puede usar variables de entorno para personalizar el comportamiento de la función en su entorno de prueba y entorno de producción. Por ejemplo, puede crear dos funciones con el mismo código pero con configuración diferente. Una función se conecta a una base de datos de prueba y la otra se conecta a una base de datos de producción. En esta situación, se utilizan variables de entorno para indicar a la función el nombre de host y otros detalles de conexión para la base de datos.

En el ejemplo siguiente se muestra cómo definir el host de base de datos y el nombre de base de datos como variables de entorno.


        Variables de entorno en la consola de Lambda.

Si desea que su entorno de prueba genere más información de depuración que el entorno de producción, puede establecer una variable de entorno para configurar su entorno de prueba para utilizar un registro más detallado o un seguimiento más detallado.

Recuperar variables de entorno

Para recuperar variables de entorno en el código de función, utilice el método estándar para el lenguaje de programación.

Node.js
let region = process.env.AWS_REGION
Python
import os region = os.environ['AWS_REGION']
nota

En algunos casos, es posible que deba usar el siguiente formato:

region = os.environ.get('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

Lambda almacena variables de entorno de forma segura cifrándolas en reposo. Puede configurar Lambda para que utilice una clave de cifrado diferente, cifrar valores de variables de entorno del lado del cliente o establezca variables de entorno en una plantilla de AWS CloudFormation con AWS Secrets Manager.

Variables definidas de entorno de tiempo de ejecución

Los tiempos de ejecución de Lambda establecen varias variables de entorno durante la inicialización. La mayoría de las variables de entorno proporcionan información sobre la función o el tiempo de ejecución. Las claves para estas variables de entorno están reservadas y no se pueden establecer en la configuración de la función.

Variables de entorno reservadas

  • _HANDLER: localización del controlador configurada en la función.

  • _X_AMZN_TRACE_ID: el encabezado de rastreo X-Ray.

  • AWS_REGION: la región de AWS donde se ejecuta la función de Lambda.

  • AWS_EXECUTION_ENV: el identificador de tiempo de ejecución, precedido por AWS_Lambda_ (por ejemplo, AWS_Lambda_java8).

  • AWS_LAMBDA_FUNCTION_NAME: el nombre de la función.

  • AWS_LAMBDA_FUNCTION_MEMORY_SIZE: la cantidad de memoria disponible para la función en MB.

  • AWS_LAMBDA_FUNCTION_VERSION: la versión de la función que se está ejecutando.

    AWS_LAMBDA_INITIALIZATION_TYPE – El tipo de inicialización de la función, que es on-demand o provisioned-concurrency. Para obtener información, consulte Configuración de concurrencia aprovisionada.

  • AWS_LAMBDA_LOG_GROUP_NAME, AWS_LAMBDA_LOG_STREAM_NAME: el nombre del grupo Amazon CloudWatch Logs y el flujo de la función.

  • AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN: las claves de acceso obtenidas del rol de ejecución de la función.

  • AWS_LAMBDA_RUNTIME_API: (Tiempo de ejecución personalizado) El host y el puerto de la API de tiempo de ejecución.

  • LAMBDA_TASK_ROOT: la ruta al código de la función de Lambda.

  • LAMBDA_RUNTIME_DIR: la ruta a las bibliotecas de tiempos de ejecución.

  • TZ: la zona horaria del entorno (UTC). El entorno de ejecución utiliza NTP para sincronizar el reloj del sistema.

Las siguientes variables de entorno adicionales no están reservadas y pueden ampliarse en la configuración de la función.

Variables de entorno sin reserva

  • LANG: la configuración regional del tiempo de ejecución (en_US.UTF-8).

  • PATH: la ruta de ejecución (/usr/local/bin:/usr/bin/:/bin:/opt/bin).

  • LD_LIBRARY_PATH: la ruta de acceso de la biblioteca del sistema (/lib64:/usr/lib64:$LAMBDA_RUNTIME_DIR:$LAMBDA_RUNTIME_DIR/lib:$LAMBDA_TASK_ROOT:$LAMBDA_TASK_ROOT/lib:/opt/lib).

  • NODE_PATH: (Node.js) La ruta de la 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) La ruta de la biblioteca de Python ($LAMBDA_RUNTIME_DIR).

  • GEM_PATH: (Ruby) La ruta de la biblioteca Ruby ($LAMBDA_TASK_ROOT/vendor/bundle/ruby/2.5.0:/opt/ruby/gems/2.5.0).

  • AWS_XRAY_CONTEXT_MISSING: para el seguimiento de X-Ray, Lambda establece esto en LOG_ERROR para evitar arrojar errores de tiempo de ejecución desde el SDK de X-Ray.

  • AWS_XRAY_DAEMON_ADDRESS: para el seguimiento de X-Ray, la dirección IP y el puerto del demonio de X-Ray.

  • AWS_LAMBDA_DOTNET_PREJIT – Para el tiempo de ejecución de.NET 3.1, establezca esta variable para habilitar o deshabilitar optimizaciones específicas de tiempo de ejecución de.NET 3.1. Los valores incluyen always, never, y provisioned-concurrency. Para obtener información, consulte Configuración de concurrencia aprovisionada.

Los valores de muestra presentados reflejan los últimos tiempos de ejecución. La presencia de variables específicas o sus valores pueden variar en tiempos de ejecución anteriores.

Proteger variables de entorno

Lambda cifra las variables de entorno con una clave que crea en su cuenta (una clave maestra de cliente (CMK) administrada por AWS). El uso de esta clave es gratuito. También puede optar por proporcionar su propia clave para Lambda y usarla en lugar de la clave predeterminada.

Cuando proporciona la clave, sólo los usuarios de su cuenta con acceso a la clave pueden ver o administrar variables de entorno en la función. Su organización también podría tener requisitos internos o externos para administrar las claves que son utilizadas para el cifrado y el control cuando se rotan.

Utilice una CMK administrada por el cliente.

  1. Abra la Página de funciones en la consola de Lambda.

  2. Elija una función.

  3. Elija Configuración y, a continuación, elija Variables de entorno.

  4. En Environment variables (Variables de entorno), elija Edit (Editar).

  5. Expanda Encryption configuration (Configuración de cifrado).

  6. Seleccione Use a customer master key (Usar una clave maestra de cliente).

  7. Elija su CMK administrada por el cliente.

  8. Elija Save (Guardar).

Las CMK gestionadas por el cliente incurren en cargos de AWS KMSestándar.

No se requieren permisos de AWS KMS para el usuario o el rol de ejecución de la función para utilizar la clave de cifrado predeterminada. Para utilizar una CMK administrada por el cliente, necesita permisos de uso de la llave. Lambda usa sus permisos para crear una concesión en la clave. Esto permite a Lambda usarlo para el cifrado.

  • kms:ListAliases: para ver las teclas en la consola de Lambda.

  • kms:CreateGrant, kms:Encrypt: para configurar un CMK administrado por el cliente en una función.

  • kms:Decrypt: para ver y administrar variables de entorno cifradas con un CMK administrado por el cliente.

Puede obtener estos permisos a partir de su cuenta de usuario o a partir de la política de permisos basada en recursos de una clave. La ListAliases es proporcionada por las políticas administradas en Lambda. Las políticas clave conceden los permisos restantes a los usuarios del grupo Usuarios clave .

Los usuarios sin permisos Decrypt todavía pueden administrar funciones, pero no pueden ver variables de entorno ni administrarlas en la consola de Lambda. Para evitar que un usuario vea variables de entorno, añada una instrucción a los permisos del usuario que deniegue el acceso a la clave predeterminada, a una clave administrada por el cliente o a todas las claves.

ejemplo Política de IAM: denegar acceso por ARN de clave

{ "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" } ] }

        Mensaje de error para el usuario sin permisos de descifrado en la consola de Lambda.

Para obtener más información sobre la administración de permisos de clave, consulte Usar políticas de clave en AWS KMS.

También puede cifrar los valores de variables de entorno del lado del cliente antes de enviarlos a Lambda y descifrarlos en el código de función. Esto oscurece los valores secretos de la consola de Lambda y los resultados de la API, incluso para los usuarios que tienen permiso para usar la clave. En el código, recuperará el valor cifrado del entorno y lo descifrará mediante la API de AWS KMS.

Para cifrar variables de entorno en el lado del cliente

  1. Abra la Página de funciones en la consola de Lambda.

  2. Elija una función.

  3. Elija Configuración y, a continuación, elija Variables de entorno.

  4. En Environment variables (Variables de entorno), elija Edit (Editar).

  5. Expanda Encryption configuration (Configuración de cifrado).

  6. Seleccione Enable helpers for encryption in transit (Habilitar ayudantes para el cifrado en tránsito).

  7. Seleccione Encrypt (Cifrar) junto a una variable para cifrar su valor.

  8. Elija Save (Guardar).

nota

Cuando utiliza los ayudantes de cifrado de la consola, la función necesita permiso para llamar a la operación de la API kms:Decrypt en su rol de ejecución.

Para ver el código de ejemplo para el idioma de su función, seleccione Code (Código) junto a una variable de entorno. El código de ejemplo muestra cómo recuperar una variable de entorno en una función y descifrar su valor.

Otra opción es almacenar contraseñas en secretos AWS Secrets Manager. Puede hacer referencia al secreto en sus plantillas de AWS CloudFormation para establecer contraseñas en las bases de datos. También puede establecer el valor de una variable de entorno en la función de Lambda. Consulte la siguiente sección para ver un ejemplo.

Código de muestra y plantillas

Las aplicaciones de ejemplo en el repositorio de GitHub de esta guía demuestran el uso de variables de entorno en el código de función y en plantillas de AWS CloudFormation.

Aplicaciones de muestra

  • En blanco: cree una función y un tema de Amazon SNS en la misma plantilla. Pase el nombre del tema a la función en una variable de entorno. Leer variables de entorno en código (varios idiomas).

  • RDS MySQL: cree una VPC y una instancia de base de datos de Amazon RDS en una plantilla, con una contraseña almacenada en Secrets Manager. En la plantilla de aplicación, importe los detalles de la base de datos de la pila de VPC, lea la contraseña de Secrets Manager y pase toda la configuración de conexión a la función en variables de entorno.