web-dev-qa-db-ja.com

AWS Lambda関数によるS3への書き込み

AWSにはNode 4.3 Lambda関数があります。テキストファイルをS3に書き込むことができ、S3と統合する方法に関する多くのチュートリアルを読みました。ただし、それらはすべて S3への書き込み の後にLambda関数を呼び出す方法に関するものです。

Nodeを使用してLambdaからS3にテキストファイルを作成するにはどうすればよいですか?これは可能ですか? Amazonsのドキュメントはそれをカバーしていないようです。

40
KVISH

はい、絶対に可能です!

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/*"
    ]
}

さらに読む:

67

を使用して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 を参照してください。

4
Anish Agarwal

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**/*"
2
Steffen