View a markdown version of this page

Integre Amazon API Gateway con Amazon SQS para gestionar el REST asíncrono APIs - Recomendaciones de AWS

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.

Integre Amazon API Gateway con Amazon SQS para gestionar el REST asíncrono APIs

Natalia Colantonio Favero y Gustavo Martim, Amazon Web Services

Resumen

Al implementar REST APIs, a veces es necesario exponer una cola de mensajes que las aplicaciones cliente puedan publicar. Por ejemplo, es posible que tenga problemas con la latencia de terceros APIs y que se produzcan retrasos en las respuestas, o puede que desee evitar el tiempo de respuesta de las consultas a la base de datos o escalar el servidor cuando hay un gran número de consultas APIs simultáneas. En estos escenarios, las aplicaciones cliente que publican en la cola solo necesitan saber que la API ha recibido los datos, no lo que ocurre después de recibirlos.

Este patrón crea un punto de conexión de la API de REST mediante Amazon API Gateway para enviar un mensaje a Amazon Simple Queue Service (Amazon SQS). Crea una easy-to-implement integración entre los dos servicios que evita el acceso directo a la cola de SQS.

Requisitos previos y limitaciones

Arquitectura

Arquitectura para integrar API Gateway con Amazon SQS

En el siguiente diagrama se muestran estos pasos:

  1. Solicite un punto de conexión de la API de REST POST mediante una herramienta como Postman, otra API u otras tecnologías.

  2. API Gateway publica un mensaje, que se recibe en el cuerpo de la solicitud, en la cola.

  3. Amazon SQS recibe el mensaje y envía una respuesta a API Gateway con un código de éxito o error.

Tools (Herramientas)

Epics

TareaDescripciónHabilidades requeridas

Creación de una cola.

Para crear una cola de SQS que reciba los mensajes de la API de REST:

  1. Inicie sesión en su Cuenta de AWS.

  2. Abra la consola Amazon SQS en. https://console.aws.amazon.com/sqs/

  3. Elige Crear cola.

  4. En la página Crear cola, elija la correcta en la lista desplegable Región de AWS de regiones.

  5. En Tipo, mantenga los ajustes predeterminados (Estándar).

  6. Escriba un Nombre para la cola.

  7. Mantenga los valores predeterminados para el resto de ajustes.

  8. Elige Crear cola.

Desarrollador de aplicaciones
TareaDescripciónHabilidades requeridas

Crear un rol de IAM.

Este rol de IAM proporciona a los recursos de API Gateway acceso completo a Amazon SQS.

  1. Abra la consola de IAM en https://console.aws.amazon.com/iam/.

  2. En el panel de navegación, seleccione Roles, Crear rol.

  3. En Tipo de entidad de confianza, elija Servicio de AWS.

  4. En Caso de uso, elija API Gateway en la lista desplegable y, a continuación, elija Siguiente, Siguiente.

  5. En el nombre del rol, introduzca AWSGatewayRoleForSQS y una descripción opcional y, a continuación, elija Crear rol.

  6. En el panel Funciones, busque AWSGatewayRoleForSQS y seleccione su casilla de verificación.

  7. En la sección Políticas de permisos, elija Agregar permisos, Adjuntar políticas.

  8. Busca Amazon SQSFull Access y selecciónalo.

  9. Elija Añadir permisos.

  10. En la sección Resumen de AWSGatewayRoleForSQS, copie el número de recurso de Amazon (ARN). Usará este ID en un paso posterior.

Desarrollador de aplicaciones, administrador de AWS
TareaDescripciónHabilidades requeridas

Crear una API de REST.

Esta es la API de REST a la que se envían las solicitudes HTTP.

  1. Abra la consola de API Gateway en https://console.aws.amazon.com/apigateway/.

  2. En el cuadro API de REST, elija Crear.

  3. En Nombre de API, ingrese un nombre y una descripción opcional para la API, conserve todas las demás configuraciones predeterminadas y, a continuación, seleccione Crear API.

Desarrollador de aplicaciones

Conectar API Gateway a Amazon SQS.

Este paso permite que el mensaje fluya desde el cuerpo de la solicitud HTTP hasta Amazon SQS.

  1. En la consola de API Gateway, elija la API que ha creado.

  2. En la página Recursos, en la sección Métodos, elija Crear método.

  3. En Tipo de método, elija POST

  4. En Tipo de integración, elija Servicio de AWS.

  5. En Región de AWS, elija la región en la que creó la cola de SQS.

  6. En Servicio de AWS, elija Simple Queue Service (SQS).

  7. En Método HTTP, elija POST.

  8. En Tipo de acción, elija Usar sustitución de ruta.

  9. En Sustitución de ruta, ingrese <ID de la cuenta de AWS>/<nombre de la cola de SQS>.

  10. En Rol de ejecución, pegue el ARN del rol que creó anteriormente.

  11. Elija Crear método.

Desarrollador de aplicaciones
TareaDescripciónHabilidades requeridas

Probar la API de REST.

Ejecute una prueba para comprobar si falta alguna configuración:

  1. En la consola de API Gateway, elija la API de REST que ha creado.

  2. En el panel Recursos, elija el método POST.

  3. Elija la pestaña Prueba. (Use la flecha derecha si no se muestra la pestaña).

  4. En Cuerpo de la solicitud, pegue el siguiente código JSON:

    { "message": "lorem ipsum" }
  5. Seleccione Probar

    Recibirá un error similar al siguiente:

    <UnknownOperationException/>
