Skip to content

Commit c05d2a3

Browse files
authored
Add aws-lambda-java-events-sdk-transformer library with DynamodbEvent v2.2.8 support (#118)
1 parent edbef14 commit c05d2a3

14 files changed

+1027
-0
lines changed

README.md

+15
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ from the packages can result in unexpected behavior.
1717
Check out the per-module release notes:
1818
- [aws-lambda-java-core](aws-lambda-java-core/RELEASE.CHANGELOG.md)
1919
- [aws-lambda-java-events](aws-lambda-java-events/RELEASE.CHANGELOG.md)
20+
- [aws-lambda-java-events-sdk-transformer](aws-lambda-java-events-sdk-transformer/RELEASE.CHANGELOG.md)
2021
- [aws-lambda-java-log4j](aws-lambda-java-log4j/RELEASE.CHANGELOG.md)
2122
- [aws-lambda-java-log4j2](aws-lambda-java-log4j2/RELEASE.CHANGELOG.md)
2223

@@ -36,6 +37,11 @@ ___
3637
<artifactId>aws-lambda-java-events</artifactId>
3738
<version>2.2.8</version>
3839
</dependency>
40+
<dependency>
41+
<groupId>com.amazonaws</groupId>
42+
<artifactId>aws-lambda-java-events-sdk-transformer</artifactId>
43+
<version>1.0.0</version>
44+
</dependency>
3945
<dependency>
4046
<groupId>com.amazonaws</groupId>
4147
<artifactId>aws-lambda-java-log4j</artifactId>
@@ -53,6 +59,7 @@ ___
5359
```groovy
5460
'com.amazonaws:aws-lambda-java-core:1.2.1'
5561
'com.amazonaws:aws-lambda-java-events:2.2.8'
62+
'com.amazonaws:aws-lambda-java-events-sdk-transformer:1.0.0'
5663
'com.amazonaws:aws-lambda-java-log4j:1.0.1'
5764
'com.amazonaws:aws-lambda-java-log4j2:1.2.0'
5865
```
@@ -62,6 +69,7 @@ ___
6269
```clojure
6370
[com.amazonaws/aws-lambda-java-core "1.2.1"]
6471
[com.amazonaws/aws-lambda-java-events "2.2.8"]
72+
[com.amazonaws/aws-lambda-java-events-sdk-transformer "1.0.0"]
6573
[com.amazonaws/aws-lambda-java-log4j "1.0.1"]
6674
[com.amazonaws/aws-lambda-java-log4j2 "1.2.0"]
6775
```
@@ -71,6 +79,7 @@ ___
7179
```scala
7280
"com.amazonaws" % "aws-lambda-java-core" % "1.2.1"
7381
"com.amazonaws" % "aws-lambda-java-events" % "2.2.8"
82+
"com.amazonaws" % "aws-lambda-java-events-sdk-transformer" % "1.0.0"
7483
"com.amazonaws" % "aws-lambda-java-log4j" % "1.0.1"
7584
"com.amazonaws" % "aws-lambda-java-log4j2" % "1.2.0"
7685
```
@@ -85,6 +94,12 @@ This package defines the Lambda [Context](http://docs.aws.amazon.com/lambda/late
8594
This package defines [event sources](http://docs.aws.amazon.com/lambda/latest/dg/intro-invocation-modes.html) that AWS Lambda natively accepts.
8695
See the [documentation](aws-lambda-java-events/README.md) for more information.
8796

97+
# Using aws-lambda-java-events-sdk-transformer
98+
99+
This package provides helper classes/methods to use alongside `aws-lambda-java-events` in order to transform
100+
Lambda input event model objects into SDK-compatible output model objects.
101+
See the [documentation](aws-lambda-java-events-sdk-transformer/README.md) for more information.
102+
88103
# Using aws-lambda-java-log4j2
89104

90105
This package defines the Lambda adapter to use with log4j version 2.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
# AWS Lambda Java Events SDK Transformer Library
2+
3+
### About
4+
5+
Provides helper classes/methods to use alongside `aws-lambda-java-events` in order to transform Lambda input event model
6+
objects into SDK-compatible output model objects
7+
(eg. DynamodbEvent to a List of records writable back to DynamoDB through the AWS DynamoDB SDK v2).
8+
9+
10+
### Getting started
11+
12+
Add the following Apache Maven dependencies to your `pom.xml` file:
13+
14+
```xml
15+
<dependencies>
16+
<dependency>
17+
<groupId>com.amazonaws</groupId>
18+
<artifactId>aws-lambda-java-events-sdk-transformer</artifactId>
19+
<version>1.0.0</version>
20+
</dependency>
21+
<dependency>
22+
<groupId>com.amazonaws</groupId>
23+
<artifactId>aws-lambda-java-events</artifactId>
24+
<version>2.2.8</version>
25+
</dependency>
26+
</dependencies>
27+
```
28+
29+
To use this library as a transformer to the AWS DynamoDB Java SDK v2, also add the following dependencies to your `pom.xml` file:
30+
31+
```xml
32+
<dependencies>
33+
<dependency>
34+
<groupId>software.amazon.awssdk</groupId>
35+
<artifactId>dynamodb</artifactId>
36+
<version>2.11.12</version>
37+
</dependency>
38+
<dependency>
39+
<groupId>com.amazonaws</groupId>
40+
<artifactId>aws-java-sdk-dynamodb</artifactId>
41+
<version>1.11.163</version>
42+
</dependency>
43+
</dependencies>
44+
```
45+
*Note that because `aws-lambda-java-events` version 2 requires the DynamoDB v1 SDK, this is also required for this library.*
46+
47+
48+
### Example Usage
49+
50+
To convert a full `DynamodbEvent` object to an SDK v2 compatible `List<Record>`:
51+
```java
52+
import com.amazonaws.services.lambda.runtime.events.transformers.DynamodbEventTransformer;
53+
54+
public class DDBEventProcessor implements RequestHandler<DynamodbEvent, String> {
55+
56+
public String handleRequest(DynamodbEvent ddbEvent, Context context) {
57+
// Process input event
58+
List<Record> convertedRecords = DynamodbEventTransformer.toRecordsV2(ddbEvent);
59+
// Modify records as needed and write back to DynamoDB using the DynamoDB AWS SDK for Java 2.0
60+
}
61+
}
62+
```
63+
64+
To convert a single `DynamodbEvent.DynamodbStreamRecord` object to an SDK v2 compatible `Record`:
65+
```java
66+
import com.amazonaws.services.lambda.runtime.events.transformers.dynamodb.DynamodbRecordTransformer;
67+
68+
public class MyClass {
69+
70+
public void myMethod(DynamodbEvent.DynamodbStreamRecord record) {
71+
// ...
72+
Record convertedRecord = DynamodbRecordTransformer.toRecordV2(record);
73+
// ...
74+
}
75+
}
76+
```
77+
78+
To convert a `StreamRecord` object originating from a `DynamodbEvent` to an SDK v2 compatible `StreamRecord`:
79+
```java
80+
import com.amazonaws.services.lambda.runtime.events.transformers.dynamodb.DynamodbStreamRecordTransformer;
81+
82+
public class MyClass {
83+
84+
public void myMethod(StreamRecord streamRecord) {
85+
// ...
86+
software.amazon.awssdk.services.dynamodb.model.StreamRecord convertedStreamRecord =
87+
DynamodbStreamRecordTransformer.toStreamRecordV2(streamRecord);
88+
// ...
89+
}
90+
}
91+
```
92+
93+
To convert an `AttributeValue` object originating from a `DynamodbEvent` to an SDK v2 compatible `AttributeValue`:
94+
```java
95+
import com.amazonaws.services.lambda.runtime.events.transformers.dynamodb.DynamodbAttributeValueTransformer;
96+
97+
public class MyClass {
98+
99+
public void myMethod(AttributeValue attributeValue) {
100+
// ...
101+
software.amazon.awssdk.services.dynamodb.model.AttributeValue convertedAttributeValue =
102+
DynamodbAttributeValueTransformer.toAttributeValueV2(attributeValue);
103+
// ...
104+
}
105+
}
106+
```
107+
108+
To convert an `Identity` object originating from a `DynamodbEvent` to an SDK v2 compatible `Identity`:
109+
```java
110+
import com.amazonaws.services.lambda.runtime.events.transformers.dynamodb.DynamodbIdentityTransformer;
111+
112+
public class MyClass {
113+
114+
public void myMethod(Identity identity) {
115+
// ...
116+
software.amazon.awssdk.services.dynamodb.model.Identity convertedIdentity =
117+
DynamodbIdentityTransformer.toIdentityV2(identity);
118+
// ...
119+
}
120+
}
121+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
### Apr 29, 2020
2+
`1.0.0`:
3+
- Added AWS SDK V2 transformers for `DynamodbEvent` in `aws-lambda-java-events` versions up to and including `2.2.8`
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0"
2+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
6+
<groupId>com.amazonaws</groupId>
7+
<artifactId>aws-lambda-java-events-sdk-transformer</artifactId>
8+
<version>1.0.0</version>
9+
<packaging>jar</packaging>
10+
11+
<name>AWS Lambda Java Events SDK Transformer Library</name>
12+
<description>
13+
Provides helper classes/methods to use alongside aws-lambda-java-events in order to transform Lambda input event model
14+
objects into SDK-compatible output model objects (eg. DynamodbEvent to a List of records writable back to DynamoDB
15+
through the AWS DynamoDB SDK v2)
16+
</description>
17+
<url>https://aws.amazon.com/lambda/</url>
18+
<licenses>
19+
<license>
20+
<name>Apache License, Version 2.0</name>
21+
<url>https://aws.amazon.com/apache2.0</url>
22+
<distribution>repo</distribution>
23+
</license>
24+
</licenses>
25+
<scm>
26+
<url>https://github.com/aws/aws-lambda-java-libs.git</url>
27+
</scm>
28+
<developers>
29+
<developer>
30+
<name>AWS Lambda team</name>
31+
<organization>Amazon Web Services</organization>
32+
<organizationUrl>https://aws.amazon.com/</organizationUrl>
33+
</developer>
34+
</developers>
35+
36+
<properties>
37+
<maven.compiler.source>1.8</maven.compiler.source>
38+
<maven.compiler.target>1.8</maven.compiler.target>
39+
</properties>
40+
41+
<distributionManagement>
42+
<repository>
43+
<id>sonatype-nexus-staging</id>
44+
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
45+
</repository>
46+
</distributionManagement>
47+
48+
<dependencies>
49+
<dependency>
50+
<groupId>software.amazon.awssdk</groupId>
51+
<artifactId>dynamodb</artifactId>
52+
<version>2.11.12</version>
53+
<scope>provided</scope>
54+
</dependency>
55+
<dependency>
56+
<groupId>com.amazonaws</groupId>
57+
<artifactId>aws-java-sdk-dynamodb</artifactId>
58+
<version>1.11.163</version>
59+
<scope>provided</scope>
60+
</dependency>
61+
<dependency>
62+
<groupId>com.amazonaws</groupId>
63+
<artifactId>aws-lambda-java-events</artifactId>
64+
<version>2.2.8</version>
65+
<scope>provided</scope>
66+
</dependency>
67+
68+
<dependency>
69+
<groupId>org.junit.jupiter</groupId>
70+
<artifactId>junit-jupiter-engine</artifactId>
71+
<version>5.6.2</version>
72+
<scope>test</scope>
73+
</dependency>
74+
</dependencies>
75+
76+
<build>
77+
<plugins>
78+
<plugin>
79+
<artifactId>maven-surefire-plugin</artifactId>
80+
<version>2.22.2</version>
81+
</plugin>
82+
<plugin>
83+
<artifactId>maven-failsafe-plugin</artifactId>
84+
<version>2.22.2</version>
85+
</plugin>
86+
</plugins>
87+
</build>
88+
89+
<profiles>
90+
<profile>
91+
<id>dev</id>
92+
<build>
93+
<plugins>
94+
<plugin>
95+
<groupId>org.apache.maven.plugins</groupId>
96+
<artifactId>maven-javadoc-plugin</artifactId>
97+
<version>2.9.1</version>
98+
<configuration>
99+
<additionalparam>-Xdoclint:none</additionalparam>
100+
</configuration>
101+
<executions>
102+
<execution>
103+
<id>attach-javadocs</id>
104+
<goals>
105+
<goal>jar</goal>
106+
</goals>
107+
</execution>
108+
</executions>
109+
</plugin>
110+
</plugins>
111+
</build>
112+
</profile>
113+
<profile>
114+
<id>release</id>
115+
<build>
116+
<plugins>
117+
<plugin>
118+
<groupId>org.apache.maven.plugins</groupId>
119+
<artifactId>maven-source-plugin</artifactId>
120+
<version>2.2.1</version>
121+
<executions>
122+
<execution>
123+
<id>attach-sources</id>
124+
<goals>
125+
<goal>jar-no-fork</goal>
126+
</goals>
127+
</execution>
128+
</executions>
129+
</plugin>
130+
<plugin>
131+
<groupId>org.apache.maven.plugins</groupId>
132+
<artifactId>maven-javadoc-plugin</artifactId>
133+
<version>2.9.1</version>
134+
<configuration>
135+
<additionalparam>-Xdoclint:none</additionalparam>
136+
</configuration>
137+
<executions>
138+
<execution>
139+
<id>attach-javadocs</id>
140+
<goals>
141+
<goal>jar</goal>
142+
</goals>
143+
</execution>
144+
</executions>
145+
</plugin>
146+
<plugin>
147+
<groupId>org.apache.maven.plugins</groupId>
148+
<artifactId>maven-gpg-plugin</artifactId>
149+
<version>1.5</version>
150+
<executions>
151+
<execution>
152+
<id>sign-artifacts</id>
153+
<phase>verify</phase>
154+
<goals>
155+
<goal>sign</goal>
156+
</goals>
157+
</execution>
158+
</executions>
159+
</plugin>
160+
<plugin>
161+
<groupId>org.sonatype.plugins</groupId>
162+
<artifactId>nexus-staging-maven-plugin</artifactId>
163+
<version>1.6.3</version>
164+
<extensions>true</extensions>
165+
<configuration>
166+
<serverId>sonatype-nexus-staging</serverId>
167+
<nexusUrl>https://aws.oss.sonatype.org/</nexusUrl>
168+
<autoReleaseAfterClose>false</autoReleaseAfterClose>
169+
</configuration>
170+
</plugin>
171+
</plugins>
172+
</build>
173+
</profile>
174+
</profiles>
175+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.amazonaws.services.lambda.runtime.events.transformers;
2+
3+
import com.amazonaws.services.lambda.runtime.events.DynamodbEvent;
4+
import com.amazonaws.services.lambda.runtime.events.transformers.dynamodb.DynamodbRecordTransformer;
5+
import software.amazon.awssdk.services.dynamodb.model.Record;
6+
7+
import java.util.List;
8+
import java.util.Objects;
9+
import java.util.stream.Collectors;
10+
11+
public class DynamodbEventTransformer {
12+
13+
public static List<Record> toRecordsV2(final DynamodbEvent dynamodbEvent) {
14+
return dynamodbEvent
15+
.getRecords()
16+
.stream()
17+
.filter(record -> !Objects.isNull(record))
18+
.map(DynamodbRecordTransformer::toRecordV2)
19+
.collect(Collectors.toList());
20+
}
21+
}

0 commit comments

Comments
 (0)