typescript - s3.putObject() در حال آپلود فایل به S3 است اما سپس هرگز پاسخی برنمیگرداند؟


import AWS from 'aws-sdk';
const s3 = new AWS.S3();

export async function putObjectToS3(
  data: any,
  nameOfFile: string,
  contentType: string
) {
  const params = {
    Bucket: process.env.S3_BUCKET || '',
    ContentType: contentType,
    Key: `${nameOfFile}`,
    Body: data
  };

  console.log('start s3 put object');
  const response = await s3.putObject(params).promise();

  console.log('end s3 put object: ', response);
  return response;
}


await putObjectToS3(artistsCsv, `artists/artists.csv`, 'text/csv');

ما تابع زیر را داریم که یک فایل را به AWS S3 آپلود میکند. این در یک تابع AWS Lambda اجرا میشود. در حالی که فایل artistsCsv ما با موفقیت آپلود میشود (ما فایل CSV را در S3 مشاهده میکنیم)، تابع هرگز باز نمیگردد... در لاگهای خود پیام 'start s3 put object' را میبینیم، اما هرگز 'end s3 put object: ', response را نمیبینیم.

آیا مشکلی در نحوهای که این تابع را ساختهایم وجود دارد که باعث میشود هرگز response برنگردد؟ ما از نسخه aws-sdk "aws-sdk": "^2.1147.0" استفاده میکنیم.

آیا ممکن است این صرفاً یک مشکل با AWS باشد؟ (اگرچه به نظر بعید میرسد). شاید مشکلی با .promise() و async/await باشد که ما از آن غافل شدهایم؟ چگونه میتوانیم حتی این مشکل را عیبیابی کنیم؟

پاسخ شماره ۱

شما میتوانید از روش upload استفاده کنید اگر putObject کار نکرد، این روش از Promise از نسخه 2.6.12 پشتیبانی میکند (https://github.com/aws/aws-sdk-js/blob/master/CHANGELOG.md#2612)، بنابراین چیزی شبیه به این باید کار کند:

const response = await s3.upload(uploadParams).promise();
console.log('end s3 put object: ', response);

شما همچنین میتوانید یک نمونه کامل از مستندات اصلی را در اینجا پیدا کنید (این نمونه با callback است، اما مفهوم همان است):
https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javascript/example_code/s3/s3_upload.js