Estoy usando el paquete @aws-sdk/client-lambda npm para invocar lambdas. Tengo dos lambda. Lambda A y Lambda B. Lambda A está intentando invocar a Lambda B.
Lambda A invoca a Lambda B ejecutando el siguiente código:
const { LambdaClient, InvokeCommand } = require('@aws-sdk/client-lambda'); module.exports = { getGitHubToken: async () => { const client = new LambdaClient({ region: process.env.REGION }); const params = { FunctionName: process.env.GITHUB_TOKEN_FUNCTION, LogType: 'Tail', Payload: '', }; const command = new InvokeCommand(params); try { const { Payload } = await client.send(command); console.log(Payload); return Payload; } catch (error) { console.error(error.message); throw error; } }, };La respuesta esperada de Lambda B debería verse así:
{ statusCode: 200, body: JSON.stringify({ token: '123', }), }; Sin embargo, Payload parece devolver esto desde la línea console.log(Payload); :
Busqué en el sitio web de AWS SDK y parece que Payload devuelve un Uint8Array . ¿Supongo que esto es porque es de una promesa?
Intenté hacer Payload.toString() sin embargo, eso regresa simplemente como una cadena de valores en Unit8Array . Ejemplo siendo:
2021-04-13T14:32:04.874Z worker:success Payload: 123,34,115,116,97,116,117,115,67,111,100,101,34,58,50,48,48,44,34,98,111,100,121,34,58,34,123,92,34,116,111,107,101,110,92,34,58,92,34,103,104,115,95,111,114,101,51,65,109,99,122,86,85,74,122,66,52,90,68,104,57,122,122,85,118,119,52,51,50,111,67,71,48,50,75,121,79,69,72,92,34,125,34,125Mi pregunta:
¿Cómo resuelvo los datos de Unit8Array a los datos que esperaba de la respuesta de Lambda? ¿Cuál es un objeto JSON?
He confirmado que la Lambda solicitada (Lambda B en este caso) está devolviendo los datos correctamente yendo a CloudWatch. Gracias.
Bien, encontré una manera de hacer que esto funcione.
Tienes que especificar un codificador de texto:
const asciiDecoder = new TextDecoder('ascii');Luego decodifícalo para que se vea así:
const data = asciiDecoder.decode(Payload);He registrado un problema en su repositorio preguntando por qué esto no está incluido en el módulo. Publicaré una actualización sobre cualquier movimiento al respecto.