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.
Procesamiento de eventos de forma asíncrona con Amazon API Gateway, Amazon SQS y AWS Fargate
Andrea Meroni, Mariem Kthiri, Nadim Majed, Alessandro Trisolini y Michael Wallner, Amazon Web Services
Resumen
Amazon API Gateway es un servicio totalmente gestionado que los desarrolladores pueden utilizar para crear, publicar, mantener, supervisar y proteger APIs a cualquier escala. Gestiona las tareas relacionadas con la aceptación y el procesamiento de centenares de miles de llamadas simultáneas a la API.
Una cuota de servicio importante de API Gateway es el tiempo de espera de la integración. El tiempo de espera es el tiempo máximo durante el que un servicio de backend debe devolver una respuesta antes de que la API de REST devuelva un error. El límite estricto de 29 segundos suele ser aceptable para las cargas de trabajo sincrónicas. Sin embargo, ese límite representa un desafío para los desarrolladores que desean usar API Gateway con cargas de trabajo asíncronas.
Este patrón muestra un ejemplo de arquitectura para procesar eventos de forma asíncrona mediante API Gateway, Amazon Simple Queue Service (Amazon SQS) y. AWS Fargate La arquitectura admite la puesta en marcha de trabajos de procesamiento sin restricciones de duración y utiliza una API de REST básica como interfaz.
Projen
Requisitos previos y limitaciones
Requisitos previos
Un activo Cuenta de AWS
Las siguientes herramientas están instaladas en su estación de trabajo:
AWS Cloud Development Kit (AWS CDK) Kit de herramientas versión 2.85.0 o posterior
La versión 20.10.21 o posterior de Docker
La versión 18 o posterior de Node.js
La versión 0.71.111 o posterior de Projen
La versión 3.9.16 o posterior de Python
Limitaciones
Los trabajos simultáneos están limitados a 500 tareas por minuto, que es el número máximo de tareas que Fargate puede aprovisionar.
Arquitectura
El siguiente diagrama muestra la interacción de la API de trabajos con la tabla jobs Amazon DynamoDB, el servicio Fargate de procesamiento de eventos y la función de gestión de errores. AWS Lambda Los eventos se almacenan en un archivo de EventBridge eventos de Amazon.

