Tutorial: Uso de Lambda con Amazon SQS - AWS Lambda

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.

nota

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. Los comandos de la CLI de ejemplo de esta guía utilizan el formato Linux. Los comandos que incluyen documentos JSON en línea deben reformatearse si utiliza la CLI de Windows.

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
  1. Abra la página de Roles de la consola AWS Identity and Access Management (IAM).

  2. Elija Create role.

  3. 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.

nota

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
nota

Al seguir estos pasos, crea una función en Node.js 12. Para otros lenguajes, los pasos son similares, pero algunos detalles son diferentes.

  1. Guarde el código de ejemplo como un archivo denominado index.js.

  2. Cree un paquete de implementación.

    zip function.zip index.js
  3. 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.

  1. 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.

  2. 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.

  3. 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
  1. Abra la consola de Amazon SQS.

  2. 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.

  3. 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:

  1. Abra la consola de Amazon SQS.

  2. Elija el nombre de la cola que creó anteriormente.

  3. Seleccione Send and receive messages (Enviar y recibir mensajes).

  4. En Message body (Cuerpo del mensaje), ingrese un mensaje de prueba.

  5. 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
  1. Abra la página Roles en la consola de IAM.

  2. Seleccione el rol de ejecución que creó.

  3. Elija Eliminar (Delete).

  4. 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
  1. .Abra la página de Functions (Funciones) en la consola de Lambda.

  2. Seleccione la función que ha creado.

  3. Elija Actions (Acciones), Delete (Eliminar).

  4. Escriba delete en el campo de entrada de texto y elija Delete (Eliminar).

Para eliminar la cola de Amazon SQS
  1. Inicie sesión en AWS Management Console y abra la consola de Amazon SQS en https://console.aws.amazon.com/sqs/.

  2. Seleccione la cola que ha creado.

  3. Elija Eliminar (Delete).

  4. Introduzca delete en el campo de entrada de texto.

  5. Elija Eliminar.