web-dev-qa-db-fra.com

La fonction AWS Lambda écrit sur S3

J'ai un noeud 4.3 fonction Lambda dans AWS. Je veux être capable d'écrire un fichier texte sur S3 et avoir lu de nombreux tutoriels sur la façon d'intégrer S3. Cependant, ils traitent tous de la procédure à suivre pour appeler les fonctions Lambda après avoir écrit sur S3, comme ci-dessous:

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

Comment créer un fichier texte dans S3 à partir de Lambda à l'aide d'un noeud? Est-ce possible? La documentation des Amazones ne semble pas la couvrir.

32
KVISH

Oui c'est absolument possible!

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

Assurez-vous de donner à votre fonction Lambda les autorisations d'écriture requises sur le chemin d'accès au compartiment/à la clé s3 cible en sélectionnant ou en mettant à jour le rôle IAM sous lequel votre lambda est exécuté.

Déclaration IAM à ajouter:

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

Lectures supplémentaires:

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

Les détails spécifiques "Put Object": http://docs.aws.Amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property

59
Xavier Hutchinson

Vous pouvez télécharger un fichier sur s3 en utilisant

aws-sdk

Si vous utilisez IAM utilisateur, vous devez alors fournir la clé d'accès et la clé secrète et vous assurer que vous avez fourni les autorisations nécessaires à IAM utilisateur.

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

Ici, j’ai temporairement codé un accès aws et une clé secrète à des fins de test. Pour de meilleures pratiques, reportez-vous au lien ci-dessous.

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

2
Anish Agarwal

Déclaration IAM pour serverless.com - Écrire dans S3 dans un compartiment spécifique

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