Tutorial: Uso de una cola entre cuentas de Amazon SQS como una fuente de evento - AWS Lambda

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Tutorial: Uso de una cola entre cuentas de Amazon SQS como una fuente de evento

En este tutorial, creará una función de Lambda que consuma los mensajes de una cola de Amazon Simple Queue Service (Amazon SQS) en una cuenta de AWS diferente. Este tutorial incluye dos cuentas de AWS: la Cuenta A hace referencia a la cuenta que contiene la función de Lambda y la Cuenta B hace referencia a la cuenta que contiene la cola de 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 de Lambda.

Para completar los siguientes pasos, necesita la versión 2 de la AWS Command Line Interface (AWS CLI). Los comandos y la salida esperada se enumeran en bloques separados:

aws --version

Debería ver los siguientes datos de salida:

aws-cli/2.13.27 Python/3.11.6 Linux/4.14.328-248.540.amzn2.x86_64 exe/x86_64.amzn.2

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

Creación del rol de ejecución (Cuenta A)

En la Cuenta A, cree un rol de ejecución que conceda permiso a la función para acceder a los recursos necesarios de AWS.

Para crear un rol de ejecución
  1. Abra la página de Roles (Roles) en la consola de AWS Identity and Access Management (IAM).

  2. Elija Crear rol.

  3. Cree un rol con las propiedades siguientes.

    • Trusted entity (Entidad de confianza): AWS Lambda

    • PermisosAWSLambdaSQSQueueExecutionRole

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

La AWSLambdaSQSQueueExecutionRolepolítica 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 (Cuenta A)

En la Cuenta A, cree una función de Lambda que procese los mensajes de Amazon SQS. El siguiente ejemplo de código de Node.js 18 escribe cada mensaje en un registro de 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.mjs
export const handler = async function(event, context) { event.Records.forEach(record => { const { body } = record; console.log(body); }); return {}; }
Cómo crear la función
nota

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

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

  2. Cree un paquete de implementación.

    zip function.zip index.mjs
  3. Cree la función mediante el comando create-function de la AWS Command Line Interface (AWS CLI).

    aws lambda create-function --function-name CrossAccountSQSExample \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs18.x \ --role arn:aws:iam::<AccountA_ID>:role/cross-account-lambda-sqs-role

Prueba de la función (Cuenta A)

En la Cuenta A, pruebe la función de Lambda de forma manual mediante el comando invoke de la AWS CLI y un evento de Amazon SQS de muestra.

Si el controlador vuelve normalmente sin excepciones, Lambda considera que el mensaje se procesó de forma correcta y empieza a leer mensajes nuevos 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-1:111122223333:example-queue", "awsRegion": "us-east-1" } ] }

    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 siguiente comando AWS CLI de la invoke.

    aws lambda invoke --function-name CrossAccountSQSExample \ --cli-binary-format raw-in-base64-out \ --payload file://input.txt outputfile.txt

    La opción cli-binary-format es obligatoria si va a utilizar la versión 2 de la 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.

  3. Verifique la salida en el archivo outputfile.txt.

Creación de una cola de Amazon SQS (Cuenta B)

En la Cuenta B, cree una cola de Amazon SQS que la función de Lambda en la Cuenta A pueda utilizar como una fuente de evento.

Para crear una cola
  1. Abra la consola de Amazon SQS.

  2. Elija Crear cola.

  3. Cree una cola con las siguientes propiedades.

    • Type (Tipo): estándar

    • Nombre: LambdaCrossAccountQueue

    • Configuration (Configuración): conserve la configuración predeterminada.

    • Access policy (Política de acceso): elija Advanced (Avanzada). Pegue la siguiente política JSON:

      { "Version": "2012-10-17", "Id": "Queue1_Policy_UUID", "Statement": [{ "Sid":"Queue1_AllActions", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::<AccountA_ID>:role/cross-account-lambda-sqs-role" ] }, "Action": "sqs:*", "Resource": "arn:aws:sqs:us-east-1:<AccountB_ID>:LambdaCrossAccountQueue" } ] }

      Esta política concede al rol de ejecución de Lambda en la Cuenta A los permisos para consumir mensajes de esta cola de Amazon SQS.

  4. 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 de la fuente de evento (Cuenta A)

En la Cuenta A, cree una asignación de orígenes de eventos entre la cola de Amazon SQS en la Cuenta B y la función de Lambda al ejecutar el siguiente comando create-event-source-mapping de la AWS CLI.

aws lambda create-event-source-mapping --function-name CrossAccountSQSExample --batch-size 10 \ --event-source-arn arn:aws:sqs:us-east-1:<AccountB_ID>:LambdaCrossAccountQueue

Para obtener una lista de mapeos de fuentes de eventos, ejecute el siguiente comando.

aws lambda list-event-source-mappings --function-name CrossAccountSQSExample \ --event-source-arn arn:aws:sqs:us-east-1:<AccountB_ID>:LambdaCrossAccountQueue

Prueba de la configuración

Ahora puede probar la configuración de la siguiente manera:

  1. En la Cuenta B, abra la consola de Amazon SQS.

  2. Elige LambdaCrossAccountQueueel que creaste 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 Enviar mensaje.

La función de Lambda en la Cuenta A debería recibir el mensaje. Lambda continuará sondeando 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. Tu función se ejecuta y crea registros en Amazon CloudWatch. Puede ver sus registros en la consola de CloudWatch .

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.

En la Cuenta A, limpie el rol de ejecución y la función de Lambda.

Cómo 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.

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

  2. Seleccione la función que ha creado.

  3. Elija Acciones, Eliminar.

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

En la Cuenta B, limpie la cola de Amazon SQS.

Para eliminar la cola de Amazon SQS
  1. Inicie sesión en la 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.

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

  5. Elija Eliminar.