Amazon SQS para Lambda en LocalStack

Amazon SQS

Uso de Amazon Simple Queue Service para invocar una función Lambda en LocalStack

Podemos utilizar una función de AWS Lambda para procesar mensajes en una cola de Amazon Simple Queue Service (Amazon SQS). Las asignaciones de orígenes de eventos de Lambda admiten colas estándar y colas FIFO (primero en entrar, primero en salir). Con Amazon SQS, podemos descargar tareas de un componente de su aplicación enviándolas a una cola y procesándolas de forma asíncrona.

Lambda sondea la cola e invoca nuestra función Lambda sincrónicamente con un evento que contiene mensajes de la cola. Lambda lee mensajes en lotes e invoca nuestra función una vez para cada lote. Cuando nuestra función procesa correctamente un lote, Lambda elimina sus mensajes de la cola.

Amazon SQS


LocalStack proporciona una forma sencilla de desarrollar aplicaciones en la nube de AWS directamente desde nuestro host local. Activa un entorno de prueba en nuestra máquina local que proporciona casi la misma funcionalidad de paridad y API que el entorno de nube de AWS real.

Amazon SQS

Empecemos

Debemos tener Docker instalado en nuestro sistema.

Docker-Compose.YML

version: '2.1'services:
localstack:
container_name: "localstack-image"
image: localstack/localstack-full
network_mode: bridge
ports:
- "4566:4566"
- "4571:4571"
- "8082:8082"
environment:
- USE_LIGHT_IMAGE=0
- DEBUG=1
- PORT_WEB_UI=8082
- LAMBDA_EXECUTOR=local
- DOCKER_HOST=unix:///var/run/docker.sock
- HOST_TMP_FOLDER=${TMPDIR}
- START_WEB=1
volumes:
- "${TMPDIR:-/tmp/localstack}:/tmp/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"

Ejecute el siguiente comando:

docker-compose up

Veremos que el contenedor LocalStack se está ejecutando correctamente.

Crear el rol de ejecución

Una política basada en recursos de IAM controla los permisos para invocar la función.

aws iam create-role --role-name lambda-ex --assume-role-policy-document "{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}" --endpoint-url http://localhost:4566

Crear la política de IAM

La política de IAM define los permisos para la función de Lambda.

aws iam create-policy --policy-name my-policy --policy-document file://policy.txt --endpoint-url http://localhost:4566

Adjuntar la política de IAM a un rol de IAM

Un rol de ejecución de IAM define los permisos que controlan lo que la función puede hacer cuando interactúa con otros servicios de AWS.

aws iam attach-role-policy --policy-arn arn:aws:iam::000000000000:policy/my-policy --role-name lambda-ex --endpoint-url http://localhost:4566

Crear el código de función

Copie el siguiente código de ejemplo en un archivo denominado Handler.java.

Amazon SQS

Crear el paquete de implementación

El paquete de implementación es un archivo comprimido .zip que contiene su código de función de Lambda y sus dependencias.

Ejecute el siguiente comando:

mvn package

Crear la función Lambda

El comando create-function especifica el controlador de función como example.handler. La función puede usar el formato de controlador abreviado de package.Class porque la función implementa una interfaz de controlador.

aws lambda create-function --function-name my-math-function --zip-file fileb://blank-java-1.0-SNAPSHOT.jar --handler example.Handler::handleRequest --runtime java8 --role arn:aws:iam::000000000000:role/lambda-ex --endpoint-url http://localhost:4566

Crear una cola de Amazon SQS

Cree una cola de Amazon SQS que la función Lambda pueda utilizar como origen de eventos.

aws sqs create-queue --queue-name MyQueue --endpoint-url http://localhost:4566

Después de crear la cola, registre su nombre de recurso de Amazon (ARN). Necesitará esto en el próximo paso cuando asocie la cola con su función de Lambda.

aws sqs get-queue-attributes --queue-url http://localhost:4566/000000000000/MyQueue --attribute-names All --endpoint-url http://localhost:4566

Configurar el origen del evento

Para crear una asignación entre su cola de Amazon SQS y su función de Lambda, ejecute el siguiente comando de la CLI de AWS create-event-source-mapping.

aws lambda create-event-source-mapping --function-name my-math-function --batch-size 5 --maximum-batching-window-in-seconds 60 --event-source-arn arn:aws:sqs:us-east-1:000000000000:MyQueue --endpoint-url http://localhost:4566

Probar la configuración

aws sqs send-message --queue-url http://localhost:4566/000000000000/MyQueue --message-body "Successfull!!" --endpoint-url http://localhost:4566

Lambda sondea la cola en busca de actualizaciones. Cuando hay un mensaje nuevo, Lambda invoca su función con estos nuevos datos de eventos de la cola.

¡Felicidades!

Ahora tiene un Amazon SQS configurado correctamente para publicar eventos y activar Lambda. ¡Es hora de ponerlo en uso!

Recent Post