将屏幕截图从AWS lambda上载到s3存储桶失败

时间:2018-06-11 22:05:27

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

我正在尝试在aws lambda上使用puppeteer截取屏幕截图并将屏幕截图上传到s3存储桶。但是,s3.putObject方法似乎不起作用。在lambda控制台上,我得到了#34;上传截图' s3:// $ {s3bucket} / $ {filename}'"和#34;上传已完成"消息但不是"内部回调"信息。奇怪的是,我在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");

}

1 个答案:

答案 0 :(得分:2)

解决。

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

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

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