Secuencias de DynamoDB con Lambda

Secuencias De Dynamodb Con Lambda



DynamoDB Streams es una característica de Amazon DynamoDB que le permite obtener un flujo en tiempo real de cambios o cambios de datos que se realizan en sus tablas de DynamoDB. Puede usar esta función para crear aplicaciones que reaccionan a los cambios de datos en las tablas de DynamoDB, como la actualización de cachés y el envío de notificaciones.

Por supuesto, también puede usar DynamoDB Streams para activar los procesos posteriores y las funciones de AWS Lambda. Lambda, por definición, es un servicio informático sin servidor que ejecuta su código en respuesta a eventos y administra automáticamente los recursos informáticos por usted.

Puede usar Lambda para escribir el código en Node.js, Python, Java o C# para procesar los registros de transmisión y tomar las medidas adecuadas. El principal beneficio de integrar DynamoDB Streams con Lambda es que Lambda le permite ejecutar los servicios respaldados o los códigos de aplicación sin necesidad de administración.







Cómo utilizar los flujos de AWS DynamoDB con Lambda

Si bien es posible crear una función Lambda que consuma los eventos y ocurrencias de un flujo de DynamoDB, el proceso puede ser bastante arduo, especialmente en su primer intento. Los siguientes pasos ayudarán:



Paso 1: Asegúrese de que su sistema cumpla con los requisitos previos

Este procedimiento solo tendrá éxito si conoce las operaciones y los procesos básicos de Lambda. Por lo tanto, este debería ser el primero para asegurarse de que su comprensión de Lambda esté por encima del promedio.



El segundo requisito previo que vale la pena considerar es confirmar la versión de AWS de su sistema. Puedes usar el siguiente comando:





versión aws

El resultado del comando provisto debería verse así:

aws-cli/ 2 .x.x Python/ 3 .x.x Linux/ 4 .x.x-xxx-std botocore/ 2 .x.x

La respuesta de muestra proporcionada contiene la versión instalada de la CLI de AWS ( aws-cli/2.x.x ), la versión de Python ( Python/3.x.x ), y el sistema operativo ( Linux/4.x.x-xxx-std ). La parte final de la respuesta define la versión de la biblioteca de Botocore en la que se ejecuta su AWS CLI ( botocore/2.x.x ).



Por lo tanto, terminará con algo como esto:

Paso 2: crear un rol de ejecución

El siguiente paso es crear un rol de ejecución en AWS CLI. Un rol de ejecución es un rol de AWS Identity and Access Management (IAM) asumido por un servicio de AWS para realizar las tareas en su nombre. Le da acceso a los recursos de AWS que necesitará en el camino.

Puede crear un rol usando el siguiente comando:

aws iam create-role \

--role-name LambdaDynamoDBExecutionRole \

--assume-role-policy-document archivo://assume-role-policy.json \

--descripción 'AWSLambdaDynamoDBExecutionRole' \

--nombre-servicio lambda.amazonaws.com

El comando anterior es un comando de la CLI de AWS para crear un rol. También puede utilizar la Consola de administración de Amazon para crear un rol. Una vez que esté en la consola de IAM, abra el roles página y haga clic en el Crear rol botón.

Proceda a ingresar lo siguiente:

  • Entidad de confianza: Lambda
  • Nombre de la función: lambda-dynamodb-role
  • Permisos: AWSLambdaDynamoDBExecutionRole

También puede usar Python instalando primero el SDK de AWS para Python:

pip instalar boto3

Paso 3: habilite las transmisiones de DynamoDB en su mesa

Debe habilitar DynamoDB Streams en su mesa. Para esta ilustración, usamos Boto3, AWS SDK para Python. El siguiente comando ayudará:

importar boto3

# Conectarse al servicio de DynamoDB
dynamodb = boto3.cliente( 'dynamodb' )

# Habilite las transmisiones de DynamoDB en la tabla 'my-table'
respuesta = dynamodb.update_table(
NombreDeTabla= 'mi mesa' ,
StreamSpecification={
        'StreamEnabled' : Verdadero,
        'StreamViewType' : 'NUEVAS_AND_OLD_IMAGENES'
    }
)

# Verifique la respuesta para asegurarse de que la transmisión se haya habilitado correctamente
si respuesta[ 'Especificación de transmisión' ][ 'StreamEnabled' ]:
imprimir( 'Transmisión de DynamoDB habilitada correctamente' )
más:
imprimir( 'Error al habilitar la transmisión de DynamoDB' )

Este código habilita la transmisión de DynamoDB en la tabla 'mytable' que transmite las imágenes nuevas y antiguas de los elementos tan pronto como se produzcan cambios. Puede optar por transmitir solo las nuevas imágenes tan pronto como el StreamViewType sea 'NEW_IMAGE'.

