AWS Lambda - невозможно преобразовать вызов SDK в обещание - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть лямбда, которая выглядит так:

module.exports.handler = (event, context, callback) => {

  AWS.config.setPromisesDependency(null);
  const uploadPromise = s3.upload(params).promise();

  uploadPromise.then((data) => {
    const response = {
      ...
    };
    return response;
  }).catch((error) => {
    console.log(error);
  });
};

Вызов его из Почтальона приводит к ошибке сервера в Почтальоне. Журналы CloudWatch не имеют дополнительной информации.

Выполнение:

s3.upload(params, (error, data) => {
  if (error) {
    console.error("error occurred storing to s3: ", error);
    return;
  }
  const response = {
    ...
  };    
  return response;
});

не приводит к ошибке сервера.

Я пытаюсь проследить информацию от AWS, которую можно найти здесь:

https://aws.amazon.com/blogs/developer/support-for-promises-in-the-sdk/

1 Ответ

0 голосов
/ 22 апреля 2019

Почтальон может загрузить в Lambda, выполнив следующие действия с async / await и try / catch:

exports.handler = async function(event, context) {
  const s3 = new AWS.S3();
  const encodedImage = util.inspect(event.body);
  const decodedImage = Buffer.from(encodedImage, "base64");
  const filePath = "test.png";
  const params = {
    Body: decodedImage,
    Bucket: "my bucket",
    Key: filePath,
    ACL: "public-read",
    ContentType: "mime/png"
  };

  try {
    const result = await s3.upload(params).promise();
    const response = {
      statusCode: 200,
      headers: {
        my_header: "my_value"
      },
      body: JSON.stringify(result),
      isBase64Encoded: false
    };
    return response;
  } catch (error) {
    console.log('error')
  }
};
...