Transmisiones de DynamodB con lambda

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

Por supuesto, también puede usar las transmisiones de DynamodB para activar los procesos aguas abajo y las funciones de AWS Lambda. Lambda, por definición, es un servicio de cómputo sin servidor que ejecuta su código en respuesta a los eventos y administra automáticamente los recursos de cómputo para usted.

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

Cómo usar las transmisiones AWS Dynamodb con Lambda

Si bien es posible crear una función Lambda que consuma los eventos y ocurrencias de una secuencia de DynamodB, el proceso puede ser bastante importante, particularmente 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 procesos básicos de Lambda. Por lo tanto, este debería ser el primero para garantizar 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 AWS de su sistema. Puede usar el siguiente comando:

AWS -versión

El resultado para el comando proporcionado debe 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 dada contiene la versión instalada del AWS CLI (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 papel de ejecución en AWS CLI. Un rol de ejecución es un rol de gestión de identidad y acceso de AWS (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-ROL \
--nombre de rol LambdadynamodBexecutionRole \
--Suponga el archivo de documento-documento-role: // asume-role-policy.JSON \
--Descripción "AwslambDadynamodBExecutionRole" \
--Lambda de nombre de servicio.amazonaws.comunicarse

El comando anterior es un comando AWS CLI para crear un rol. También puede usar la consola de administración de Amazon para crear un rol. Una vez que esté en la consola 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 rol: lambda-dynamodb-rol
  • Permisos: awslambdadynamodbexecutionrole

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

PIP Instalar Boto3

Paso 3: Habilite las transmisiones de DynamodB en su mesa

Necesita habilitar las transmisiones de DynamodB en su mesa. Para esta ilustración, usamos el Boto3, AWS SDK para Python. El siguiente comando ayudará:

importar boto3
# Conéctese al servicio Dynamodb
Dynamodb = Boto3.Cliente ('Dynamodb')
# Habilitar transmisiones de DynamodB en la tabla 'My-Table'
Respuesta = Dynamodb.update_table (
TableName = 'mytable',
StreamSpecification =
'Streamenable': verdadero,
'StreamViewType': 'new_and_old_images'

)
# Verifique la respuesta para asegurarse de que la transmisión estuviera habilitada con éxito
Si la respuesta ['streamSpecification'] ['StreamEnabled']:
imprimir ("secuencia Dynamodb habilitada correctamente")
demás:
imprimir ("Error habilitando la transmisión Dynamodb")

Este código habilita la secuencia de DynamodB en la tabla "mytable" que transmite las imágenes nuevas y antiguas de los elementos tan pronto como ocurra cualquier cambio. Puede elegir transmitir solo las nuevas imágenes tan pronto como el StreamViewType a "New_Image".

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

Paso 4: crea la función Lambda

El siguiente paso es crear una función lambda que desencadena la transmisión Dynamodb. Los siguientes pasos deberían ayudar:

  • Abra la consola 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 necesita ingresar su tiempo de ejecución en este momento. Seleccionamos Python para esta ilustración.
  • En "Elija o cree un rol de ejecución", seleccione "Cree un nuevo rol con permisos de lambda básicos" para crear un papel de IAM con los permisos necesarios para su función Lambda.
  • Haga clic en el botón "Crear función" para crear su función lambda.
  • En la página "Configuración" para su función, desplácese hacia abajo a la sección "Designador" y haga clic en la pestaña "Agregar disparador".
  • En el cuadro "Configuración de activación" que aparece, seleccione "DynamodB" en el menú desplegable "disparador".
  • Seleccione la tabla DynamodB que desea usar 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 a columnas particulares).
  • Haga clic en el botón "Agregar" para crear el disparador.
  • En el editor "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 desencadenan 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 siempre que haya actualizaciones en la tabla DynamodB especificada.

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

def lambda_handler (evento, contexto):
Para registro en el evento ['Records']:
print (registro ['Dynamodb'] ['NewImage'])

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 DynamodB que desencadena la función.

Paso 5: Pruebe la función Lambda

Para probar una función lambda que puede activar una secuencia de DynamodB, puede usar el boto3 biblioteca para acceder a la API Dynamodb y la invocar método del Lambda cliente para activar la función.

Aquí hay un ejemplo sobre cómo hacerlo:

importar boto3
# Conéctese al servicio Dynamodb
Dynamodb = Boto3.Cliente ('Dynamodb')
# Conéctese al servicio Lambda
lambda_client = boto3.Cliente ('Lambda')
# Inserte un elemento en la tabla 'my-table'
Respuesta = Dynamodb.put_item (
TableName = 'mytable',
Item =
'id': 'n': '123',
'Nombre': 's': 'Joel Austin,
'Age': 'n': '34'

)
# Verifique la respuesta para asegurarse de que el elemento se insertó correctamente
Si la respuesta ['ResponseMetadata'] ['httpstatuscode'] == 200:
Imprimir ("Elemento insertado correctamente")
demás:
Imprimir ("Error de insertar el elemento")
# Activar la función lambda que se suscribe a la tabla 'my-table'
respuesta = lambda_client.invocar(
FunctionName = 'myFunction',
InvocationType = 'Evento',
LogType = 'cola',
Payload = '"registros": ["Dynamodb": "NewImage": "id": "n": "123", "nombre": "S": "Joel Austin", ",", edad ": " n ":" 34 "] '
)
# Verifique la respuesta para asegurarse de que la función se activara con éxito
Si la respuesta ['statuscode'] == 202:
imprimir ("función lambda activada correctamente")
demás:
Imprimir ("Error de activación de la función Lambda")

Este código primero inserta un elemento en el mi mesa mesa y luego desencadena el MyFunction Función lambda enviando una carga útil de eventos de muestra a la función utilizando el invocar método. La carga útil del evento simula un evento de transmisión 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ó con éxito los datos del evento.

Conclusión

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