首页 > 解决方案 > 如何在 Amazon S3 节点 Lambda 函数中创建文件

问题描述

我正在尝试创建对象并将其加载到 s3 容器中,但 PUT 事件似乎没有创建对象

const AWS = require('aws-sdk');
const fs = require('fs');
const s3 = new AWS.S3();

exports.handler = async (event) => {
    // I've tried the full arn as well as just the bucket name 
    const bucket ='someBucketName';
    const key = 'sample.csv';
    // for testing purposes I am just loading a 30 row csv file.
    // I've also tried a json object with no luck
    // ex: const data = JSON.stringify({'label': 'foo'});

    const data = fs.readFileSync('trees.csv','utf-8');

    const params ={
        Bucket : bucket,
        Key : key,
        Body: data
    };
    await s3.putObject(params, function (err, data) {
        if(err){
            console.log(`Error creating file ${err.stack}`);
        }else{
            console.log('File Created');
        }
    });
};

当我执行 lambda 时,它运行时没有错误。但是从来没有在存储桶中创建任何文件,而且我从来没有看到“文件已创建”的输出。如果我在 put 之前添加一个 console.log() ,我可以看到参数都已设置。lambda 具有完全的 s3 访问权限以及对 cloudWatch 的完全访问权限。这只是一个测试,所以我直接从 aws 中的 lambda 控制台运行它。

关于我遗漏或做错了什么的任何建议?

标签: amazon-s3aws-lambdaaws-sdk

解决方案


找到感兴趣的人的答案。我省略了 putObject 函数上的 promise()。

const AWS = require('aws-sdk');
const fs = require('fs');
const s3 = new AWS.S3();

exports.handler = async (event) => {
    const bucket ='someBucketName';
    const key = 'sample.csv';    
    const data = fs.readFileSync('trees.csv','utf-8');

    const params ={
        Bucket : bucket,
        Key : key,
        Body: data
    };
    await s3.putObject(params, function (err, data) {
        if(err){
            console.log(`Error creating file ${err.stack}`);
        }else{
            console.log('File Created');
        }
    }).promise();
};

推荐阅读