Uso de parámetros Parameter Store en funciones AWS Lambda - AWS Systems Manager

Uso de parámetros Parameter Store en funciones AWS Lambda

Parameter Store, una capacidad de AWS Systems Manager, proporciona un almacenamiento seguro y jerárquico para la administración de los datos de configuración y de los secretos. Puede almacenar datos como contraseñas, cadenas de base de datos, ID de Amazon Machine Image (AMI) y códigos de licencia como valores de parámetros.

Para usar parámetros de Parameter Store en funciones AWS Lambda sin usar un SDK, puede usar la extensión de Lambda para secretos y parámetros de AWS. Esta extensión recupera los valores de los parámetros y los almacena en la caché para usarlos en el futuro. El uso de la extensión Lambda puede reducir sus costos al reducir la cantidad de llamadas a la API a Parameter Store. El uso de la extensión también puede mejorar la latencia, ya que recuperar un parámetro almacenado en caché es más rápido que recuperarlo de Parameter Store.

Una extensión de Lambda es un proceso complementario que se suma a las capacidades de una función Lambda. Una extensión es como un cliente que se ejecuta en paralelo a una invocación de Lambda. Este cliente paralelo puede interactuar con su función en cualquier momento de su ciclo de vida. Para obtener más información sobre las extensiones de Lambda, consulte Extensiones de Lambda en la Guía para desarrolladores de AWS Lambda.

La extensión de Lambda para secretos y parámetros de AWS funciona tanto para Parameter Store como para AWS Secrets Manager. Para aprender a usar la extensión de Lambda con los secretos de Secrets Manager, consulte Utilizar secretos de AWS Secrets Manager en funciones AWS Lambda en la Guía del usuario de AWS Secrets Manager.

Información relacionada

Uso de la extensión de Lambda Parameter and Secrets de AWS para almacenar parámetros y secretos en caché (Compute Blog AWS)

Cómo funciona la extensión

Para utilizar parámetros en una función Lambda sin la extensión de Lambda, debe configurar su función Lambda para recibir actualizaciones de configuración mediante la integración con la acción de la API GetParameter para Parameter Store.

Cuando utiliza la extensión de Lambda para secretos y parámetros de AWS, la extensión recupera el valor del parámetro Parameter Store y lo almacena en la memoria caché local. A continuación, el valor almacenado en la caché se utiliza para otras invocaciones hasta que caduque. Los valores en la memoria caché caducan una vez transcurrido su tiempo de vida (TTL). Puede configurar el valor TTL mediante la variable de entorno SSM_PARAMETER_STORE_TTL, como se explica más adelante en este tema.

Si el TTL de la caché configurado no ha caducado, se utiliza el valor del parámetro almacenado en la caché. Si el periodo ha caducado, el valor almacenado en caché se invalida y se recupera el valor del parámetro Parameter Store.

Además, el sistema detecta los valores de los parámetros que se utilizan con frecuencia y los mantiene en la memoria caché mientras borra los que están caducados o no se utilizan.

Detalles de la implementación

Utilice los siguientes detalles para ayudarle a configurar la extensión de Lambda para secretos y parámetros de AWS.

Autenticación

Para autorizar y autenticar las solicitudes de Parameter Store, la extensión usa las mismas credenciales que las que se utilizan para ejecutar la propia función Lambda. Por lo tanto, el rol de (IAM) AWS Identity and Access Management utilizado para ejecutar la función debe tener los siguientes permisos para interactuar con Parameter Store:

  • ssm:GetParameter: necesario para recuperar parámetros de Parameter Store

  • kms:Decrypt: necesario si está recuperando parámetros de SecureString desde Parameter Store

Para obtener más información, consulte Rol de ejecución de AWS Lambda en la Guía para desarrolladores de AWS Lambda.

Instanciación

Lambda crea instancias independientes correspondientes al nivel de simultaneidad que requiere la función. Cada instancia está aislada y mantiene su propia memoria caché local de los datos de configuración. Para obtener más información sobre las instancias de Lambda y la simultaneidad, consulte Configuración de la simultaneidad reservada en la Guía para desarrolladores de AWS Lambda.

