Как создать файл в лямбда-функции Amazon S3 Node - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь создать и загрузить объект в контейнер 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');
        }
    });
};

Когда я выполняю лямбду, он запускается без ошибок. Но файл никогда не создается в корзине, и я никогда не вижу вывод «Файл создан». Если я добавлю console.log () перед положением, я вижу, что все параметры установлены. Лямбда имеет полный доступ к s3, а также полный доступ к cloudWatch. Это всего лишь тест, поэтому я запускаю его прямо с лямбда-консоли в aws.

Любые предложения о том, что я пропускаю или делаю неправильно?

1 Ответ

0 голосов
/ 10 января 2020

Нашел ответ для интересующихся. Я опустил обещание () в функции putObject.

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();
};
...