Загрузка AWS в S3 через Lambda

#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), в котором обсуждается этот момент.

https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2/usecases/creating_scheduled_events