2016-04-29 3 views
2

Я создаю функцию AWS Lambda, которая выполняется ежемесячно. Каждый месяц обрабатывает некоторые данные и записывает их обратно в S3 Bucket.AWS Lambda Java, пишите в ведро S3

Вы знаете, как вы можете написать файл с AWS Lambda Java в ведро S3?

ответ

1

Точно так же вы можете записать файл на S3 из любого приложения Java. Используйте AWS SDK for Java.

0

Я бы посоветовал воспользоваться услугой AWS Kinesis FireHose, которая позволяет отправлять данные в виде строк из AWS SDK. Служба будет записывать файлы для вас, агрегировать события и даже сжимать файлы с отметками времени.

+2

Kinesis кажется излишним мне просто издавать ежемесячный единый файл S3. Почему бы просто не использовать aws SDK с ролью IAM, прикрепленной к вашей лямбда-функции? – Tom

+0

Конечно, вы можете просто использовать SDK для записи файла из строки. Я не знаю, какой объем данных у вас есть, может быть проблема хранения всего в памяти, а затем демпинга в виде файла. –

0

Попробуйте это:

try{ 
      // Create new file 
      Util._logger.log(" Creating file transfer "); 

      StringBuilder stringBuilder = new StringBuilder(); 

      //Writing in file 
      stringBuilder.append('Data you want to write in file'); 

      // Upload file 
      ByteArrayInputStream inputStream = new ByteArrayInputStream(stringBuilder.toString().getBytes(Constants.UTF_8)); 
      s3Client.putObject(dstBucket, uploadFileName, inputStream, new ObjectMetadata()); 

     } catch (UnsupportedEncodingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (AmazonServiceException ase) { 
      System.out.println("Caught an AmazonServiceException, " + 
        "which means your request made it " + 
        "to Amazon S3, but was rejected with an error " + 
        "response for some reason."); 
      System.out.println("Error Message: " + ase.getMessage()); 
      System.out.println("HTTP Status Code: " + ase.getStatusCode()); 
      System.out.println("AWS Error Code: " + ase.getErrorCode()); 
      System.out.println("Error Type:  " + ase.getErrorType()); 
      System.out.println("Request ID:  " + ase.getRequestId()); 
      Util._logger.log(Constants.EXCEPTION_ERROR + ase.getMessage()); 
      ase.printStackTrace(); 
     } catch (AmazonClientException ace) { 
       System.out.println("Caught an AmazonClientException, " + 
         "which means the client encountered " + 
         "an internal error while trying to " + 
         " communicate with S3, " + 
         "such as not being able to access the network."); 
       System.out.println(Constants.EXCEPTION_ERROR + ace.getMessage()); 
       Util._logger.log(Constants.EXCEPTION_ERROR + ace.getMessage()); 
       ace.printStackTrace(); 
     } catch (Exception e) { 
       Util._logger.log(Constants.EXCEPTION_ERROR + e.getMessage()); 
       e.printStackTrace(); 
     } 
Смежные вопросы