#amazon-web-services #amazon-s3 #aws-lambda
#amazon-веб-сервисы #amazon-s3 #aws-lambda
Вопрос:
Пытаюсь загрузить изображения в S3 из lambda. Я получаю код возврата 200 при загрузке изображения с моего телефона, но изображение никогда не загружается в корзину? Это как-то связано с политикой корзины? Лямбда — функция :
const AWS = require('aws-sdk');
AWS.config.update({
region: 'us-west-2'
})
const s3 = new AWS.S3();
exports.handler = async (event, context, callback) => {
AWS.config.update({region: 'us-west-2'});
// var buf = Buffer.from(event.picture.imageBinary.replace(/^data:image/w ;base64,/, ""),'base64')
let encodedImage =JSON.parse(event.picture);
let decodedImage = Buffer.from(encodedImage, 'base64');
var filePath = "avatars/" event.userid ".jpg"
var params = {
Body: decodedImage,
Bucket: 'testpictures-1',
Key: filePath,
ContentEncoding: 'base64',
ContentType: 'image/jpeg'
};
s3.putObject(params, function(err, data) {
if (err){ console.log(err, err.stack);} // an error occurred
else {console.log(data);} // successful response
});
};
Комментарии:
1. Неудачная загрузка не приведет к получению ответа 200 OK. Никакая политика корзины не приведет к этому. Если вы видите 200, ваш объект был загружен. Как вы определяете, что изображение не было загружено в корзину?
Ответ №1:
Поскольку вы пытаетесь вызвать службу Amazon S3 из лямбда-функции, вы должны убедиться, что роль IAM, связанная с лямбда-функцией, имеет правильные политики S3. Если роль IAM не имеет политик, связанных с сервисом AWS, то вы не сможете успешно вызвать сервис AWS из лямбда-функции. Вот учебное пособие по AWS (реализованное на Java), в котором обсуждается этот момент.