Seleccione sus preferencias de cookies

Usamos cookies esenciales y herramientas similares que son necesarias para proporcionar nuestro sitio y nuestros servicios. Usamos cookies de rendimiento para recopilar estadísticas anónimas para que podamos entender cómo los clientes usan nuestro sitio y hacer mejoras. Las cookies esenciales no se pueden desactivar, pero puede hacer clic en “Personalizar” o “Rechazar” para rechazar las cookies de rendimiento.

Si está de acuerdo, AWS y los terceros aprobados también utilizarán cookies para proporcionar características útiles del sitio, recordar sus preferencias y mostrar contenido relevante, incluida publicidad relevante. Para aceptar o rechazar todas las cookies no esenciales, haga clic en “Aceptar” o “Rechazar”. Para elegir opciones más detalladas, haga clic en “Personalizar”.

Tutorial: Configuración de una función de Lambda para obtener acceso a MemoryDB una Amazon VPC.

Modo de enfoque
Tutorial: Configuración de una función de Lambda para obtener acceso a MemoryDB una Amazon VPC. - Amazon MemoryDB

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

En este tutorial, podrá aprender a:

  • Cree un clúster de MemoryDB en la Amazon Virtual Private Cloud (Amazon VPC) predeterminada en la región us-east-1.

  • Cree una función de Lambda para obtener acceso al clúster. Al crear la función Lambda, proporciona una subred en IDs su Amazon VPC y un grupo de seguridad de VPC para permitir que la función Lambda acceda a los recursos de su VPC. En este tutorial, con fines ilustrativos, la función de Lambda genera un UUID, lo escribe en el clúster y lo recupera de este.

  • Invoque la función de Lambda manualmente y verifique que ha obtenido acceso al clúster de en la VPC.

  • Limpie la función de Lambda, el clúster y el rol de IAM que se configuraron para este tutorial.

Paso 1: creación de un clúster

Para crear un clúster, siga estos pasos:

Creación de un clúster

En este paso, crea un clúster en la Amazon VPC predeterminada de la región us-east-1 de su cuenta mediante la (CLI). AWS Command Line Interface Para obtener información sobre cómo crear un clúster mediante la consola o la API de MemoryDB, consulte Paso 2: crear un clúster.

aws memorydb create-cluster --cluster-name cluster-01 --engine-version 7.0 --acl-name open-access \ --description "MemoryDB IAM auth application" \ --node-type db.r6g.large

Como puede ver, el valor del campo Estado es CREATING. Este proceso puede tardar unos minutos, hasta que MemoryDB termine de crear el clúster.

Copiar el punto de conexión de clúster

Compruebe que MemoryDB ha terminado de crear el clúster con el comando describe-clusters.

aws memorydb describe-clusters \ --cluster-name cluster-01

Copie la dirección del punto de conexión del clúster que aparece en el resultado. Necesitará esta dirección cuando cree el paquete de implementación para la función de Lambda.

Creación de un rol de IAM

  1. Cree un documento de política de confianza de IAM, como se muestra a continuación, para el rol que permita a la cuenta asumir el nuevo rol. Guarde la política en un archivo denominado trust-policy.json. Asegúrese de reemplazar el account_id 123456789012 en esta política por su account_id.

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" }] }
  2. Cree un documento de política de IAM, como se muestra a continuación. Guarde la política en un archivo denominado policy.json. Asegúrese de reemplazar el account_id 123456789012 en esta política por su account_id.

    { "Version": "2012-10-17", "Statement": [ { "Effect" : "Allow", "Action" : [ "memorydb:Connect" ], "Resource" : [ "arn:aws:memorydb:us-east-1:123456789012:cluster/cluster-01", "arn:aws:memorydb:us-east-1:123456789012:user/iam-user-01" ] } ] }
  3. Crear un rol de IAM.

    aws iam create-role \ --role-name "memorydb-iam-auth-app" \ --assume-role-policy-document file://trust-policy.json
  4. Creación de la política de IAM.

    aws iam create-policy \ --policy-name "memorydb-allow-all" \ --policy-document file://policy.json
  5. Adjunte la política de IAM al rol. Asegúrese de reemplazar el account_id 123456789012 en este ARN de política por su account_id.

    aws iam attach-role-policy \ --role-name "memorydb-iam-auth-app" \ --policy-arn "arn:aws:iam::123456789012:policy/memorydb-allow-all"

