Подтвердить что ты не робот

Функция AWS Lambda записывается в S3

У меня есть функция Node 4.3 Lambda в AWS. Я хочу иметь возможность написать текстовый файл для S3 и прочитал много учебников о том, как интегрировать с S3. Однако все они о том, как вызывать лямбда-функции после записи в S3.

Как я могу создать текстовый файл в S3 из Lambda, используя узел? Это возможно? Документация Amazons, кажется, не покрывает это.

4b9b3361

Ответ 1

Да, это абсолютно возможно!

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

Убедитесь, что вы предоставили своей функции Lambda необходимые разрешения на запись в целевой путь/ключ корзины s3, выбрав или обновив роль IAM, под которой выполняет ваша лямбда.

Заявление IAM добавить:

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

Дальнейшее чтение:

Ответ 2

Вы можете загрузить файл на 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 и секретный ключ для целей тестирования. Для лучшей практики обратитесь к документации.

Ответ 3

Заявление IAM для serverless.com - запись в 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**/*"

Ответ 4

Когда я копирую функцию "Вставить выше" в AWS Lambda Console, выдавая приведенную ниже ошибку, должен ли быть index.handler в "Лямбда-функции", верно?

Ваша помощь в этом очень ценится

Runtime.HandlerNotFound"

index.handler не определен или не экспортируется