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.
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
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
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**/*"