Crear una lista de control de acceso (ACL)

  1. Cree un nuevo usuario habilitado para IAM.

    aws memorydb create-user \ --user-name iam-user-01 \ --authentication-mode Type=iam \ --access-string "on ~* +@all"
  2. Cree una ACL y asóciela al clúster.

    aws memorydb create-acl \ --acl-name iam-acl-01 \ --user-names iam-user-01 aws memorydb update-cluster \ --cluster-name cluster-01 \ --acl-name iam-acl-01

Paso 2: creación de una función de Lambda

Para crear una función de Lambda, realice los pasos que se indican a continuación.

Crear el paquete de implementación

En este tutorial, proporcionamos código de ejemplo en Python para su función de Lambda.

Python

El siguiente ejemplo de código de Python lee y escribe un elemento en el clúster de MemoryDB. Copie el código y guárdelo en un archivo con el nombre app.py. Asegúrese de reemplazar el valor cluster_endpoint del código con la dirección del punto de conexión que copió en un paso anterior.

from typing import Tuple, Union from urllib.parse import ParseResult, urlencode, urlunparse import botocore.session import redis from botocore.model import ServiceId from botocore.signers import RequestSigner from cachetools import TTLCache, cached import uuid class MemoryDBIAMProvider(redis.CredentialProvider): def __init__(self, user, cluster_name, region="us-east-1"): self.user = user self.cluster_name = cluster_name self.region = region session = botocore.session.get_session() self.request_signer = RequestSigner( ServiceId("memorydb"), self.region, "memorydb", "v4", session.get_credentials(), session.get_component("event_emitter"), ) # Generated IAM tokens are valid for 15 minutes @cached(cache=TTLCache(maxsize=128, ttl=900)) def get_credentials(self) -> Union[Tuple[str], Tuple[str, str]]: query_params = {"Action": "connect", "User": self.user} url = urlunparse( ParseResult( scheme="https", netloc=self.cluster_name, path="/", query=urlencode(query_params), params="", fragment="", ) ) signed_url = self.request_signer.generate_presigned_url( {"method": "GET", "url": url, "body": {}, "headers": {}, "context": {}}, operation_name="connect", expires_in=900, region_name=self.region, ) # RequestSigner only seems to work if the URL has a protocol, but # MemoryDB only accepts the URL without a protocol # So strip it off the signed URL before returning return (self.user, signed_url.removeprefix("https://")) def lambda_handler(event, context): username = "iam-user-01" # replace with your user id cluster_name = "cluster-01" # replace with your cache name cluster_endpoint = "clustercfg.cluster-01.xxxxxx.memorydb.us-east-1.amazonaws.com" # replace with your cluster endpoint creds_provider = MemoryDBIAMProvider(user=username, cluster_name=cluster_name) redis_client = redis.Redis(host=cluster_endpoint, port=6379, credential_provider=creds_provider, ssl=True, ssl_cert_reqs="none") key='uuid' # create a random UUID - this will be the sample element we add to the cluster uuid_in = uuid.uuid4().hex redis_client.set(key, uuid_in) result = redis_client.get(key) decoded_result = result.decode("utf-8") # check the retrieved item matches the item added to the cluster and print # the results if decoded_result == uuid_in: print(f"Success: Inserted {uuid_in}. Fetched {decoded_result} from MemoryDB.") else: raise Exception(f"Bad value retrieved. Expected {uuid_in}, got {decoded_result}") return "Fetched value from MemoryDB"

Este código usa la biblioteca redis-py de Python para colocar elementos en el clúster y recuperarlos. Este código usa cachetools para almacenar en caché los tokens de autenticación de IAM generados durante 15 minutos. Para crear un paquete de implementación que contenga redis-py y cachetools, siga estos pasos.

En el directorio del proyecto que contiene el archivo de código fuente app.py, cree un paquete de carpetas en el que instalar las bibliotecas de redis-py y cachetools.

mkdir package

Instale redis-py y cachetools con pip.

pip install --target ./package redis pip install --target ./package cachetools

Cree un archivo .zip que contenga las bibliotecas redis-py y cachetools. En Linux y MacOS, ejecute el siguiente comando. En Windows, utilice la utilidad de compresión que prefiera para crear un archivo .zip con las bibliotecas de redis-py y cachetools en el directorio raíz.

