Reputation: 3580
I am creating an AWS Lambda function that is runned monthly. Each month process some data and write that back to S3 Bucket.
Do you know how you can you write a file from AWS Lambda Java to a S3 bucket?
Upvotes: 7
Views: 17039
Reputation: 688
Yes, you have to create a text file in S3 bucket and take a reference of the following code to update the file contents as per your requirement.
AmazonS3 client = new AmazonS3Client();
/**
* @param bucketName
* The name of the bucket to place the new object in.
* @param key
* The key of the object to create.
* @param content
* The String to encode
*/
client.putObject("**Bucket Name**", "**File Name to write**", "updated string contents");
Upvotes: 3
Reputation: 39
Try this:
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();
}
Upvotes: 0
Reputation: 1692
I would advise using the AWS Kinesis FireHose service that allows to send data as strings from the AWS SDK. The service will write the files for you, aggregate events, and even compress the files with timestamps.
Upvotes: 0
Reputation: 200446
The same way you can write a file to S3 from any Java application. Use the AWS SDK for Java.
Upvotes: 1