Un flujo de trabajo habitual incluye los siguientes pasos:
Usted se autentica con AWS Identity and Access Management (IAM) y obtiene las credenciales de seguridad.
Envía una solicitud
POSTHTTP al punto de conexión de la API de trabajos/jobs, especificando los parámetros del trabajo en el cuerpo de la solicitud.La API de trabajos, que es una API de REST de API Gateway, le devuelve una respuesta HTTP que contiene el identificador del trabajo.
La API de trabajos envía un mensaje a la cola de SQS.
Fargate extrae el mensaje de la cola de SQS, procesa el evento y, a continuación, agrega los resultados del trabajo a la tabla
jobsde DynamoDB.Envía una solicitud
GETHTTP al punto de conexión de la API de trabajos/jobs/{jobId}, con el identificador de trabajo del paso 3 como{jobId}.La API de trabajos consulta la tabla
jobsde DynamoDB para recuperar los resultados del trabajo.La API de trabajos devuelve una respuesta HTTP que contiene los resultados del trabajo.
Si el procesamiento de eventos falla, la cola de SQS envía el evento a la cola de mensajes fallidos (DLQ).
Un EventBridge evento inicia la función de gestión de errores.
La función de gestión de errores agrega los parámetros del trabajo a la tabla
jobsde DynamoDB.Puede recuperar los parámetros del trabajo enviando una solicitud
GETHTTP al punto de conexión de la API de trabajos/jobs/{jobId}.Si la gestión de errores falla, la función de gestión de errores envía el evento a un archivo. EventBridge
Puede reproducir los eventos archivados utilizando. EventBridge
Tools (Herramientas)
Servicios de AWS
AWS Cloud Development Kit (AWS CDK)es un marco de desarrollo de software que le ayuda a definir y aprovisionar la Nube de AWS infraestructura en código.
Amazon DynamoDB es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.
AWS Fargatele ayuda a ejecutar contenedores sin necesidad de gestionar servidores o instancias de Amazon Elastic Compute Cloud (Amazon EC2). Se utiliza en conjunto con Amazon Elastic Container Service (Amazon ECS).
Amazon EventBridge es un servicio de bus de eventos sin servidor que le ayuda a conectar sus aplicaciones con datos en tiempo real de diversas fuentes. Por ejemplo, funciones de Lambda, puntos de conexión de invocación HTTP que utilizan destinos de API o buses de eventos en otras Cuentas de AWS.
AWS Lambda es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.
Amazon Simple Queue Service (Amazon SQS) ofrece una cola alojada segura, duradera y disponible que le permite integrar y desacoplar sistemas y componentes de software distribuidos.
Otras herramientas
autopep8
formatea automáticamente el código de Python según la guía de estilo Python Enhancement Proposal (PEP) 8. Bandit
analiza el código de Python para detectar problemas de seguridad comunes. Commitizen
un verificador de confirmaciones y generador de CHANGELOGde Git.cfn-lint es un linter
AWS CloudFormation Checkov
es una herramienta de análisis de código estático que revisa si la infraestructura como código (IaC) se ha configurado mal en términos de seguridad y cumplimiento. jq
es una herramienta de línea de comandos para analizar JSON. Postman
es una plataforma de API. pre-commit
es un administrador de enlaces de Git. Projen
es un generador de proyectos. pytest
es un marco de Python para escribir pruebas pequeñas y legibles.
Repositorio de código
Este ejemplo de código de arquitectura se encuentra en el repositorio de SQS y procesamiento GitHub asíncrono con API Gateway
Prácticas recomendadas
Esta arquitectura de ejemplo no incluye la supervisión de la infraestructura implementada. Si su caso de uso requiere supervisión, evalúe la posibilidad de agregar CDK Monitoring Constructs
u otra solución de supervisión. Esta arquitectura de ejemplo usa permisos de IAM para controlar el acceso a la API de trabajos. Cualquier persona autorizada a asumir
JobsAPIInvokeRolepodrá invocar la API de trabajos. Como tal, el mecanismo de control de acceso es binario. Si su caso de uso requiere un modelo de autorización más complejo, evalúe la posibilidad de usar un mecanismo de control de acceso diferente.Cuando un usuario envía una solicitud
POSTHTTP al punto de conexión de la API de trabajos/jobs, los datos de entrada se validan en dos niveles diferentes:API Gateway se encarga de la validación de la primera solicitud.
La función de procesamiento de eventos realiza la segunda solicitud.
No se hace ninguna validación cuando el usuario realiza una solicitud
GETHTTP al punto de conexión de la API de trabajos/jobs/{jobId}. Si su caso de uso requiere una validación de entrada adicional y un mayor nivel de seguridad, evalúe su uso AWS WAF para proteger su API.
Epics
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Clonar el repositorio. | Para clonar el repositorio localmente, use el siguiente comando:
| DevOps ingeniero |
Configure el proyecto. | Cambie el directorio a la raíz del repositorio y configure el entorno virtual de Python y todas las herramientas mediante Projen
| DevOps ingeniero |
Instale enlaces de pre-commit. | Para instalar enlaces de pre-commit, haga lo siguiente:
| DevOps ingeniero |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Bootstrap. AWS CDK | Para arrancar AWS CDK
| AWS DevOps |
Implemente la arquitectura de ejemplo. | Para implementar la arquitectura de ejemplo en su Cuenta de AWS servidor, ejecute el siguiente comando:
| AWS DevOps |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Instale los requisitos previos de prueba. | Instale en su estación de trabajo AWS Command Line Interface (AWS CLI), Postman Se sugiere usar Postman | DevOps ingeniero |
Asuma el | Asuma
| AWS DevOps |
Configure Postman. |
| AWS DevOps |
Pruebe la arquitectura de ejemplo. | Para probar la arquitectura de ejemplo, envíe solicitudes a la API de trabajos. Para obtener más información, consulte la documentación de Postman | DevOps ingeniero |
Resolución de problemas
| Problema | Solución |
|---|---|
La destrucción y posterior redespliegue de la arquitectura de ejemplo fallan porque el grupo de CloudWatch registros de Amazon Logs |
|
La destrucción y posterior redespliegue de la arquitectura del ejemplo fallan porque el grupo de CloudWatch registros |
|