From cc94134ad4892c9ba877ea407eca7d4c109e566f Mon Sep 17 00:00:00 2001 From: Ananthan Date: Thu, 9 Nov 2023 15:11:47 +1100 Subject: [PATCH 1/3] Updated language and author details --- .../snippet-data.json | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/integration-kinesis-to-lambda/snippet-data.json b/integration-kinesis-to-lambda/snippet-data.json index adbad51..3951493 100644 --- a/integration-kinesis-to-lambda/snippet-data.json +++ b/integration-kinesis-to-lambda/snippet-data.json @@ -3,7 +3,7 @@ "description": "Using AWS Lambda with Amazon Kinesis without Batch Item Handling.", "type": "Integration", "services": ["lambda", "kinesis"], - "languages": ["Node", "TypeScript", ".NET"], + "languages": ["Node", "TypeScript", ".NET","Java"], "tags": [], "introBox": { "headline": "How it works", @@ -52,6 +52,17 @@ "language": "dotnet" } ] + }, + { + "id": "Java", + "title": "Usage Example with Java", + "description": "Consuming Kinesis event with Lambda using Java without batch item handling.", + "snippets": [ + { + "snippetPath": "Handler.java", + "language": "java" + } + ] } ] } @@ -72,6 +83,13 @@ "bio": "Cloud Application Architect at AWS", "linkedin": "mtomeh", "twitter": "mtomeh84" + }, + { + "headline": "Java Example Presented by Ananthan Rudran", + "name": "Ananthan Rudran", + "image": "https://pbs.twimg.com/profile_images/888727786797412352/DEZ1mRjs_400x400.jpg", + "bio": "Solutions Architect Architect at AWS", + "linkedin": "ananthanr" } ] } From 5d3d9ce0e3cd960abe7df5f87e4a1c9331f798a6 Mon Sep 17 00:00:00 2001 From: Ananthan Date: Thu, 9 Nov 2023 15:12:57 +1100 Subject: [PATCH 2/3] Initial commit for Java-Kinesis Lambda code --- integration-kinesis-to-lambda/Handler.java | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 integration-kinesis-to-lambda/Handler.java diff --git a/integration-kinesis-to-lambda/Handler.java b/integration-kinesis-to-lambda/Handler.java new file mode 100644 index 0000000..f2213ed --- /dev/null +++ b/integration-kinesis-to-lambda/Handler.java @@ -0,0 +1,55 @@ +package example; + +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; +import com.amazonaws.services.lambda.runtime.RequestHandler; +import com.amazonaws.services.lambda.runtime.events.KinesisEvent; + +import java.nio.ByteBuffer; +import java.nio.CharBuffer; +import java.nio.charset.CharacterCodingException; +import java.nio.charset.CharsetDecoder; +import java.nio.charset.StandardCharsets; + + +public class Handler implements RequestHandler { + @Override + public Void handleRequest(KinesisEvent event, Context context) { + LambdaLogger logger = context.getLogger(); + if (event.getRecords().isEmpty()) { + logger.log("Empty Kinesis Event received"); + return null; + } + for (KinesisEvent.KinesisEventRecord record : event.getRecords()) { + try { + logger.log("Processed Event with EventId: "+record.getEventID()); + String data = decodeRecordData(record.getKinesis().getData(),context); + logger.log("Data:"+ data); + // TODO: Do interesting work based on the new data + } + catch (Exception ex) { + logger.log("An error occurred:"+ex.getMessage()); + throw ex; + } + } + logger.log("Successfully processed:"+event.getRecords().size()+" records"); + return null; + } + + private String decodeRecordData(ByteBuffer encodedData,Context context) { + // Create a CharsetDecoder object for the desired character set + CharsetDecoder decoder = StandardCharsets.UTF_8.newDecoder(); + // Decode the ByteBuffer using the CharsetDecoder object + String decodedData = null; + try { + CharBuffer charBuffer = decoder.decode(encodedData); + // Convert the decoded characters to a String + decodedData = charBuffer.toString(); + } catch (CharacterCodingException characterCodingException) { + context.getLogger().log("Error decoding data: " + characterCodingException.getMessage()); + throw new RuntimeException(characterCodingException); + } + + return decodedData; + } +} From be0dcd2991cca9d7fc4395e973bfe5f170b868a5 Mon Sep 17 00:00:00 2001 From: Ananthan Date: Tue, 14 Nov 2023 20:53:48 +1100 Subject: [PATCH 3/3] Simplified ByteBuffer decoding logic and incorporated other feedback --- integration-kinesis-to-lambda/Handler.java | 27 ++-------------------- 1 file changed, 2 insertions(+), 25 deletions(-) diff --git a/integration-kinesis-to-lambda/Handler.java b/integration-kinesis-to-lambda/Handler.java index f2213ed..9c9d8dd 100644 --- a/integration-kinesis-to-lambda/Handler.java +++ b/integration-kinesis-to-lambda/Handler.java @@ -5,16 +5,9 @@ import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.KinesisEvent; -import java.nio.ByteBuffer; -import java.nio.CharBuffer; -import java.nio.charset.CharacterCodingException; -import java.nio.charset.CharsetDecoder; -import java.nio.charset.StandardCharsets; - - public class Handler implements RequestHandler { @Override - public Void handleRequest(KinesisEvent event, Context context) { + public Void handleRequest(final KinesisEvent event, final Context context) { LambdaLogger logger = context.getLogger(); if (event.getRecords().isEmpty()) { logger.log("Empty Kinesis Event received"); @@ -23,7 +16,7 @@ public Void handleRequest(KinesisEvent event, Context context) { for (KinesisEvent.KinesisEventRecord record : event.getRecords()) { try { logger.log("Processed Event with EventId: "+record.getEventID()); - String data = decodeRecordData(record.getKinesis().getData(),context); + String data = new String(record.getKinesis().getData().array()); logger.log("Data:"+ data); // TODO: Do interesting work based on the new data } @@ -36,20 +29,4 @@ public Void handleRequest(KinesisEvent event, Context context) { return null; } - private String decodeRecordData(ByteBuffer encodedData,Context context) { - // Create a CharsetDecoder object for the desired character set - CharsetDecoder decoder = StandardCharsets.UTF_8.newDecoder(); - // Decode the ByteBuffer using the CharsetDecoder object - String decodedData = null; - try { - CharBuffer charBuffer = decoder.decode(encodedData); - // Convert the decoded characters to a String - decodedData = charBuffer.toString(); - } catch (CharacterCodingException characterCodingException) { - context.getLogger().log("Error decoding data: " + characterCodingException.getMessage()); - throw new RuntimeException(characterCodingException); - } - - return decodedData; - } }