webentwicklung-frage-antwort-db.com.de

AWS-Lambda-Funktion schreibt in S3

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 zur Integration mit S3 gelesen. Bei allen geht es jedoch darum, wie man Lambda-Funktionen nach dem Schreiben in S3 wie folgt aufruft:

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

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

32
KVISH

Ja, das ist 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 Ihrer Lambda-Funktion die erforderlichen Schreibberechtigungen für den Ziel-S3-Bucket-/Schlüsselpfad geben, indem Sie die IAM-Rolle auswählen oder aktualisieren, unter der Ihr Lambda ausgeführt wird.

IAM-Anweisung zum Hinzufü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 spezifischen "Put Object" -Details: http://docs.aws.Amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property

59

Sie können eine Datei auf S3 mit hochladen

aws-sdk

Wenn Sie den Benutzer IAM verwenden, müssen Sie den Zugangsschlüssel und den geheimen Schlüssel angeben und sicherstellen, dass Sie die erforderliche Berechtigung für den Benutzer IAM erteilt haben.

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 temporär einen hard-codierten aws-Zugang und einen geheimen Schlüssel zu Testzwecken.

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

2
Anish Agarwal

IAM-Anweisung für serverless.com - In einen bestimmten Bucket in S3 schreiben

service: YOURSERVICENAME

provider:
  name: aws
  runtime: nodejs8.10
  stage: dev
  region: eu-west-1
  timeout: 60
  iamRoleStatements:
    - Effect: "Allow"
      Action:
       - s3:PutObject
      Resource: "**BUCKETARN**/*"
    - Effect: "Deny"
      Action:
        - s3:DeleteObject
      Resource: "arn:aws:s3:::**BUCKETARN**/*"
0
Steffen