giò
giò

Reputation: 3580

AWS Lambda Java, write to S3 bucket

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

Answers (5)

Sarang
Sarang

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

Alejandro Garcia
Alejandro Garcia

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

Shimon Tolts
Shimon Tolts

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

Mark B
Mark B

Reputation: 200446

The same way you can write a file to S3 from any Java application. Use the AWS SDK for Java.

Upvotes: 1

Related Questions