Tutorial: Uso de Lambda con Amazon SQS
En este tutorial, creará una función de Lambda que consuma los mensajes de una cola de Amazon Simple Queue Service (Amazon SQS).
Requisitos previos
En este tutorial, se presupone que tiene algunos conocimientos sobre las operaciones básicas de Lambda y la consola de Lambda. Si aún no lo ha hecho, siga las instrucciones de Cree una función de Lambda con la consola. para crear su primera función Lambda.
Para completar los pasos siguientes, necesitará un shell o un terminal de línea de comando para ejecutar los comandos. Los comandos y la salida esperada se enumeran en bloques separados:
aws --version
Debería ver los siguientes datos de salida:
aws-cli/2.0.57 Python/3.7.4 Darwin/19.6.0 exe/x86_64
Para comandos largos, se utiliza un carácter de escape (\
) para dividir un comando en varias líneas.
En Linux y macOS, use su administrador de shell y paquetes preferido.
En Windows, algunos comandos de la CLI de Bash que se utilizan habitualmente con Lambda (por ejemplo, zip
) no son compatibles con los terminales integrados del sistema operativo. Para obtener una versión de Ubuntu y Bash integrada con Windows, instale el subsistema de Windows para Linux
Crear el rol de ejecución
Cree un rol de ejecución que le conceda permiso a su función para obtener acceso a los recursos AWS requeridos.
Para crear un rol de ejecución
-
Abra la página de Roles
de la consola AWS Identity and Access Management (IAM). -
Elija Create role.
-
Cree un rol con las propiedades siguientes.
-
Trusted entity (Entidad de confianza): AWS Lambda.
-
Permisos: AWSLambdaSQSQueueExecutionRole.
-
Nombre de rol:
lambda-sqs-role
.
-
La política AWSLambdaSQSQueueExecutionRole tiene los permisos que la función necesita para leer elementos de Amazon SQS y escribir registros en Amazon CloudWatch Logs.
Creación de la función
Cree una función de Lambda: que procese los mensajes de Amazon SQS. El siguiente ejemplo de código Node.js 12 escribe cada mensaje en un registro en CloudWatch Logs.
Para ver ejemplos de código en otros lenguajes, consulte Ejemplo de código de función de Amazon SQS.
ejemplo index.js
exports.handler = async function(event, context) { event.Records.forEach(record => { const { body } = record; console.log(body); }); return {}; }
Para crear la función
Al seguir estos pasos, crea una función en Node.js 12. Para otros lenguajes, los pasos son similares, pero algunos detalles son diferentes.
-
Guarde el código de ejemplo como un archivo denominado
index.js
. -
Cree un paquete de implementación.
zip function.zip index.js
-
Cree la función mediante el comando
create-function
de la AWS Command Line Interface (AWS CLI).aws lambda create-function --function-name ProcessSQSRecord \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs12.x \
--role arn:aws:iam::
123456789012
:role/lambda-sqs-role
Prueba de la función
Invoque la función de Lambda manualmente con el comando invoke
AWS CLI y un evento de Amazon SQS de muestra.
Si el controlador vuelve normalmente sin excepciones, Lambda considera que el mensaje se procesó correctamente y empieza a leer nuevos mensajes en la cola. Después de procesar correctamente un mensaje, Lambda lo elimina automáticamente de la cola. Si el controlador genera una excepción, Lambda considera que el lote de mensajes no se procesó correctamente e invoca la función con el mismo lote de mensajes.
-
Guarde el siguiente JSON como un archivo denominado
input.txt
.{ "Records": [ { "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", "body": "test", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1545082649183", "SenderId": "AIDAIENQZJOLO23YVJ4VO", "ApproximateFirstReceiveTimestamp": "1545082649185" }, "messageAttributes": {}, "md5OfBody": "098f6bcd4621d373cade4e832627b4f6", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:my-queue", "awsRegion": "us-east-2" } ] }
El JSON anterior simula un evento que Amazon SQS podría enviar a la función de Lambda, donde
"body"
contiene el mensaje real de la cola. -
Ejecute el comando siguiente
invoke
AWS CLI.aws lambda invoke --function-name ProcessSQSRecord \ --payload file://input.txt outputfile.txt
La opción cli-binary-format es obligatoria si va a usar la versión 2 de AWS CLI. Para que esta sea la configuración predeterminada, ejecute
aws configure set cli-binary-format raw-in-base64-out
. Para obtener más información, consulte las opciones globales de la línea de comandos admitidas de AWS CLI. -
Verifique la salida en el archivo
outputfile.txt
.
Cree una cola de Amazon SQS.
Cree una cola de Amazon SQS que la función de Lambda pueda utilizar como fuente de eventos.
Para crear una cola
-
Abra la consola de Amazon SQS
. -
Seleccione Create queue (Crear cola) y, a continuación, configure la cola. Para obtener instrucciones detalladas, consulte Creación de una cola de Amazon SQS (consola) en la Guía para desarrolladores de Amazon Simple Queue Service.
-
Después de crear la cola, registre su Nombre de recurso de Amazon (ARN). Lo necesitará en el siguiente paso al asociar la cola a la función de Lambda.
Configuración del origen de eventos
Para crear una asignación entre la cola de Amazon SQS y la función de Lambda, ejecute el siguiente comando de create-event-source-mapping
AWS CLI.
aws lambda create-event-source-mapping --function-name ProcessSQSRecord --batch-size 10 \ --event-source-arn arn:aws:sqs:
us-east-2:123456789012:my-queue
Para obtener una lista de mapeos de fuentes de eventos, ejecute el siguiente comando.
aws lambda list-event-source-mappings --function-name ProcessSQSRecord \ --event-source-arn arn:aws:sqs:
us-east-2:123456789012:my-queue
Prueba de la configuración
Ahora puede probar la configuración como se indica a continuación:
-
Abra la consola de Amazon SQS
. -
Elija el nombre de la cola que creó anteriormente.
-
Seleccione Send and receive messages (Enviar y recibir mensajes).
-
En Message body (Cuerpo del mensaje), ingrese un mensaje de prueba.
-
Elija Send message (Enviar mensaje).
Lambda sondea la cola en busca de actualizaciones. Cuando hay un nuevo mensaje, Lambda invoca la función con estos nuevos datos de evento desde la cola. La función se ejecuta y crea registros en Amazon CloudWatch. Puede ver los registros en la consola de CloudWatch
Limpiar los recursos de
A menos que desee conservar los recursos que creó para este tutorial, puede eliminarlos ahora. Si elimina los recursos de AWS que ya no utiliza, evitará gastos innecesarios en su cuenta de AWS.
Para eliminar el rol de ejecución
-
Abra la página Roles
en la consola de IAM. -
Seleccione el rol de ejecución que creó.
-
Elija Eliminar (Delete).
-
Si desea continuar, escriba el nombre del rol en el campo de entrada de texto y elija Delete (Eliminar).
Para eliminar la función de Lambda
-
.Abra la página de Functions (Funciones)
en la consola de Lambda. -
Seleccione la función que ha creado.
-
Elija Actions (Acciones), Delete (Eliminar).
-
Escriba
delete
en el campo de entrada de texto y elija Delete (Eliminar).
Para eliminar la cola de Amazon SQS
-
Inicie sesión en AWS Management Console y abra la consola de Amazon SQS en https://console.aws.amazon.com/sqs/
. -
Seleccione la cola que ha creado.
-
Elija Eliminar (Delete).
-
Introduzca
delete
en el campo de entrada de texto. -
Elija Eliminar.