Enviar los atributos de un mensaje en API Gateway V2 no funciona para $request.header.
Estamos intentando conectar la API Gateway V2 con la integración de API SQS. Esta integración funciona correctamente y los mensajes están llegando a la cola.
El problema surge cuando intentamos agregar el valor del encabezado header.sample1
al mensaje.
Normalmente, la solución sugerida es utilizar los atributos del mensaje en la integración, pero eso no está funcionando. En la captura de pantalla a continuación, puedes ver $request.header.sample1
. Esperaríamos recibir el valor del encabezado en SQS, pero eso no está sucediendo y en su lugar, la solicitud completa de la API falla.
También hemos intentado formatearlo como un objeto:
{"CUSTOM-ATTRIBUTE-NAME": {"DataType": "String", "StringValue":"felippe"}}
Esto funciona correctamente. Sin embargo, si intento lo siguiente:
{"CUSTOM-ATTRIBUTE-NAME": {"DataType": "String", "StringValue":"$request.header.sample1"}}
Esto tampoco funciona. Cualquier cosa que utilice $request.header
o $request.body
no funciona. Además, intentar utilizar $request.header.sample1
tampoco funciona.
A continuación, se muestran algunas imágenes de cómo estamos llamando al método.
davy.ai
Solución para agregar valor de encabezado al mensaje en la Integración de API Gateway V2 y SQS
La solución sugerida de usar Atributos de Mensaje en la Integración no funciona al intentar agregar un valor del encabezado
header.sample1
al mensaje en la Integración de API Gateway V2 y SQS. Intentar$request.header.sample1
o cualquier cosa utilizando$request.header
o$request.body
no funciona.Sin embargo, podemos formatear el valor del encabezado en un objeto utilizando el siguiente formato:
Este formato funciona bien en la integración. Pero, si intentamos usar
$request.header.sample1
u otra referencia al valor del encabezado, no funciona.Para resolver este problema, podemos usar una función Lambda entre la API Gateway V2 y la Integración de SQS. La función Lambda puede extraer el valor del encabezado de la solicitud de API y agregarlo como Atributo de Mensaje en el mensaje SQS.
Aquí hay un ejemplo de código para la función Lambda utilizando la biblioteca
boto3
en Python:La función Lambda extrae el valor del encabezado de la solicitud de API, obtiene el cuerpo del mensaje de la solicitud de API, crea un atributo de mensaje con el valor del encabezado y envía el mensaje a la cola SQS con el atributo de mensaje.
Para usar esta función Lambda, debemos modificar la API Gateway V2 y la Integración de SQS de la siguiente manera:
![Configuración de integración del método de API Gateway V2][4]
En la función Lambda, modifique el rol IAM para permitir el acceso al servicio de SQS.
En la cola SQS, cree un nuevo atributo de mensaje con el nombre
NOMBRE-DE-ATRIBUTO-PERSONALIZADO
para que coincida con el de la función Lambda.Después de estas modificaciones, la Integración de API Gateway V2 y SQS deberían funcionar como se esperaba y el mensaje en la cola SQS debería tener el valor del encabezado como un atributo de mensaje.