Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

567
Vistas
¿Es posible PUBLICAR en la URL de SQS usando el cuerpo de la publicación?

https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html

 https://sqs.us-east-2.amazonaws.com/123456789012/MyQueue/ ?Action=SendMessage &MessageBody=This+is+a+test+message

Esto funciona bien, sin embargo, ¿es posible enviar la carga usando el cuerpo de la publicación?

Tengo un servicio externo que envía cargas útiles json en el cuerpo de la publicación (con un rendimiento muy alto). Sería ideal si simplemente pudiera proporcionarles la URL de SQS directamente y evitar tener que crear una puerta de enlace api de AWS --> lambda --> pila de SQS.

Estoy abierto a soluciones alternativas.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Esto puede no haber sido exactamente lo que los diseñadores de API Gateway tenían en mente, pero dado...

  • la forma en que las API de consultas de AWS (tal como las utilizan los SDK) funcionan en línea para servicios como SQS: pares clave/valor codificados en URL en el formato estándar application/x-www-form-urlencoded , y

  • el hecho de que el lenguaje de plantilla de mapeo de cuerpo incorporado en API Gateway (VTL) expone $util.urlEncode() , y

  • el hecho de que API Gateway puede firmar solicitudes de forma transparente al enviarlas a un servicio de back-end

...esto significa que simplemente puede construir una solicitud de API válida, una publicación de formulario, a mano, usando una plantilla VTL, que encapsula el cuerpo del mensaje original, codificado en urlen, y eso es todo lo que necesitamos. En realidad, no nos importa que sea JSON, siempre que sean datos de caracteres válidos.

Con esta solución, se evita una función Lambda y el cliente no necesita saber nada sobre cómo SQS espera que se formatee los mensajes.

Todo el cuerpo de la solicitud entrante se convierte en el Message en SQS.


En la consola de API Gateway:

Cree el recurso (p. ej. / ) y el método (p. ej. POST ).

En la configuración de Solicitud de Integración:

 Integration type: AWS Service AWS Region: [select your region] AWS Service: Simple Queue Service (SQS) AWS Subdomain [leave blank] HTTP Method: POST Action Type: Use path override Path override: / Execution Role: [your role ARN, needs to be able to send a message to the queue] Credentials cache: Do not add caller credentials to cache key Content Handling: Passthrough

En HTTP Headers , agregue un encabezado, Content-Type . Este valor debe especificarse como "asignado desde" 'application/x-www-form-urlencoded' ; tenga en cuenta que se trata de una cadena entre comillas simples.

En Body Mapping Templates , elija Never .

Agregue un Content-Type de application/json y use la siguiente plantilla de mapeo:

 Action=SendMessage## &QueueUrl=$util.urlEncode('https://sqs.us-east-2.amazonaws.com/000000000000/my-queue-name')## &MessageBody=$util.urlEncode($input.body)##

Y tiene una API que transforma el cuerpo de entrada JSON sin procesar en una solicitud de API SendMessage de SQS.

El ## al final de cada línea es para facilitar la lectura: VTL es un lenguaje de plantillas de texto, por lo que se conservan los espacios en blanco y las nuevas líneas. Colocar ## al final de cada línea hace que se elimine la nueva línea, lo cual es necesario para crear un formulario web correcto. De lo contrario, la plantilla de mapeo de todo el cuerpo debería estar en una sola línea.

Implementar y luego probar:

 $ curl -X POST https://xxxxxxxxxx.execute-api.us-east-2.amazonaws.com/v1 --data '{"works": true}' -H 'Content-Type: application/json'

Respuesta:

 {"SendMessageResponse":{"ResponseMetadata":{"RequestId":"bbbbbbbb-aaaa-5555-8888-334ed25bb6b3"},"SendMessageResult":{"MD5OfMessageAttributes":null,"MD5OfMessageBody":"81f2ecc3cb027268138bdfe7af0f8a3f","MessageId":"cccccccc-dddd-4444-1111-542e08bb39af","SequenceNumber":null}}}

Para crédito adicional, también se puede reutilizar una plantilla de mapeo corporal en la respuesta de integración para personalizar la respuesta.

over 4 years ago · Santiago Trujillo Denunciar

0

Hay un tutorial sobre este tema en https://blog.rewind.io/2016/11/16/handle-shopify-webhooks-without-a-server

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda