AWS Lambda function write to S3

后端 未结 4 1554
星月不相逢
星月不相逢 2020-12-08 06:31

I have a Node 4.3 Lambda function in AWS. I want to be able to write a text file to S3 and have read many tutorials about how to integrate with S3. However, all of them are

相关标签:
4条回答
  • 2020-12-08 07:00

    You can upload file on s3 using

    aws-sdk

    If you are using IAM user then you have to provide access key and secret key and make sure you have provided necessary permission to IAM user.

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

    Here I temporarily hard-coded AWS access and secret key for testing purposes. For best practices refer to the documentation.

    0 讨论(0)
  • 2020-12-08 07:02

    Yes it is absolutely 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
            });
    }
    

    Make sure that you give your Lambda function the required write permissions to the target s3 bucket / key path by selecting or updating the IAM Role your lambda executes under.

    IAM Statement to add:

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

    Further reading:

    • AWS JavaScript SDK
    • The specific "Put Object" details
    0 讨论(0)
  • 2020-12-08 07:14

    After long long time of silence-failing of 'Task timed out after X' without any good error message, i went back to the beginning, to Amazon default template example, and that worked!

    > Lambda > Functions > Create function > Use a blueprints > filter: s3.

    Here is my tweaked version of amazon example:

    const aws = require('aws-sdk');
    const s3 = new aws.S3({ apiVersion: '2006-03-01' });
    
    async function uploadFileOnS3(fileData, fileName) => {
        const params = {
            Bucket:  "The-bucket-name-you-want-to-save-the-file-to",
            Key: fileName,
            Body: JSON.stringify(fileData),
        };
    
        try {
            const response = await s3.upload(params).promise();
            console.log('Response: ', response);
            return response;
    
        } catch (err) {
            console.log(err);
        }
    };
    
    0 讨论(0)
  • 2020-12-08 07:18

    IAM Statement for serverless.com - Write to S3 to specific bucket

    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 讨论(0)
提交回复
热议问题