Sin dependencia del SDK

La extensión de Lambda para secretos y parámetros de AWS funciona independientemente de cualquier biblioteca de lenguajes del SDK de AWS. No se requiere un SDK de AWS para realizar solicitudes GET a Parameter Store.

Puerto del Localhost

Utilice localhost en sus solicitudes GET. La extensión hace solicitudes al puerto 2773 de localhost. No tiene que especificar un punto de conexión externo o interno para usar la extensión. Para configurar el puerto, establezca la variable de entorno PARAMETERS_SECRETS_EXTENSION_HTTP_PORT.

Por ejemplo, en Python, GET URL puede tener un aspecto similar al del siguiente ejemplo.

parameter_url = ('http://localhost:' + port + '/systemsmanager/parameters/get/?name=' + ssm_parameter_path)
Cambios en el valor de un parámetro antes de que caduque el TTL

La extensión no detecta cambios en el valor del parámetro y no realiza una actualización automática antes de que caduque el TTL. Si cambia el valor de un parámetro, las operaciones que utilizan el valor del parámetro almacenado en la caché pueden fallar hasta que se actualice la memoria caché de nuevo. Si espera cambios frecuentes en el valor de un parámetro, le recomendamos establecer un valor de TTL más corto.

Requisito de encabezado

Para recuperar los parámetros de la caché de la extensión, el encabezado de la solicitud GET debe incluir una referencia de X-Aws-Parameters-Secrets-Token. Configure el token en AWS_SESSION_TOKEN, que Lambda proporciona para todas las funciones en ejecución. El uso de este encabezado indica que el intermediario se encuentra en el entorno de Lambda.

Ejemplo

El siguiente ejemplo en Python muestra una solicitud básica para recuperar el valor de un parámetro almacenado en caché.

import urllib.request import os import json aws_session_token = os.environ.get('AWS_SESSION_TOKEN') def lambda_handler(event, context): # Retrieve /my/parameter from Parameter Store using extension cache req = urllib.request.Request('http://localhost:2773/systemsmanager/parameters/get?name=%2Fmy%2Fparameter') req.add_header('X-Aws-Parameters-Secrets-Token', aws_session_token) config = urllib.request.urlopen(req).read() return json.loads(config)
Compatibilidad con ARM

La extensión no es compatible con la arquitectura ARM en todas las mismas Regiones de AWS cuando se admiten las arquitecturas x86_64 y x86.

Para obtener listas completas de los ARN de extensión, consulte ARN de la extensión AWS Parameters and Secrets Lambda.

Registro

Lambda registra la información de ejecución acerca de la extensión junto con la función mediante Registros de Amazon CloudWatch. De forma predeterminada, la extensión registra una cantidad mínima de información en CloudWatch. Para registrar más detalles, establezca la variable de entorno PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL en DEBUG.

Agregar la extensión a una función Lambda

Para usar la extensión de Lambda para secretos y parámetros de AWS, agregue la extensión a la función Lambda como una capa.

Utilice uno de los métodos siguientes para agregar la extensión a la función.

AWS Management Console (Opción Agregar capa)
  1. Abra la consola de AWS Lambda en https://console.aws.amazon.com/lambda/.

  2. Elija su función. En el área Layers (Capas), elija Add a layer (Agregar una capa).

  3. En el área Choose a layer (Elegir una capa), elija la opción AWS layers (Capas de ).

  4. En AWS layers (Capas de ), elija AWS-Parameters-and-Secrets-Lambda-Extension, elija una versión y, a continuación, elija Add (Agregar).

AWS Management Console(Opción Especificar ARN)
  1. Abra la consola de AWS Lambda en https://console.aws.amazon.com/lambda/.

  2. Elija su función. En el área Layers (Capas), elija Add a layer (Agregar una capa).

  3. En el área Choose a layer (Elegir una capa), elija la opción Specify an ARN (Especificar un ARN).

  4. En Specify an ARN (Especificar un ARN), ingrese la extensión de ARN para su Región de AWS y arquitectura y, a continuación, elija Add (Agregar).

AWS Command Line Interface

