AWSにはNode 4.3 Lambda関数があります。テキストファイルをS3に書き込むことができ、S3と統合する方法に関する多くのチュートリアルを読みました。ただし、それらはすべて S3への書き込み の後にLambda関数を呼び出す方法に関するものです。
Nodeを使用してLambdaからS3にテキストファイルを作成するにはどうすればよいですか?これは可能ですか? Amazonsのドキュメントはそれをカバーしていないようです。
はい、絶対に可能です!
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
});
}
ラムダが実行するIAMロールを選択または更新することにより、ターゲットs3バケット/キーパスへの必要な書き込み権限をLambda関数に付与してください。
追加するIAMステートメント:
{
"Sid": "Stmt1468366974000",
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::my-bucket-name-goes-here/optional-path-before-allow/*"
]
}
さらに読む:
を使用してs3にファイルをアップロードできます
aws-sdk
IAMユーザーを使用している場合は、アクセスキーとシークレットキーを提供し、IAMユーザー。
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.")
});
}
ここでは、テスト目的でAWSアクセスと秘密キーを一時的にハードコーディングしました。ベストプラクティスについては、 documentation を参照してください。
Serverless.comのIAMステートメント-特定のバケットへのS3への書き込み
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**/*"