AWS MSK Topic: enviar datos desde Lambda

Enviar datos a AWS MSK Topic desde AWS Lambda

Una guía paso a paso para crear una función lambda y la capa Lambda de dependencia requerida en AWS para instalar el paquete necesario para conectarse a AWS MSK Topic (tema de Kafka)

Esta guía asume un conocimiento práctico de la funcionalidad y la ventana acoplable de AWS Lambda.


Trabajando con Docker

Descargue la ventana acoplable en “https://www.docker.com/products/docker-desktop” e instálela con las especificaciones predeterminadas.

Cuando se complete la instalación, abra Docker para iniciar Docker en segundo plano, haga clic en Mostrar iconos ocultos en la barra de tareas de Windows para verificar que Docker se está ejecutando.

1. Abra el editor de línea de comandos (Powershell o Windows CMD) y ejecute para descargar una imagen de Amazon Linux.

 

Estamos utilizando Amazon Linux para crear paquetes debido a la incompatibilidad entre las diferentes versiones compiladas por máquina y la versión de AmazonLinux, lo que puede generar el siguiente error:

 

no se puede importar el nombre ‘WinDLL’ de ‘ctypes’ (/var/lang/lib/python3.7/ctypes/__init__.py)”.

docker pull amazonlinux

2. Ahora crea un nuevo contenedor a partir de la imagen y la línea de comando cambia a un comando bash

docker run -it amazonlinux

3. Ejecute el siguiente comando para instalar python, utilidades zip, pip y agregar python a la ruta del sistema

yum install python37
yum install zip unzip
curl -O https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py --user
export PATH=root/.local/bin:$PATH

4. Cree un directorio de trabajo en el contenedor Docker

mkdir python

5. Instale la biblioteca de python necesaria en el nuevo directorio

pip3 install confluent_kafka -t python

6. Comprima el contenido de la carpeta de Python

zip -r /python/python.zip /python

7. Salga de bash escribiendo exit

8. Obtenga el nombre del contenedor del que acabamos de salir

docker container ls --all

9. vamos a copiar el archivo comprimido del contenedor a un directorio accesible por Windows. En este ejemplo, estoy usando una carpeta de Windows llamada tmp. Cambie el nombre del contenedor en consecuencia

docker cp container-name:/python/python.zip d:\tmp

 

10.python.zip ahora está disponible en nuestro directorio tmp de Windows en este caso (unidad d)


Creación y acceso a la capa Lambda en la consola de AWS

1. Inicie sesión en la consola de cuentas de AWS y busque el servicio Lambda

2. Haga clic en capas y en el lado izquierdo y luego haga clic en crear capa

3. Dé el nombre de una capa, cargue el zip creado en el paso anterior, seleccione la versión de python en tiempo de ejecución muy importante y haga clic en crear.

4. Las capas deben crearse correctamente


Creación de un rol de IAM para la función Lambda

Se necesita el rol de IAM porque el MSK es un servicio administrado alojado dentro de la VPC, y necesitamos que otorgue permiso a la función lambda para acceder a la VPC mediante la cual puede conectarse al clúster de MSK.

1. Busque el rol en la barra de búsqueda en la consola de AWS y haga clic en Roles y luego haga clic en Create Roles

AWS MSK

2. Haga clic en siguiente después de ingresar los detalles

AWS MSK

3. Agregue la búsqueda de permisos (AmazonVPCFullAccess) y (AmazonMSKFullAccess) y haga clic en siguiente. Para este ejemplo, proporcionamos acceso completo, pero no se recomienda. AWS quiere que el usuario utilice el privilegio de acceso mínimo.

AWS MSK

4. Proporcione el nombre del rol, revise la configuración y haga clic en siguiente

AWS MSK


Creación y acceso a la función Lambda en la consola de AWS

1. Haga clic en Función en el lado izquierdo en la Consola AWS lambda y haga clic en crear función

AWS MSK

2. Ingrese el Nombre de la función y seleccione Runtime Python3.7 (la misma versión que se usó en la creación de la capa). Haga clic en cambiar el rol de ejecución predeterminado y seleccione el rol creado en los pasos anteriores. Luego haga clic en crear función

AWS MSK

AWS MSK

3. Haga clic en Capas

AWS MSK

4. Haga clic en Agregar capa

AWS MSK

5. Seleccione la capa personalizada y seleccione la capa que se creó en el paso anterior

AWS MSK

6. Actualizar el Código Lambda

import json
import time
from time import time
from confluent_kafka import Producer


KAFKA_BROKER = 'your-kafka-broker-endpoint-1.amazonaws.com:9092'
KAFKA_TOPIC = 'your_topic_name'

producer = Producer({
'bootstrap.servers': KAFKA_BROKER,
'socket.timeout.ms': 100,
'api.version.request': 'false',
'broker.version.fallback': '0.9.0',
'message.max.bytes': 1000000000
})


def lambda_handler(event, context):
print("event = ",event)
start_time = int(time() * 1000)
#This is test data, you can get data from the event
data = {"name": "xyz", "email": "[email protected]"}

send_msg_async(data)

end_time = int(time() * 1000)
time_taken = (end_time - start_time) / 1000
print("Time taken to complete = %s seconds" % (time_taken))


def delivery_report(err, msg):
if err is not None:
print('Message delivery failed: {}'.format(err))
else:
print('Message delivered to {} [{}]'.format(
msg.topic(), msg.partition()))


def send_msg_async(msg):
print("Sending message")
try:
msg_json_str = str({"data": json.dumps(msg)})
producer.produce(
KAFKA_TOPIC,
msg_json_str,
callback=lambda err, original_msg=msg_json_str: delivery_report(err, original_msg
),
)
producer.flush()
except Exception as ex:
print("Error : ", ex)

7. Haga clic en deploy (implementar)

8. Haga clic en configuración y seleccione VPC. Es necesario para conectarse a AWS MSK. Hay dos opciones: puede crear una función lambda dentro de la misma VPC donde se aloja MSK o usar la interconexión de VPC para conectar dos VPC.

AWS MSK


Gracias por llegar hasta aquí, si encuentras esto útil no olvides dejar un👍🏼y suscribirse para recibir más contenido.

Si le interesa, puede echar un vistazo a algunos de los otros artículos que he escrito recientemente sobre AWS y Laravel:

Recent Post