Ejecute el siguiente comando en la AWS CLI: Reemplace cada example resource placeholder con su propia información.

aws lambda update-function-configuration \ --function-name function-name \ --layers layer-ARN

Información relacionada

Uso de capas con su función de Lambda

Configuración de extensiones (archivo de archivo .zip)

Variables de entorno de la extensión AWS Parameters and Secrets Lambda

Puede configurar la extensión si cambia las siguientes variables de entorno. Para ver la configuración actual, establezca PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL en DEBUG. Para obtener más información, consulte Uso de variables de entorno de AWS Lambda en la Guía para desarrolladores de AWS Lambda.

nota

AWS Lambda registra los detalles de la operación sobre la extensión Lambda y la función Lambda en Registros de Amazon CloudWatch.

Variable de entorno Detalles Obligatoria Valores válidos Valor predeterminado

SSM_PARAMETER_STORE_TIMEOUT_MILLIS

Tiempo de espera, en milisegundos, para las solicitudes a Parameter Store.

Un valor de 0 (cero) indica que no hay tiempo de inactividad.

No Todos los números enteros 0 (cero)

SECRETS_MANAGER_TIMEOUT_MILLIS

Tiempo de espera, en milisegundos, para las solicitudes a Secrets Manager.

Un valor de 0 (cero) indica que no hay tiempo de inactividad.

No Todos los números enteros

0 (cero)

SSM_PARAMETER_STORE_TTL

Duración máxima válida, en segundos, de un parámetro de la caché antes de que se invalide. Un valor de 0 (cero) indica que se debe omitir la memoria caché. Esta variable se ignora si el valor de PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE es 0 (cero).

No 0 (cero) a 300 s (cinco minutos) 300 s (cinco minutos)

SECRETS_MANAGER_TTL

Duración máxima válida, en segundos, de un secreto de la caché antes de que se invalide. Un valor de 0 (cero) indica que se omite la memoria caché. Esta variable se ignora si el valor de PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE es 0 (cero).

No 0 (cero) a 300 s (cinco minutos) 300 s (5 minutos)
PARAMETERS_SECRETS_EXTENSION_CACHE_ENABLED

Determina si la caché está habilitada para la extensión. Valores válidos: TRUE | FALSE

No TRUE, FALSE TRUE
PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE

El tamaño máximo de la memoria caché en términos de número de elementos. Un valor de 0 (cero) indica que se omite la memoria caché. Esta variable se ignora si ambos valores de TTL de la caché son 0 (cero).

No 0 (cero) a 1000

1 000

PARAMETERS_SECRETS_EXTENSION_HTTP_PORT El puerto del servidor HTTP local. No 1 a 65535

2773

PARAMETERS_SECRETS_EXTENSION_MAX_CONNECTIONS

Cantidad máxima de conexiones para los clientes HTTP que la extensión utiliza para hacer solicitudes a Parameter Store o a Secrets Manager. Esta es una configuración por cliente para la cantidad de conexiones que tanto el cliente de Secrets Manager como el cliente de Parameter Store realizan a los servicios de back-end.

No Mínimo de 1; sin límite máximo.

3

PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL

El nivel de detalle indicado en los registros de la extensión.

Le recomendamos que utilice DEBUG para obtener más detalles sobre la configuración de la memoria caché a medida que configura y prueba la extensión.

Los registros de las operaciones de Lambda se envían automáticamente a un grupo de registro de Registros de CloudWatch asociado.

No

DEBUG | WARN | ERROR | NONE | INFO

INFO

Ejemplos de comandos para usar AWS Systems Manager Parameter Store y la extensión AWS Secrets Manager

Los ejemplos de esta sección muestran las acciones de la API para su uso con AWS Systems Manager Parameter Store y la extensión AWS Secrets Manager.

Comandos de ejemplo para Parameter Store

La extensión Lambda utiliza el acceso de solo lectura a la acción de la API GetParameter.

Para realizar esta acción, realice una llamada HTTP GET similar a la siguiente.

GET http://localhost:port/systemsmanager/parameters/get?name=parameter-path&version=version&label=label&withDecryption={true|false}

