【问题标题】:Uploading screenshot from AWS lambda to s3 bucket fails将屏幕截图从 AWS lambda 上传到 s3 存储桶失败
【发布时间】:2018-11-21 05:35:57
【问题描述】:

我正在尝试在 aws lambda 上使用 puppeteer 截取屏幕截图并将屏幕截图上传到 s3 存储桶。但是, s3.putObject 方法似乎不起作用。在 lambda 控制台上,我收到了“上传屏幕截图 's3://${s3bucket}/${filename}'”和“上传完成”消息,但没有收到“内部回调”消息。奇怪的是,在 lambda 执行过程中我没有收到任何错误,但是我无法在 putObject 方法中获取消息,也无法在存储桶中找到屏幕截图。谁能给我一些关于如何调试的建议?

const aws = require('aws-sdk');
const s3 = new aws.S3({ apiVersion: '2006-03-01' });

module.exports.saveScreenshotToS3 = async(page, s3bucket, filename) => {
    let buffer = await page.screenshot({encoding: "base64"});
    console.log(`Uploading screenshot 's3://${s3bucket}/${filename}'`);
    const s3Params = {
        Bucket: s3bucket,
        Key: filename,
        Body: buffer
    };
    await s3.putObject(s3Params, (err, data) => {
        console.log("inside callback");
        if (err) {
            console.log(err);
        } else {
            console.log("uploading succeeded");
        }
    }).promise();
    console.log("uploading completed");

}

【问题讨论】:

  • 您正在使用 async 和 await 不正确,await 仅适用于 Promise,所以像这样使用:await s3.putObject(s3Params).promise();
  • 感谢您的评论!我修复了我的代码,以免其他人感到困惑。

标签: amazon-web-services amazon-s3 aws-lambda aws-sdk puppeteer


【解决方案1】:

已解决。

我只更改了存储桶策略中的权限,忘记更改 CORS 配置,这就是我的功能失败的原因。

我在我的 CORS 配置脚本中添加了<AllowedMethod> PUT </AllowedMethod>,并且上传工作正常。

请记住同时更改存储桶策略和 CORS 配置,以便您拥有将文件上传到存储桶的正确权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 2018-04-25
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    相关资源
    最近更新 更多