Desarrollador de aplicaciones

Cambiar la integración de la API para reenviar la solicitud correctamente a Amazon SQS.

Complete la configuración para corregir el error de integración:

  1. En la consola de API Gateway, elija la API que creó y, a continuación, elija POST.

  2. En la sección Ejecución de método se muestra la asignación visual entre API Gateway y Amazon SQS. En esta sección, elija Solicitud de integración y, a continuación, Editar.

  3. Expanda la sección Encabezados HTTP y, a continuación, elija el parámetro Agregar encabezado de solicitud.

    • En Nombre, especifique Content-Type.

    • En Mapped from, introduzca «application/» x-www-form-urlencoded. Asegúrese de incluir las comillas simples.

    • Seleccione la casilla de verificación Almacenamiento en caché.

  4. Expanda la sección Plantillas de mapeo.

    • Elija Add mapping template (Añadir plantilla de asignación).

    • En Tipo de contenido, escriba application/json.

    • En Cuerpo de la plantilla, pegue este código:

      Action=SendMessage&MessageBody=$input.body
    • Seleccione Save.

Desarrollador de aplicaciones

Probar y validar el mensaje en Amazon SQS.

Ejecute una prueba para confirmar que la prueba se haya completado correctamente:

  1. En la consola de API Gateway, elija la API de REST que ha creado.

  2. En el panel Recursos, elija el método POST.

  3. Elija la pestaña Prueba. (Use la flecha derecha si no se muestra la pestaña).

  4. En Cuerpo de la solicitud, pegue el siguiente código JSON:

    { "message": "lorem ipsum" }
  5. Seleccione Probar

  6. Abra la consola de Amazon SQS.

  7. En el panel de navegación, elija Colas y luego elija su cola.

  8. Seleccione Enviar y recibir mensajes.

  9. Seleccione Sondeo de mensajes.

  10. Elija Mensaje. Debería aparecer lo siguiente:

    Body { "message": "lorem ipsum" }
Desarrollador de aplicaciones

Probar API Gateway con un carácter especial.

Ejecute una prueba que incluya caracteres especiales (como &) que no sean aceptables en un mensaje:

  1. En la consola de API Gateway, elija su API.

  2. Repita la prueba del paso anterior con el siguiente código JSON:

    { "message": "lorem ipsum &" }
  3. Seleccione Probar

    Recibirá un error como el siguiente:

    { "Error": { "Code": "AccessDenied", "Message": "Access to the resource https://sqs.us-east-2.amazonaws.com/976166761794/Apg2 is denied.", "Type": "Sender" }, "RequestId": "e83c9c67-bcf6-5e9a-91e9-c737094b17ab" }

Esto se debe a que los caracteres especiales no se admiten de forma predeterminada en el cuerpo del mensaje. En el siguiente paso, configurará API Gateway para que admita caracteres especiales. Para obtener más información sobre las conversiones de tipos de contenido, consulte la documentación de API Gateway.

Desarrollador de aplicaciones

Cambiar la configuración de la API para que admita caracteres especiales.

Ajuste la configuración para que acepte caracteres especiales en el mensaje:

  1. En la consola de API Gateway, elija la API que creó y, a continuación, elija POST.

  2. Elija Solicitud de integración y, a continuación, Editar.

  3. Cambie Tratamiento de contenido a Convertir en texto.

  4. En la sección Plantillas de mapeo:

    • En Tipo de contenido, escriba application/json.

    • En Cuerpo de la plantilla, especifique:

      Action=SendMessage&MessageBody=$util.urlEncode($input.body)
    • Seleccione Save.

  5. Elija la pestaña Prueba.

  6. En Cuerpo de la solicitud, ingrese el código JSON anterior:

    { " message": "lorem ipsum &" }
  7. Seleccione Probar

  8. Abra la consola de Amazon SQS.

  9. Seleccione su cola y, a continuación, elija Enviar y recibir mensajes, Sondear si hay mensajes y Mensaje como antes.

El nuevo mensaje debe incluir el carácter especial.

Desarrollador de aplicaciones
TareaDescripciónHabilidades requeridas

Implementar la API.

Para implementar la API de REST:

  1. Abra la consola de API Gateway.

  2. Elija la API.

  3. Elija Implementar API. Para obtener más información sobre este paso, consulte la documentación de API Gateway.

Desarrollador de aplicaciones

Probar con una herramienta externa.

Ejecute una prueba con una herramienta externa para confirmar que el mensaje se ha recibido correctamente:

  1. Abra una herramienta como Postman, Insomnia o cURL.

  2. Ejecute su API.

  3. Abra la consola de Amazon SQS.

  4. Seleccione su cola.

  5. Cargue los mensajes para ver el mensaje nuevo.

Desarrollador de aplicaciones
TareaDescripciónHabilidades requeridas

Eliminar la API.

En la consola de API Gateway, elija la API que creó y, a continuación, elija Eliminar.

Desarrollador de aplicaciones

Eliminación del rol de IAM.

En la consola de IAM, en el panel Funciones, seleccione AWSGatewayRoleForSQS y, a continuación, elija Eliminar.

Desarrollador de aplicaciones

Eliminar la cola de SQS.

En la consola de Amazon SQS, en el panel Colas, elija la cola de SQS que ha creado y, a continuación, elija Eliminar.

Desarrollador de aplicaciones

Recursos relacionados