En este ejemplo, parameter-path representa el nombre completo del parámetro o la ruta del parámetro si el parámetro forma parte de una jerarquía. version y label son los selectores disponibles para su uso con la acción GetParameter. Este formato de comando proporciona acceso a los parámetros del nivel de parámetros estándar.

nota

Cuando se utilizan llamadas GET, los valores de los parámetros deben codificarse para que HTTP conserve los caracteres especiales. Por ejemplo, en lugar de formatear una ruta jerárquica como /a/b/c, codifique los caracteres que puedan interpretarse como parte de la URL, como %2Fa%2Fb%2Fc.

GET http://localhost:port/systemsmanager/parameters/get/?name=MyParameter&version=5

Para llamar a un parámetro de una jerarquía, realice una llamada HTTP GET similar a la siguiente.

GET http://localhost:port/systemsmanager/parameters/get?name=%2Fa%2Fb%2F&label=release

Para llamar a un parámetro público (global), realice una llamada HTTP GET similar a la siguiente.

GET http://localhost:port/systemsmanager/parameters/get/?name=%2Faws%2Fservice%20list%2F…

Para realizar una llamada HTTP GET a un secreto de Secrets Manager mediante referencias de Parameter Store, realice una llamada HTTP GET similar a la siguiente.

GET http://localhost:port/systemsmanager/parameters/get?name=%2Faws%2Freference%2Fsecretsmanager%2F…

Para realizar una llamada con el nombre de recurso de Amazon (ARN) para un parámetro, realice una llamada HTTP GET similar a la siguiente.

GET http://localhost:port/systemsmanager/parameters/get?name=arn:aws:ssm:us-east-1:123456789012:parameter/MyParameter

Para realizar una llamada que acceda a un parámetro SecureString con descifrado, realice una llamada HTTP GET similar a la siguiente.

GET http://localhost:port/systemsmanager/parameters/get?name=MyParameter&withDecryption=true

Puede especificar que los parámetros no se descifren si omite withDecryption o con una configuración false explícita. También puede especificar una versión o una etiqueta, pero no ambas. Si lo hace, solo se utilizará lo primero que se coloque después del signo de interrogación (?) en la URL.

ARN de la extensión AWS Parameters and Secrets Lambda

En las siguientes tablas se proporcionan los ARN de extensión para las arquitecturas y regiones compatibles.

ARN de extensión para arquitecturas x86_64 y x86

Región ARN

US East (Ohio)

arn:aws:lambda:us-east-2:590474943231:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Este de EE. UU. (Norte de Virginia)

arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Oeste de EE. UU. (Norte de California)

arn:aws:lambda:us-west-1:997803712105:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Oeste de EE. UU. (Oregón)

arn:aws:lambda:us-west-2:345057560386:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

África (Ciudad del Cabo)

arn:aws:lambda:af-south-1:317013901791:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Asia Pacific (Hong Kong)

arn:aws:lambda:ap-east-1:768336418462:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Región de Asia Pacífico (Hyderabad)

arn:aws:lambda:ap-south-2:070087711984:layer:AWS-Parameters-and-Secrets-Lambda-Extension:8

Asia-Pacífico (Yakarta)

arn:aws:lambda:ap-southeast-3:490737872127:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Asia-Pacífico (Melbourne)

arn:aws:lambda:ap-southeast-4:090732460067:layer:AWS-Parameters-and-Secrets-Lambda-Extension:1

Asia-Pacífico (Bombay)

arn:aws:lambda:ap-south-1:176022468876:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Asia-Pacífico (Osaka)

arn:aws:lambda:ap-northeast-3:576959938190:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Asia-Pacífico (Seúl)

arn:aws:lambda:ap-northeast-2:738900069198:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Asia-Pacífico (Singapur)

arn:aws:lambda:ap-southeast-1:044395824272:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Asia-Pacífico (Sídney)

arn:aws:lambda:ap-southeast-2:665172237481:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Asia-Pacífico (Tokio)

arn:aws:lambda:ap-northeast-1:133490724326:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Canadá (centro)

