簡體   English   中英

AWS Lambda函數無法將json更新到s3存儲桶

[英]AWS Lambda function to updload json to s3 bucket not working

當我運行此函數時,它說成功了,但是文件不在s3存儲桶中。

var AWS = require('aws-sdk');
exports.handler = (event, context, callback) => {

    AWS.config.update({
        region: 'us-west-2',
        accessKeyId: 'xxx',
        secretAccessKey: 'xxx'
    });

    var s3 = new AWS.S3();

    s3.putObject({
        Bucket: 'mybucket',
        Key: 'test.json',
        Body: [{test: 'test'}, {test: 'test'}],
        ContentType: "application/json"
    }, function(){});

    context.succeed('SUCCESS');
};

NodeJs是一種有趣的語言。

大多數語言都會像這樣處理您的代碼

  1. AWS.config.update({..})
  2. var s3 = ..
  3. s3.putObject(..,回調); (這需要時間,因此將等待直到完成)
  4. context.succeed(..)

Node js將按此順序處理。

  1. AWS.config.update({..})
  2. var s3 = ..
  3. s3.putObject(..,回調); (這需要時間,因此我將轉到下一步)
  4. context.succeed(..)
  5. s3.putObject(..,回調)已經完成。 我現在將調用該回調。
  6. 回調(err,res)。 它使用錯誤調用回調。 由於您的程序有一個空的回調函數function(){},因此不會對該錯誤執行任何操作,並且您將一無所知。
 var AWS = require('aws-sdk'); exports.handler = (event, context, callback) => { AWS.config.update({ region: 'us-west-2', accessKeyId: 'xxx', secretAccessKey: 'xxx' }); var s3 = new AWS.S3(); s3.putObject( { Bucket: 'mybucket', Key: 'test.json', Body: [{test: 'test'}, {test: 'test'}], ContentType: "application/json" }, function(err, res){ if(err){ console.log(err); } callback(err, "processed"); }); }; 

^該回調將告訴lambda它是腳本的結尾。 現在將按以下方式處理。

  1. AWS.config.update({..})
  2. var s3 = ..
  3. s3.putObject(..,回調); (這需要時間,但是沒有其他步驟,因此我將等待)
  4. s3.putObject(..,回調)已經完成。 我現在將調用該回調。
  5. 回調(err,res)。 它使用錯誤調用回調。 您將打印錯誤並能夠調試程序。
  6. callback(err,'processed')將結束lambda。

您可以使用Q https://www.npmjs.com/package/q或NodeJs promises以要求的順序處理任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM