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). La función de Lambda se ejecuta cada vez que se agrega un mensaje nuevo a la cola. La función escribe los mensajes en un flujo de Registros de Amazon CloudWatch. En el siguiente diagrama, se muestran los recursos de AWS que utiliza para completar el tutorial.
Para completar este tutorial, lleve a cabo los siguientes pasos:
-
Cree una función de Lambda que escriba mensajes en Registros de CloudWatch.
-
Crear una cola de Amazon SQS.
-
Cree la asignación de orígenes de eventos de Lambda. La asignación de orígenes de eventos lee la cola de Amazon SQS e invoca la función de Lambda cuando se agrega un mensaje nuevo.
-
Para probar la configuración, agregue mensajes a la cola y supervise los resultados en Registros de CloudWatch.
Requisitos previos
Si no dispone de una Cuenta de AWS, siga estos pasos para crear una.
Procedimiento para registrarse en Cuenta de AWS
Abra https://portal.aws.amazon.com/billing/signup
. Siga las instrucciones que se le indiquen.
Parte del procedimiento de registro consiste en recibir una llamada telefónica e indicar un código de verificación en el teclado del teléfono.
Al registrarse en una Cuenta de AWS, se crea un Usuario raíz de la cuenta de AWS. El usuario raíz tendrá acceso a todos los Servicios de AWS y recursos de esa cuenta. Como práctica recomendada de seguridad, asigne acceso administrativo a un usuario y utilice únicamente el usuario raíz para realizar tareas que requieren acceso de usuario raíz.
AWS le enviará un email de confirmación cuando complete el proceso de registro. Puede ver la actividad de la cuenta y administrar la cuenta en cualquier momento entrando en https://aws.amazon.com/
Después de registrarse para obtener una Cuenta de AWS, proteja su Usuario raíz de la cuenta de AWS, habilite AWS IAM Identity Center y cree un usuario administrativo para no utilizar el usuario raíz en las tareas cotidianas.
Protección de Usuario raíz de la cuenta de AWS
-
Inicie sesión en AWS Management Console
como propietario de la cuenta; para ello, elija Usuario raíz e introduzca el correo electrónico de su Cuenta de AWS. En la siguiente página, escriba su contraseña. Para obtener ayuda para iniciar sesión con el usuario raíz, consulte Iniciar sesión como usuario raíz en la Guía del usuario de AWS Sign-In.
-
Active la autenticación multifactor (MFA) para el usuario raíz.
Para obtener instrucciones, consulte Habilitación de un dispositivo MFA virtual para su usuario raíz de la Cuenta de AWS (consola) en la Guía del usuario de IAM.
Creación de un usuario con acceso administrativo
-
Activar IAM Identity Center.
Consulte las instrucciones en Activar AWS IAM Identity Center en la Guía del usuario de AWS IAM Identity Center.
-
En IAM Identity Center, conceda acceso administrativo a un usuario.
Para ver un tutorial sobre cómo utilizar Directorio de IAM Identity Center como origen de identidad, consulte Configuración del acceso de los usuarios con el Directorio de IAM Identity Center predeterminado en la Guía del usuario de AWS IAM Identity Center.
Iniciar sesión como usuario con acceso de administrador
-
Para iniciar sesión con el usuario de IAM Identity Center, utilice la URL de inicio de sesión que se envió a la dirección de correo electrónico cuando creó el usuario de IAM Identity Center.
Para obtener ayuda para iniciar sesión con un usuario del IAM Identity Center, consulte Inicio de sesión en el portal de acceso de AWS en la Guía del usuario de AWS Sign-In.
Concesión de acceso a usuarios adicionales
-
En IAM Identity Center, cree un conjunto de permisos que siga la práctica recomendada de aplicar permisos de privilegios mínimos.
Para conocer las instrucciones, consulte Create a permission set en la Guía del usuario de AWS IAM Identity Center.
-
Asigne usuarios a un grupo y, a continuación, asigne el acceso de inicio de sesión único al grupo.
Para conocer las instrucciones, consulte Add groups en la Guía del usuario de AWS IAM Identity Center.
Si aún no ha instalado AWS Command Line Interface, siga los pasos que se indican en Instalación o actualización de la versión más reciente de AWS CLI para instalarlo.
El tutorial requiere un intérprete de comandos o un terminal de línea de comando para ejecutar los comandos. En Linux y macOS, use su administrador de intérprete de comandos 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
Creación del rol de ejecución
Un rol de ejecución es un rol de AWS Identity and Access Management (IAM) que concede a la función de Lambda permiso para acceder a servicios y recursos de AWS. Para permitir que la función lea elementos de Amazon SQS, adjunte la política de permisos AWSLambdaSQSQueueExecutionRole.
Para crear un rol de ejecución y adjuntar una política de permisos de Amazon SQS
-
Abra la página Roles
en la consola de IAM. -
Elija Crear rol.
-
En Tipo de entidad de confianza, elija Servicio de AWS.
-
En Caso de uso, elija Lambda.
-
Elija Siguiente.
-
En el cuadro de búsqueda Permisos de selección, ingrese
AWSLambdaSQSQueueExecutionRole
. -
Seleccione la política AWSLambdaSQSQueueExecutionRole y luego elija Siguiente.
-
En Detalles del rol, para Nombre del rol, ingrese
lambda-sqs-role
; luego elija Crear rol.
Tras crear la función, anote el nombre de recurso de Amazon (ARN) de la función de ejecución. Lo necesitará en pasos posteriores.
Creación de la función
Cree una función de Lambda: que procese los mensajes de Amazon SQS. El código de función registra el cuerpo del mensaje de Amazon SQS en los Registros de CloudWatch.
En este tutorial, se utiliza el tiempo de ejecución de Node.js 18.x, pero también hemos proporcionado archivos de código de ejemplo en otros lenguajes de tiempo de ejecución. Puede seleccionar la pestaña del siguiente cuadro para ver el código del tiempo de ejecución que le interesa. El código JavaScript que usará en este paso está en el primer ejemplo que se muestra en la pestaña JavaScript.
Para crear una función de Lambda Node.js.
-
Cree un directorio para el proyecto y, a continuación, cambie a ese directorio.
mkdir sqs-tutorial cd sqs-tutorial
-
Copie el código de muestra de JavaScript en un nuevo archivo con el nombre
index.js
. -
Cree un paquete de implementación utilizando el siguiente comando
zip
.zip function.zip index.js
-
Cree una función de Lambda con el comando de AWS CLI create-function
. Para el parámetro role
, introduzca el ARN del rol de ejecución que creó anteriormente.nota
La función de Lambda y la cola de Amazon SQS deben estar en la misma Región de AWS.
aws lambda create-function --function-name ProcessSQSRecord \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs18.x \
--role arn:aws:iam::
111122223333
: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.
Para invocar la función de Lambda con un evento de ejemplo
-
Guarde el siguiente JSON como un archivo denominado
input.json
. Este JSON simula un evento que Amazon SQS podría enviar a la función de Lambda, donde"body"
contiene el mensaje real de la cola. En este ejemplo, el mensaje es"test"
.ejemplo Evento de Amazon SQS
Se trata de un evento de prueba y no es necesario que cambie el mensaje o el número de cuenta.
{ "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-1:111122223333:my-queue", "awsRegion": "us-east-1" } ] }
-
Ejecute el siguiente comando de AWS CLI invoke
. Este comando devuelve Registros de CloudWatch en la respuesta. Para obtener más información acerca de la recuperación de registros, consulte Acceso a los registros con la AWS CLI. aws lambda invoke --function-name ProcessSQSRecord --payload file://input.json out --log-type Tail \ --query 'LogResult' --output text --cli-binary-format raw-in-base64-out | base64 --decode
La opción cli-binary-format es obligatoria si va a utilizar 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 Opciones de la línea de comandos globales compatibles con AWS CLI en la Guía del usuario de la AWS Command Line Interface versión 2. -
Encuentre el registro
INFO
en la respuesta. Aquí es donde la función de Lambda registra el cuerpo del mensaje. Debería ver registros con un aspecto similar al siguiente:2023-09-11T22:45:04.271Z 348529ce-2211-4222-9099-59d07d837b60 INFO Processed message test 2023-09-11T22:45:04.288Z 348529ce-2211-4222-9099-59d07d837b60 INFO done
Cree una cola de Amazon SQS.
Cree una cola de Amazon SQS que la función de Lambda pueda utilizar como origen de eventos. La función de Lambda y la cola de Amazon SQS deben estar en la misma Región de AWS.
Para crear una cola
-
Abra la consola de Amazon SQS
. -
Elija Crear cola.
-
Escriba un nombre para la cola. Deje las configuraciones predeterminadas de todas las demás opciones.
-
Elija Crear cola.
Tras crear la cola, anote su ARN. Lo necesitará en el siguiente paso al asociar la cola a la función de Lambda.
Configuración del origen de eventos
Conecte la cola de Amazon SQS a la función de Lambda mediante la creación de una asignación de orígenes de eventos. La asignación de orígenes de eventos lee la cola de Amazon SQS e invoca la función de Lambda cuando se agrega un mensaje nuevo.
Para crear una asignación entre la cola de Amazon SQS y la función de Lambda, ejecute el comando de AWS CLI create-event-source-mapping
aws lambda create-event-source-mapping --function-name ProcessSQSRecord --batch-size 10 \ --event-source-arn arn:aws:sqs:
us-east-1:111122223333:my-queue
Para obtener una lista de las asignaciones de orígenes de eventos, utilice el comando list-event-source-mappings
aws lambda list-event-source-mappings --function-name ProcessSQSRecord
Enviar un mensaje de prueba
Para enviar un mensaje de Amazon SQS a la función de Lambda
-
Abra la consola de Amazon SQS
. -
Elija la cola que creó anteriormente.
-
Seleccione Enviar y recibir mensajes.
-
En el Cuerpo del mensaje, ingrese un mensaje de prueba, como “este es un mensaje de prueba”.
-
Elija 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. Si el controlador de la función vuelve 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.
Consulta de los Registros de CloudWatch
Para confirmar que la función procesó el mensaje
Abra la página de Funciones
en la consola de Lambda. -
Elija la función ProcessSQSRecord.
-
Elegir Monitor.
-
Seleccione Ver Registros en CloudWatch.
-
En la consola de CloudWatch, elija el Flujo de registro para la función.
-
Busque el registro
INFO
. Aquí es donde la función de Lambda registra el cuerpo del mensaje. Debería ver el mensaje que envió desde la cola de Amazon SQS. Ejemplo:2023-09-11T22:49:12.730Z b0c41e9c-0556-5a8b-af83-43e59efeec71 INFO
Processed message this is a test message.
Eliminación de sus recursos
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.
Cómo 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.
-
Si desea continuar, escriba el nombre del rol en el campo de entrada de texto y elija Delete (Eliminar).
Cómo eliminar la función de Lambda
-
Abra la página de Funciones
en la consola de Lambda. -
Seleccione la función que ha creado.
-
Elija Acciones, 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 la 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.
-
Introduzca
confirm
en el campo de entrada de texto. -
Elija Eliminar.