cd package zip -r ../my_deployment_package.zip .

Añada el código de función al archivo .zip. En Linux y macOS, ejecute el siguiente comando. En Windows, utilice la utilidad de compresión que prefiera para añadir app.py al directorio raíz del archivo .zip.

cd .. zip my_deployment_package.zip app.py

Crear el rol de IAM (rol de ejecución)

Adjunte la política AWS administrada nombrada AWSLambdaVPCAccessExecutionRole al rol.

aws iam attach-role-policy \ --role-name "memorydb-iam-auth-app" \ --policy-arn "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"

Cargar el paquete de implementación (crear la función de Lambda)

En este paso, se crea la función Lambda (AccessMemoryDB) mediante el comando AWS CLI create-function.

Desde el directorio del proyecto que contiene el archivo.zip del paquete de implementación, ejecute el siguiente comando create-function de la CLI de Lambda.

Para la opción del rol, utilice el ARN del rol de ejecución que creó en el paso anterior. Para vpc-config, introduzca listas separadas por comas de las subredes de la VPC predeterminada y el ID del grupo de seguridad de la VPC predeterminada. Puede encontrar estos valores en la Consola de Amazon VPC. Para buscar las subredes de su VPC predeterminada, elija Su VPC y, a continuación VPCs, elija la VPC predeterminada de su AWS cuenta. Para buscar el grupo de seguridad de esta VPC, vaya a Seguridad y elija Grupos de seguridad. Compruebe que ha seleccionado la región us-east-1.

aws lambda create-function \ --function-name AccessMemoryDB \ --region us-east-1 \ --zip-file fileb://my_deployment_package.zip \ --role arn:aws:iam::123456789012:role/memorydb-iam-auth-app \ --handler app.lambda_handler \ --runtime python3.12 \ --timeout 30 \ --vpc-config SubnetIds=comma-separated-vpc-subnet-ids,SecurityGroupIds=default-security-group-id

Paso 3: comprobación de la función de Lambda

En este paso, invocará la función de Lambda manualmente utilizando el comando de invocación. Cuando se ejecuta la función Lambda, genera un UUID y lo escribe en la ElastiCache caché que especificó en el código Lambda. A continuación, la función de Lambda recupera el elemento de la caché.

  1. Invoque la función Lambda AccessMemory (DB) mediante AWS Lambda el comando invoke.

    aws lambda invoke \ --function-name AccessMemoryDB \ --region us-east-1 \ output.txt
  2. Compruebe que la función de Lambda se ha ejecutado correctamente del modo siguiente:

    • Revise el archivo output.txt.

    • Verifique los resultados en los CloudWatch registros abriendo la CloudWatch consola y eligiendo el grupo de registros para su función (/). aws/lambda/AccessRedis El flujo de registro debería contener una salida similar a lo siguiente:

      Success: Inserted 826e70c5f4d2478c8c18027125a3e01e. Fetched 826e70c5f4d2478c8c18027125a3e01e from MemoryDB.
    • Revise los resultados en la AWS Lambda consola.

Paso 4: limpieza (opcional)

Para la limpieza, siga estos pasos.

Eliminar la función de Lambda

aws lambda delete-function \ --function-name AccessMemoryDB

Eliminar el clúster de MemoryDB

Eliminar el clúster.

aws memorydb delete-cluster \ --cluster-name cluster-01

Elimine el usuario y la ACL.

aws memorydb delete-user \ --user-id iam-user-01 aws memorydb delete-acl \ --acl-name iam-acl-01

Eliminar el rol de IAM y las políticas

aws iam detach-role-policy \ --role-name "memorydb-iam-auth-app" \ --policy-arn "arn:aws:iam::123456789012:policy/memorydb-allow-all" aws iam detach-role-policy \ --role-name "memorydb-iam-auth-app" \ --policy-arn "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole" aws iam delete-role \ --role-name "memorydb-iam-auth-app" aws iam delete-policy \ --policy-arn "arn:aws:iam::123456789012:policy/memorydb-allow-all"
PrivacidadTérminos del sitioPreferencias de cookies
© 2025, Amazon Web Services, Inc o sus afiliados. Todos los derechos reservados.