2016-10-22 4 views
19

Ich habe eine Node 4.3 Lambda-Funktion in AWS. Ich möchte in der Lage sein, eine Textdatei in S3 zu schreiben, und habe viele Tutorials über die Integration mit S3 gelesen. Allerdings sind sie alle, wie Lambda-Funktionen aufrufen nach dem Schreiben wie unten bis S3:AWS Lambda-Funktion schreiben nach S3

http://docs.aws.amazon.com/lambda/latest/dg/with-s3.html

Wie kann ich eine Textdatei in S3 von Lambda mit Knoten zu erstellen? Ist das möglich? Amazons Dokumentation scheint es nicht zu bedecken.

Antwort

36

Ja ist es absolut möglich!

var AWS = require('aws-sdk'); 
function putObjectToS3(bucket, key, data){ 
    var s3 = new AWS.S3(); 
     var params = { 
      Bucket : bucket, 
      Key : key, 
      Body : data 
     } 
     s3.putObject(params, function(err, data) { 
      if (err) console.log(err, err.stack); // an error occurred 
      else  console.log(data);   // successful response 
     }); 
} 

Stellen Sie sicher, dass Sie durch die Auswahl oder die Aktualisierung der IAM Role Ihre Lambda führt unter dem Lambda-Funktion die erforderlichen Schreibberechtigungen für das Ziel s3 Eimer/Schlüsselpfad geben.

IAM Statement hinzuzufügen:

{ 
    "Sid": "Stmt1468366974000", 
    "Effect": "Allow", 
    "Action": "s3:*", 
    "Resource": [ 
     "arn:aws:s3:::my-bucket-name-goes-here/optional-path-before-allow/*" 
    ] 
} 

Weiterführende Literatur:

AWS JavaScript SDK: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html

Die spezifische "Put-Objekt" Details: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property

+0

Wenn Ihre Lambda-Funktion innerhalb einer VPC ausgeführt wird, werden Sie einen Endpunkt für sie erstellen müssen. Bevor dies herausgefunden wurde, wurde der Callback von s3.putObject nie aufgerufen. Finden Sie in diesem Artikel über S3 VPC-Endpunkt: https://aws.amazon.com/blogs/aws/new-vpc-endpoint-for-amazon-s3/ Siehe zum Ressourcen Zugriff von Lambda: https://aws.amazon.com/blogs/aws/new-access-resources-in-a-vpc-from-your-lambda-functions/ – vtellier

3

Sie können Datei auf s3 mit

aws-sdk

laden Wenn Sie IAM Benutzer verwenden, dann müssen Sie Zugriffsschlüssel und geheimen Schlüssel zur Verfügung stellen und sicher, Sie haben zur Verfügung gestellt erforderliche Genehmigung machen zu IAM Benutzer.

var AWS = require('aws-sdk'); 
AWS.config.update({accessKeyId: "ACCESS_KEY",secretAccessKey: 'SECRET_KEY'}); 
var s3bucket = new AWS.S3({params: {Bucket: 'BUCKET_NAME'}}); 
function uploadFileOnS3(fileName, fileData){ 
    var params = { 
     Key: fileName, 
     Body: fileData, 
    }; 
    s3bucket.upload(params, function (err, res) {    
     if(err) 
      console.log("Error in uploading file on s3 due to "+ err) 
     else  
      console.log("File successfully uploaded.") 
    }); 
} 

Hier habe ich vorübergehend hardware-aws Zugriff und geheimen Schlüssel für Testzwecke. Für Best Practices siehe Link unten.

https://docs.aws.amazon.com/AWSJavaScriptSDK/guide/node-configuring.html

+3

Nichts in der Frage fordert speziell nach Zugriffsschlüsseln und Geheimnissen, die für die Authentifizierung verwendet werden sollen. Es ist extrem schlecht, sich auf diese Weise zu authentifizieren und daher empfehle ich es nicht als eine Lösung, die weise ist. Lambda-Funktionen sollten mit einer IAM-Rolle bereitgestellt werden, die für den Zugriff ausreichend ist, den die Lambda-Funktion benötigt, um ihre Funktion auszuführen. –

+0

Ich weiß, ich habe nur den geheimen Schlüssel und den Zugriffsschlüssel hart codiert, aber diese Methode nur für kleine persönliche Skripte oder zu Testzwecken. –