arn:aws:lambda:ca-central-1:200266452380:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Oeste de Canadá (Calgary arn:aws:lambda:ca-west-1:243964427225:layer:AWS-Parameters-and-Secrets-Lambda-Extension:1
China (Pekín)

arn:aws-cn:lambda:cn-north-1:287114880934:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

China (Ningxia)

arn:aws-cn:lambda:cn-northwest-1:287310001119:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Europa (Fráncfort)

arn:aws:lambda:eu-central-1:187925254637:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Europa (Irlanda)

arn:aws:lambda:eu-west-1:015030872274:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Europa (Londres)

arn:aws:lambda:eu-west-2:133256977650:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Europa (Milán)

arn:aws:lambda:eu-south-1:325218067255:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Europa (París)

arn:aws:lambda:eu-west-3:780235371811:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Región Europa (España)

arn:aws:lambda:eu-south-2:524103009944:layer:AWS-Parameters-and-Secrets-Lambda-Extension:8

Europa (Estocolmo)

arn:aws:lambda:eu-north-1:427196147048:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Israel (Tel Aviv)

arn:aws:lambda:il-central-1:148806536434:layer:AWS-Parameters-and-Secrets-Lambda-Extension:1

Región Europa (Zúrich)

arn:aws:lambda:eu-central-2:772501565639:layer:AWS-Parameters-and-Secrets-Lambda-Extension:8

Medio Oriente (Baréin)

arn:aws:lambda:me-south-1:832021897121:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Medio Oriente (EAU) arn:aws:lambda:me-central-1:858974508948:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

América del Sur (São Paulo)

arn:aws:lambda:sa-east-1:933737806257:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

AWS GovCloud (Este de EE. UU.)

arn:aws-us-gov:lambda:us-gov-east-1:129776340158:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

AWS GovCloud (Oeste de EE. UU.)

arn:aws-us-gov:lambda:us-gov-west-1:127562683043:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

ARN de extensión para las arquitecturas ARM64 y Mac with Apple silicon

Región ARN

US East (Ohio)

arn:aws:lambda:us-east-2:590474943231:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

Este de EE. UU. (Norte de Virginia)

arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

Región del oeste de EE. UU. (Norte de California)

arn:aws:lambda:us-west-1:997803712105:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

Oeste de EE. UU. (Oregón)

arn:aws:lambda:us-west-2:345057560386:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

Región África (Ciudad del Cabo)

arn:aws:lambda:af-south-1:317013901791:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

Región de Asia-Pacífico (Hong Kong)

arn:aws:lambda:ap-east-1:768336418462:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

Región Asia-Pacífico (Yakarta)

arn:aws:lambda:ap-southeast-3:490737872127:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

Asia-Pacífico (Bombay)

arn:aws:lambda:ap-south-1:176022468876:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

Asia-Pacífico (Osaka)

arn:aws:lambda:ap-northeast-3:576959938190:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

Región de Asia-Pacífico (Seúl)

arn:aws:lambda:ap-northeast-2:738900069198:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

Asia-Pacífico (Singapur)

arn:aws:lambda:ap-southeast-1:044395824272:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

Asia-Pacífico (Sídney)

arn:aws:lambda:ap-southeast-2:665172237481:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

Asia-Pacífico (Tokio)

arn:aws:lambda:ap-northeast-1:133490724326:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

Región de Canadá (centro)

arn:aws:lambda:ca-central-1:200266452380:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

Europa (Fráncfort)

arn:aws:lambda:eu-central-1:187925254637:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

Europa (Irlanda)

arn:aws:lambda:eu-west-1:015030872274:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

Europa (Londres)

arn:aws:lambda:eu-west-2:133256977650:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

Región Europa (Milán)

arn:aws:lambda:eu-south-1:325218067255:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

Región de Europa (París)

arn:aws:lambda:eu-west-3:780235371811:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

Región Europa (Estocolmo)

arn:aws:lambda:eu-north-1:427196147048:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

Región Medio Oriente (Baréin)

arn:aws:lambda:me-south-1:832021897121:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

Región América del Sur (São Paulo)

arn:aws:lambda:sa-east-1:933737806257:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8