2016-10-23 25 views
-1

この関数を実行すると、成功したと表示されますが、ファイルはs3バケットにありません。AWSラムダ関数がjsonを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'); 

}

答えて

1

NodeJsは興味深い言語です。

ほとんどの言語は、この

  1. AWS.config.update({..})
  2. VAR S3 = ..
  3. s3.putObject(..、コールバック)のようなあなたのコードを処理します。
  4. context.succeed(..)の順に

ノード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"); 
}); 
}; 

^コールバックは、スクリプトの終わりであることラムダを教えてくれます。 これでこのように処理されます。

  1. AWS.config.update({..})
  2. VAR S3 = ..
  3. s3.putObject(..、コールバック)。 (これには時間がかかりますが、待つつもりはありません)
  4. s3.putObject(..、コールバック)が終了しました。私はコールバックを今呼びます。
  5. コールバック(err、res)。それはエラーでコールバックを呼び出します。エラーを出力し、プログラムをデバッグできるようになります。
  6. コールバック(err、 'processed')はラムダを終了します。
関連する問題