Escritura de funciones de Lambda habilitadas para la transmisión de respuestas
Escribir el controlador para las funciones de transmisión de respuestas es diferente a escribir los patrones de controlador típicos. Al escribir funciones de transmisión, asegúrese de realizar lo siguiente:
Ajuste su función con el decorador
awslambda.streamifyResponse()
que proporcionan los tiempos de ejecución nativos de Node.js.Finalice la transmisión de manera correcta para asegurarse de que se haya completado todo el procesamiento de datos.
Configuración de una función de controlador para transmitir respuestas
Para indicar al tiempo de ejecución que Lambda debe transmitir las respuestas de su función, debe ajustar la función al decorador streamifyResponse()
. Esto indica al tiempo de ejecución que utilice la ruta lógica adecuada para transmitir las respuestas y permite que la función transmita las respuestas.
El decorador streamifyResponse()
acepta una función que acepta los siguientes parámetros:
event
: proporciona información sobre el evento de invocación de la URL de función, como el método HTTP, los parámetros de consulta y el cuerpo de la solicitud.responseStream
: proporciona una transmisión con escritura permitida.context
: proporciona métodos y propiedades con información acerca de la invocación, la función y el entorno de ejecución.
El objeto responseStream
es un writableStream
de Node.jspipeline()
.
ejemplo controlador habilitado para transmisión de respuestas
const pipeline = require("util").promisify(require("stream").pipeline); const { Readable } = require('stream'); exports.echo = awslambda.streamifyResponse(async (event, responseStream, _context) => { // As an example, convert event to a readable stream. const requestStream = Readable.from(Buffer.from(JSON.stringify(event))); await pipeline(requestStream, responseStream); });
Si bien responseStream
ofrece el método write()
para escribir en la transmisión, le recomendamos que utilice pipeline()
pipeline()
garantiza que la transmisión con escritura permitida no se sature por una transmisión legible más rápida.
Finalización de la transmisión
Asegúrese de finalizar la transmisión correctamente antes de que el controlador regrese. El método pipeline()
gestiona esto de manera automática.
Para otros casos de uso, llame al método responseStream.end()
para finalizar correctamente una transmisión. Este método indica que no se deben escribir más datos en la transmisión. Este método no es necesario si escribe a la transmisión con pipeline()
o pipe()
.
ejemplo Ejemplo de finalización de una transmisión con pipeline()
const pipeline = require("util").promisify(require("stream").pipeline); exports.handler = awslambda.streamifyResponse(async (event, responseStream, _context) => { await pipeline(requestStream, responseStream); });
ejemplo Ejemplo de finalización de una transmisión sin pipeline()
exports.handler = awslambda.streamifyResponse(async (event, responseStream, _context) => { responseStream.write("Hello "); responseStream.write("world "); responseStream.write("from "); responseStream.write("Lambda!"); responseStream.end(); });