【问题标题】:Can't upload files from Lambda to S3无法将文件从 Lambda 上传到 S3
【发布时间】:2021-11-03 22:44:35
【问题描述】:

我在本地主机上进行了测试,然后在 s3 上进行了检查,发现创建了一个新文件。 但是在Lambda上测试的时候,虽然没有报错,但是S3上没有文件。 s3.upload(params).promise() 的日志也不显示。

var fs = require('fs');
var AWS = require('aws-sdk');
exports.handler = async (event, context, callback) => {
    context.callbackWaitsForEmptyEventLoop = false
    try {
        AWS.config.update({
            accessKeyId: accessKeyId,
            secretAccessKey: secretAccessKey
        });
        
        var s3 = new AWS.S3();
        var path = 'myfile.txt';
        var file_buffer =  fs.readFileSync(path);

        console.log(file_buffer);
        var params = {
            Bucket: 'bucket-dev',
            Key: '2222.txt',
            Body: file_buffer
        };
        console.log("1111");
        s3.upload(params).promise()
            .then(function(data) {
                console.log("Successfully uploaded to");
                callback(null, "All Good");
            })
            .catch(function(err) {
                console.error(err, err.stack);
                callback(err);
            });
        console.log("2222");
       return context.logStreamName
    } catch (err) {
        console.log(err);
        callback(err);
    }
}

谢谢

【问题讨论】:

  • console.log(file_buffer); 是否在 CloudWatch 日志中提供任何打印输出?
  • 不要将 async 形式的 lambda 处理程序与 callback 混合匹配!
  • @Marcin CloudWatch 日志,它正在记录结果 。我认为这不是问题

标签: node.js amazon-web-services amazon-s3 aws-lambda


【解决方案1】:

尽量不要混搭asynccallback。像这样的东西可能更接近你想要的......

var fs = require("fs");
var AWS = require("aws-sdk");

exports.handler = async (event, context) => {
  AWS.config.update({
    accessKeyId,
    secretAccessKey,
  });

  const s3 = new AWS.S3();
  const path = "myfile.txt";
  const file_buffer = fs.readFileSync(path);
  const params = {
    Bucket: "bucket-dev",
    Key: "2222.txt",
    Body: file_buffer,
  };
  console.log("1111");
  const res = await s3.upload(params).promise();
  console.log("Successfully uploaded", res);
  return "All good";
};

【讨论】:

  • 谢谢。 localhost 上的这段代码只需要 1 秒即可完成,但在 lambda 上,10 分钟仍未完成。你知道是什么原因吗?
  • 我的问题是使用 vpc。感谢您的帮助
猜你喜欢
  • 2018-08-20
  • 1970-01-01
  • 1970-01-01
  • 2021-08-22
  • 2018-01-16
  • 2021-05-21
  • 2017-10-26
  • 2021-07-15
  • 2018-03-25
相关资源
最近更新 更多