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é
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.
importante
La extensión solo se puede invocar en la fase INVOKE
de Lambda y no durante la fase INIT
.
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 deSecureString
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 entornoPARAMETERS_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 enAWS_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 es compatible con la arquitectura ARM en la mayoría de las Regiones de AWS en las que se admiten las arquitecturas x86_64 y x86. Si utiliza la arquitectura ARM, le sugerimos que compruebe que su arquitectura sea compatible. 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
enDEBUG
.
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)
-
Abra la consola de AWS Lambda en https://console.aws.amazon.com/lambda/
. -
Elija su función. En el área Layers (Capas), elija Add a layer (Agregar una capa).
-
En el área Choose a layer (Elegir una capa), elija la opción AWS layers (Capas de ).
-
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)
-
Abra la consola de AWS Lambda en https://console.aws.amazon.com/lambda/
. -
Elija su función. En el área Layers (Capas), elija Add a layer (Agregar una capa).
-
En el área Choose a layer (Elegir una capa), elija la opción Specify an ARN (Especificar un ARN).
-
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
\ --layerslayer-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 |
---|---|---|---|---|
|
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) |
|
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) |
|
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 |
No | 0 (cero) a 300 s (cinco minutos) | 300 s (cinco minutos) |
|
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 |
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: |
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 backend. |
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 Los registros de las operaciones de Lambda se envían automáticamente a un grupo de registro de Registros de CloudWatch asociado. |
No |
|
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. Este formato de comando proporciona acceso a los parámetros del nivel de parámetros estándar.
GET http://localhost:
port
/systemsmanager/parameters/get?name=parameter-name
&version=version
&label=label
&withDecryption={true|false}
En este ejemplo, parameter-name
representa el nombre completo del parámetro, por ejemplo MyParameter
, para un parámetro que no está en una jerarquía o %2FDev%2FProduction%2FEast%2FProject-ABC%2FMyParameter
para un parámetro denominado /Dev/Production/East/Project-ABC/MyParameter
que forma parte de una jerarquía.
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
.
versión
y etiqueta
son los selectores disponibles para su uso con la acción GetParameter
.
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.
Temas
ARN de extensión para arquitecturas x86_64 y x86
Última actualización: 19 de septiembre de 2024
Región | ARN |
---|---|
US East (Ohio) |
|
Este de EE. UU. (Norte de Virginia) |
|
Oeste de EE. UU. (Norte de California) |
|
Oeste de EE. UU. (Oregón) |
|
África (Ciudad del Cabo) |
|
Asia Pacific (Hong Kong) |
|
Región de Asia Pacífico (Hyderabad) |
|
Asia-Pacífico (Yakarta) |
|
Asia-Pacífico (Melbourne) |
|
Asia-Pacífico (Malasia) |
arn:aws:lambda:ap-southeast-5:090732460067:layer:AWS-Parameters-and-Secrets-Lambda-Extension:1 |
Asia-Pacífico (Mumbai) |
|
Asia-Pacífico (Osaka) |
|
Asia-Pacífico (Seúl) |
|
Asia-Pacífico (Singapur) |
|
Asia-Pacífico (Sídney) |
|
Asia-Pacífico (Tokio) |
|
Canadá (centro) |
|
Oeste de Canadá (Calgary | arn:aws:lambda:ca-west-1:243964427225:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2 |
China (Pekín) |
|
China (Ningxia) |
|
Europa (Fráncfort) |
|
Europa (Irlanda) |
|
Europa (Londres) |
|
Europa (Milán) |
|
Europa (París) |
|
Región Europa (España) |
|
Europa (Estocolmo) |
|
Israel (Tel Aviv) |
|
Región Europa (Zúrich) |
|
Medio Oriente (Baréin) |
|
Medio Oriente (EAU) | arn:aws:lambda:me-central-1:858974508948:layer:AWS-Parameters-and-Secrets-Lambda-Extension:12 |
América del Sur (São Paulo) |
|
AWS GovCloud (Este de EE. UU.) |
|
AWS GovCloud (Oeste de EE. UU.) |
|
ARN de extensión para las arquitecturas ARM64 y Mac with Apple silicon
Última actualización: 19 de septiembre de 2024
Región | ARN |
---|---|
US East (Ohio) |
|
Este de EE. UU. (Norte de Virginia) |
|
Región del oeste de EE. UU. (Norte de California) |
|
Oeste de EE. UU. (Oregón) |
|
Región África (Ciudad del Cabo) |
|
Región de Asia-Pacífico (Hong Kong) |
|
Región de Asia Pacífico (Hyderabad) |
|
Región Asia-Pacífico (Yakarta) |
|
Asia-Pacífico (Melbourne) |
|
Asia-Pacífico (Malasia) |
arn:aws:lambda:ap-southeast-5:090732460067:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:1 |
Asia-Pacífico (Mumbai) |
|
Asia-Pacífico (Osaka) |
|
Región de Asia-Pacífico (Seúl) |
|
Asia-Pacífico (Singapur) |
|
Asia-Pacífico (Sídney) |
|
Asia-Pacífico (Tokio) |
|
Región de Canadá (centro) |
|
Oeste de Canadá (Calgary) | arn:aws:lambda:ca-west-1:243964427225:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:1 |
China (Pekín) |
|
China (Ningxia) |
|
Europa (Fráncfort) |
|
Europa (Irlanda) |
|
Europa (Londres) |
|
Región Europa (Milán) |
|
Región Europa (París) |
|
Región Europa (España) |
|
Región Europa (Estocolmo) |
|
Israel (Tel Aviv) |
|
Región Europa (Zúrich) |
|
Región Medio Oriente (Baréin) |
|
Medio Oriente (EAU) | arn:aws:lambda:me-central-1:858974508948:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm:1 |
Región de América del Sur (São Paulo) |
|
AWS GovCloud (Este de EE. UU.) |
|
AWS GovCloud (Oeste de EE. UU.) |
|