En particular, es posible que ejecutar este código solo habilite las transmisiones en sus tablas después de un tiempo. En cambio, el proceso puede llevar algún tiempo. Puede usar el método describe_table para verificar el estado de la transmisión.

Paso 4: Cree la función Lambda

El siguiente paso es crear una función Lambda que active el flujo de DynamoDB. Los siguientes pasos deberían ayudar:

  • Abra la consola de AWS Lambda y haga clic en la pestaña 'Crear función'. En la página 'Crear función', elija 'Autor desde cero' e ingrese un nombre para su función. También debe ingresar su tiempo de ejecución en este punto. Seleccionamos Python para esta ilustración.
  • En 'Elegir o crear un rol de ejecución', seleccione 'Crear un nuevo rol con permisos básicos de Lambda' para crear un rol de IAM con los permisos necesarios para su función de Lambda.
  • Haga clic en el botón 'Crear función' para crear su función Lambda.
  • En la página 'Configuración' de su función, desplácese hacia abajo hasta la sección 'Diseñador' y haga clic en la pestaña 'Agregar disparador'.
  • En el cuadro 'Configuración del activador' que aparece, seleccione 'DynamoDB' en el menú desplegable 'Activador'.
  • Seleccione la tabla de DynamoDB que desee utilizar para activar la función. Una vez hecho esto, elija si desea que la función se active en todas las actualizaciones de la tabla o solo en actualizaciones específicas (como actualizaciones de columnas particulares).
  • Haga clic en el botón 'Agregar' para crear el disparador.
  • En el editor de 'Código de función', escriba el código de Python para su función. Puede usar el objeto de evento que se pasa a su función para acceder a los datos que activan la función.
  • Haga clic en el botón 'Guardar' para guardar la función.

¡Eso es todo lo que sucede al crear una función Lambda! Su función ahora se activa cada vez que hay actualizaciones en la tabla de DynamoDB especificada.

Aquí hay un ejemplo de una función de Python simple que la transmisión de DynamoDB puede activar:

def lambda_handler(evento, contexto):

para registro en evento[ 'Registros' ]:

imprimir (registro [ 'dynamodb' ][ 'Nueva imagen' ])

Esta función itera a través de los registros en el objeto de evento e imprime la nueva imagen del elemento en la tabla de DynamoDB que activa la función.

Paso 5: pruebe la función Lambda

Para probar una función de Lambda que puede desencadenar un flujo de DynamoDB, puede utilizar el boto3 biblioteca para acceder a la API de DynamoDB y al invocar metodo de la lambda cliente para activar la función.

Aquí hay un ejemplo de cómo hacerlo:

importar boto3

# Conectarse al servicio de DynamoDB
dynamodb = boto3.cliente( 'dynamodb' )

# Conectarse al servicio Lambda
lambda_cliente = boto3.cliente( 'lambda' )

# Insertar un elemento en la tabla 'my-table'
respuesta = dynamodb.put_item(
NombreDeTabla= 'mi mesa' ,
Artículo={
        'identificación' : { 'NORTE' : '123' },
        'nombre' : { 'S' : 'Joel Austin},
        '
años ': {' norte ': ' 34 '}
    }
)

# Verifique la respuesta para asegurarse de que el elemento se insertó correctamente
si respuesta['
Metadatos de respuesta '][' HTTPStatusCode '] == 200:
print('Elemento insertado con exito')
más:
print('Error al insertar el elemento')

# Activar la función Lambda que está suscrita al '
mi mesa ' mesa
respuesta = lambda_client.invoke(
NombreFunción='
mi función ',
TipoInvocación='
Evento ',
Tipo de registro = '
Cola ',
Carga útil='
{ 'Registros' : [{ 'dynamodb' : { 'Nueva imagen' : { 'identificación' : { 'NORTE' : '123' }, 'nombre' : { 'S' : 'Joel Austin' }, 'años' : { 'NORTE' : '34' }}}}]} '
)

# Verifique la respuesta para asegurarse de que la función se haya activado correctamente
si respuesta['
Código de estado '] == 202:
print('La función Lambda se activó con éxito')
más:
print('Error al activar la función Lambda')

Este código primero inserta un elemento en el mi mesa tabla y luego activa el mi función Lambda mediante el envío de una carga útil de evento de muestra a la función mediante el invocar método. La carga del evento simula un evento de transmisión de DynamoDB que incluye la nueva imagen del elemento que se acaba de insertar.

Luego puede verificar los registros de la función Lambda para ver si activó y procesó correctamente los datos del evento.

Conclusión

Es vital tener en cuenta que puede invocar varias veces para el mismo registro de flujo que un flujo de DynamoDB puede activar una función de Lambda. La razón principal detrás de esto es que los registros de transmisión finalmente son consistentes y es posible procesar el mismo registro varias veces mediante la función Lambda. Es crucial diseñar su función Lambda para manejar este caso correctamente.