Tutorial: uso de AWS Lambda con Amazon Simple Queue Service - AWS Lambda

Tutorial: uso de AWS Lambda con Amazon Simple Queue Service

En este tutorial, debe crear una función de Lambda para consumir mensajes de una cola Amazon SQS.

Requisitos previos

En este tutorial, se le presuponen algunos conocimientos sobre las operaciones básicas de Lambda y la consola de Lambda. Si aún no lo ha hecho, siga las instrucciones que se indican en Introducción a Lambda para crear la primera función Lambda.

Para completar los siguientes pasos, necesita un terminal de línea de comandos o shell para ejecutar comandos. Los comandos y la salida esperada se muestran 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 los 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 10, puede instalar Windows Subsystem para Linux para obtener una versión de Ubuntu y Bash integrada con Windows.

Creación del rol de ejecución

Cree el rol de ejecución que concederá a su función permiso para obtener acceso a los recursos de AWS.

Para crear un rol de ejecución

  1. Abra la página Roles en la consola de IAM.

  2. Elija Create role (Crear rol).

  3. Cree un rol con las propiedades siguientes.

    • Trusted entity (Entidad de confianza)AWS Lambda.

    • Permissions (Permisos)AWSLambdaSQSQueueExecutionRole.

    • Role name (Nombre de rol): lambda-sqs-role.

La política AWSLambdaSQSQueueExecutionRole tiene permisos que la función necesita para leer elementos de Amazon SQS y escribir registros a CloudWatch Logs.

Creación de la función

En el ejemplo siguiente se muestra cómo procesar cada mensaje de Amazon SQS en la entrada del evento. Consulte Uso de AWS Lambda con Amazon SQS para ver un ejemplo de un evento con varios mensajes. En el ejemplo, el código escribe cada mensaje en un registro en CloudWatch Logs.

nota

Para ver código de muestra en otros lenguajes, consulte Código de función de ejemplo 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

  1. Copie el código de muestra en un archivo con el nombre index.js.

  2. Crear un paquete de implementación.

    zip function.zip index.js
  3. Cree una función de Lambda con el comando create-function.

    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 mediante el comando invoke de la CLI de AWS Lambda y un evento de Amazon Simple Queue Service de muestra.

Si el controlador vuelve normalmente sin excepciones, Lambda considera que el mensaje se ha procesado correctamente y empieza a leer nuevos mensajes en la cola. Una vez que un mensaje se procesa correctamente, se elimina automáticamente de la cola. Si el controlador genera una excepción, Lambda considera que la entrada de mensajes no se ha procesado e invoca de nuevo la función con el mismo lote de mensajes.

  1. Copie el siguiente JSON en un archivo y guárdelo como 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" } ] }
  2. Ejecute el siguiente comando invoke:

    aws lambda invoke --function-name ProcessSQSRecord \ --payload file://input.txt outputfile.txt
    nota

    Si utiliza la versión 2 de la AWS CLI, agregue los siguientes parámetros al comando:

    --cli-binary-format raw-in-base64-out
  3. Verifique la salida en el archivo outputfile.txt.

Creación de una cola de Amazon SQS

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

Para crear una cola

  1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon SQS en https://console.aws.amazon.com/sqs/.

  2. En la consola de Amazon SQS, cree una cola.

  3. Escriba o registre el ARN (nombre del recurso de Amazon) de la cola de identificación. Lo necesitará en el siguiente paso al asociar la cola a la función Lambda.

Crear un mapeo de origen de eventos en AWS Lambda. Este mapeo de origen de eventos asocia la cola de Amazon SQS a la función de Lambda. Una vez creado este mapeo de origen de eventos, AWS Lambda comienza a sondear la cola.

Probar la experiencia integral. A medida que se actualiza la cola, Amazon Simple Queue Service escribe mensajes en la cola. AWS Lambda sondea la cola, detecta nuevos registros e invoca la función Lambda en su nombre pasando los eventos a la función, en este caso mensajes de Amazon SQS.

Configuración del origen de eventos

Para crear un mapeo entre la cola de Amazon SQS especificada y la función de Lambda, ejecute el comando create-event-source-mapping de la AWS CLI. Después de ejecutar el comando, anote o registre el UUID. Necesitará este UUID para hacer referencia al mapeo de origen de eventos en otros comandos, por ejemplo, si decide eliminar el mapeo de origen de eventos.

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 la lista de mapeos de orígenes 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

La lista devuelve todos los mapeos de orígenes de eventos creados, y para cada uno de ellos muestra el LastProcessingResult, entre otras cosas. Este campo se utiliza para proporcionar un mensaje informativo en caso de que surja algún problema. Los valores como No records processed (indica que AWS Lambda no ha comenzado el sondeo o que no hay registros en la cola) y OK (indica que AWS Lambda ha leído correctamente los registros de la cola y ha invocado la función de Lambda) indican que no hay ningún problema. Si hay algún problema, recibirá un mensaje de error.

Prueba de la configuración

Ahora puede probar la configuración como se indica a continuación:

  1. En la consola de Amazon SQSpuede enviar mensajes a la cola. Amazon SQS escribe registros de estas acciones en la cola.

  2. AWS Lambda sondea la cola y, cuando detecta actualizaciones, invoca la función de Lambda pasando los datos de eventos que encuentra en la cola.

  3. La función se ejecuta y crea registros en Amazon CloudWatch. Puede verificar los registros reportados en la consola de Amazon CloudWatch.

Limpiar los recursos

Ahora puede eliminar los recursos que creó para este tutorial, a menos que desee conservarlos. 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 de Roles de la consola de IAM.

  2. Seleccione el rol de ejecución que ha creado.

  3. Elija Delete role (Eliminar rol).

  4. Elija Sí, eliminar.

Para eliminar la función de Lambda

  1. Abra la Página de Funciones de la consola de Lambda.

  2. Seleccione la función que ha creado.

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

  4. Elija Eliminar.

Para eliminar la cola de Amazon SQS

  1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon SQS en https://console.aws.amazon.com/sqs/.

  2. Seleccione la cola que ha creado.

  3. Elija Eliminar.

  4. Escriba delete en el cuadro de texto.

  5. Elija Eliminar.