Функция AWS Lambda записывается в S3
У меня есть функция Node 4.3 Lambda в AWS. Я хочу иметь возможность написать текстовый файл для S3 и прочитал много учебников о том, как интегрировать с S3. Однако все они о том, как вызывать лямбда-функции после записи в S3.
Как я могу создать текстовый файл в S3 из Lambda, используя узел? Это возможно? Документация Amazons, кажется, не покрывает это.
Ответы
Ответ 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 не определен или не экспортируется