Skip to content

Commit 3516ba7

Browse files
committed
update s3 and dynamo db to sdk v2
1 parent 2035e92 commit 3516ba7

File tree

13 files changed

+277
-178
lines changed

13 files changed

+277
-178
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
# Shipment List Demo Application - AWS in PROD and LocalStack on DEV environment
23

34

@@ -180,7 +181,7 @@ to separate these "workspaces":
180181

181182
```
182183
$ tflocal init
183-
$ tflocal plan -var 'env=dev'
184+
$ tflocal plan -var 'env=dev
184185
$ tflocal apply -var 'env=dev'
185186
```
186187

pom.xml

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,8 @@
2222
<maven.compiler.source>17</maven.compiler.source>
2323
<maven.compiler.target>17</maven.compiler.target>
2424
<maven-checkstyle-plugin.version>3.2.0</maven-checkstyle-plugin.version>
25-
<!-- <checkstyle.version>10.5.0</checkstyle.version>-->
2625

2726
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
28-
<com.amazonaws.s3-sdk>1.12.376</com.amazonaws.s3-sdk>
2927
</properties>
3028

3129

@@ -41,14 +39,16 @@
4139
<optional>true</optional>
4240
</dependency>
4341
<dependency>
44-
<groupId>com.amazonaws</groupId>
45-
<artifactId>aws-java-sdk-s3</artifactId>
46-
<version>${com.amazonaws.s3-sdk}</version>
42+
<groupId>software.amazon.awssdk</groupId>
43+
<artifactId>s3</artifactId>
4744
</dependency>
4845
<dependency>
49-
<groupId>com.amazonaws</groupId>
50-
<artifactId>aws-java-sdk-dynamodb</artifactId>
51-
<version>1.12.383</version>
46+
<groupId>software.amazon.awssdk</groupId>
47+
<artifactId>dynamodb-enhanced</artifactId>
48+
</dependency>
49+
<dependency>
50+
<groupId>software.amazon.awssdk</groupId>
51+
<artifactId>dynamodb</artifactId>
5252
</dependency>
5353
<dependency>
5454
<groupId>org.springframework.boot</groupId>
@@ -66,8 +66,19 @@
6666
</dependency>
6767
</dependencies>
6868

69-
<build>
69+
<dependencyManagement>
70+
<dependencies>
71+
<dependency>
72+
<groupId>software.amazon.awssdk</groupId>
73+
<artifactId>bom</artifactId>
74+
<version>2.20.26</version>
75+
<type>pom</type>
76+
<scope>import</scope>
77+
</dependency>
78+
</dependencies>
79+
</dependencyManagement>
7080

81+
<build>
7182
<finalName>shipment-list-demo</finalName>
7283
<resources>
7384
<resource>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package dev.ancaghenade.shipmentlistdemo.config;
2+
3+
import org.springframework.beans.factory.annotation.Value;
4+
import org.springframework.context.annotation.Bean;
5+
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
6+
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
7+
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
8+
9+
public abstract class AWSClientConfig {
10+
11+
@Value("${aws.credentials.access-key}")
12+
protected String awsAccessKey;
13+
14+
@Value("${aws.credentials.secret-key}")
15+
protected String awsSecretKey;
16+
17+
@Value("${aws.region}")
18+
protected String awsRegion;
19+
20+
@Bean
21+
protected AwsCredentialsProvider amazonAWSCredentialsProvider() {
22+
return StaticCredentialsProvider.create(AwsBasicCredentials.create(awsAccessKey, awsSecretKey));
23+
}
24+
25+
}

src/main/java/dev/ancaghenade/shipmentlistdemo/config/AmazonS3Config.java

Lines changed: 10 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,25 @@
11
package dev.ancaghenade.shipmentlistdemo.config;
22

3-
import com.amazonaws.auth.AWSCredentials;
4-
import com.amazonaws.auth.AWSStaticCredentialsProvider;
5-
import com.amazonaws.auth.BasicAWSCredentials;
6-
import com.amazonaws.client.builder.AwsClientBuilder.EndpointConfiguration;
7-
import com.amazonaws.services.s3.AmazonS3;
8-
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
3+
4+
import java.net.URI;
95
import org.springframework.beans.factory.annotation.Value;
106
import org.springframework.context.annotation.Bean;
117
import org.springframework.context.annotation.Configuration;
8+
import software.amazon.awssdk.regions.Region;
9+
import software.amazon.awssdk.services.s3.S3Client;
1210

1311
@Configuration
14-
public class AmazonS3Config {
15-
16-
@Value("${aws.credentials.access-key}")
17-
private String awsAccessKey;
18-
19-
@Value("${aws.credentials.secret-key}")
20-
private String awsSecretKey;
21-
22-
@Value("${aws.region}")
23-
private String awsRegion;
12+
public class AmazonS3Config extends AWSClientConfig {
2413

2514
@Value("${aws.s3.endpoint}")
2615
private String awsS3EndPoint;
2716

2817
@Bean
29-
public AmazonS3 s3() {
30-
AWSCredentials awsCredentials = new BasicAWSCredentials(
31-
awsAccessKey,
32-
awsSecretKey
33-
);
34-
AmazonS3ClientBuilder amazonS3ClientBuilder = AmazonS3ClientBuilder
35-
.standard()
36-
.withEndpointConfiguration(new EndpointConfiguration(awsS3EndPoint,
37-
awsRegion));
38-
39-
return amazonS3ClientBuilder.withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
18+
public S3Client s3() {
19+
return S3Client.builder()
20+
.region(Region.of(awsRegion))
21+
.credentialsProvider(amazonAWSCredentialsProvider())
22+
.endpointOverride(URI.create(awsS3EndPoint))
4023
.build();
4124
}
4225

Lines changed: 21 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,39 @@
11
package dev.ancaghenade.shipmentlistdemo.config;
22

3-
import com.amazonaws.auth.AWSCredentials;
4-
import com.amazonaws.auth.AWSCredentialsProvider;
5-
import com.amazonaws.auth.AWSStaticCredentialsProvider;
6-
import com.amazonaws.auth.BasicAWSCredentials;
7-
import com.amazonaws.client.builder.AwsClientBuilder.EndpointConfiguration;
8-
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
9-
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
10-
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper;
3+
import dev.ancaghenade.shipmentlistdemo.entity.Shipment;
4+
import java.net.URI;
115
import org.springframework.beans.factory.annotation.Value;
126
import org.springframework.context.annotation.Bean;
137
import org.springframework.context.annotation.Configuration;
8+
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient;
9+
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable;
10+
import software.amazon.awssdk.enhanced.dynamodb.TableSchema;
11+
import software.amazon.awssdk.regions.Region;
12+
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
1413

1514
@Configuration
16-
public class DynamoDBConfiguration {
17-
18-
@Value("${aws.credentials.access-key}")
19-
private String awsAccessKey;
20-
21-
@Value("${aws.credentials.secret-key}")
22-
private String awsSecretKey;
15+
public class DynamoDBConfiguration extends AWSClientConfig {
2316

2417
@Value("${aws.dynamodb.endpoint}")
2518
private String awsDynamoDBEndPoint;
2619

27-
@Value("${aws.region}")
28-
private String awsRegion;
29-
3020
@Bean
31-
public DynamoDBMapper dynamoDBMapper() {
32-
return new DynamoDBMapper(buildAmazonDynamoDB());
33-
}
21+
public DynamoDbEnhancedClient dynamoDbClient() {
22+
DynamoDbClient dynamoDbClient = DynamoDbClient.builder()
23+
.region(Region.of(awsRegion))
24+
.credentialsProvider(amazonAWSCredentialsProvider())
25+
.endpointOverride(URI.create(awsDynamoDBEndPoint))
26+
.build();
3427

35-
@Bean
36-
public AWSCredentials amazonAWSCredentials() {
37-
return new BasicAWSCredentials(awsAccessKey, awsSecretKey);
28+
// using the enhanced client for mapping classes to tables
29+
return DynamoDbEnhancedClient.builder()
30+
.dynamoDbClient(dynamoDbClient)
31+
.build();
3832
}
39-
4033
@Bean
41-
AmazonDynamoDB buildAmazonDynamoDB() {
42-
return AmazonDynamoDBClientBuilder
43-
.standard()
44-
.withEndpointConfiguration(
45-
new EndpointConfiguration(
46-
awsDynamoDBEndPoint,
47-
awsRegion
48-
)
49-
)
50-
.withCredentials(amazonAWSCredentialsProvider())
51-
.build();
34+
public DynamoDbTable shipmentTable(DynamoDbEnhancedClient dynamoDbClient) {
35+
return dynamoDbClient.table("shipment", TableSchema.fromBean(Shipment.class));
5236
}
5337

54-
public AWSCredentialsProvider amazonAWSCredentialsProvider() {
55-
return new AWSStaticCredentialsProvider(amazonAWSCredentials());
56-
}
38+
5739
}
Lines changed: 53 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,72 @@
11
package dev.ancaghenade.shipmentlistdemo.entity;
22

3-
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute;
4-
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBDocument;
53
import lombok.AllArgsConstructor;
64
import lombok.Builder;
75
import lombok.Data;
8-
import lombok.Getter;
96
import lombok.NoArgsConstructor;
10-
import lombok.Setter;
7+
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbAttribute;
8+
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
119

1210
@Data
1311
@AllArgsConstructor
1412
@NoArgsConstructor
15-
@Setter
16-
@Getter
1713
@Builder
18-
@DynamoDBDocument
14+
@DynamoDbBean
1915
public class Address {
2016

21-
@DynamoDBAttribute
2217
private String postalCode;
23-
24-
@DynamoDBAttribute
2518
private String street;
26-
27-
@DynamoDBAttribute
2819
private String number;
29-
30-
@DynamoDBAttribute
3120
private String city;
32-
33-
@DynamoDBAttribute
3421
private String additionalInfo;
22+
23+
@DynamoDbAttribute("postalCode")
24+
public String getPostalCode() {
25+
return postalCode;
26+
}
27+
28+
public void setPostalCode(String postalCode) {
29+
this.postalCode = postalCode;
30+
}
31+
32+
@DynamoDbAttribute("street")
33+
34+
public String getStreet() {
35+
return street;
36+
}
37+
38+
public void setStreet(String street) {
39+
this.street = street;
40+
}
41+
42+
@DynamoDbAttribute("number")
43+
44+
public String getNumber() {
45+
return number;
46+
}
47+
48+
49+
public void setNumber(String number) {
50+
this.number = number;
51+
}
52+
53+
@DynamoDbAttribute("city")
54+
55+
public String getCity() {
56+
return city;
57+
}
58+
59+
public void setCity(String city) {
60+
this.city = city;
61+
}
62+
63+
@DynamoDbAttribute("additionalInfo")
64+
65+
public String getAdditionalInfo() {
66+
return additionalInfo;
67+
}
68+
69+
public void setAdditionalInfo(String additionalInfo) {
70+
this.additionalInfo = additionalInfo;
71+
}
3572
}
Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,40 @@
11
package dev.ancaghenade.shipmentlistdemo.entity;
22

33

4-
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute;
5-
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBDocument;
64
import lombok.AllArgsConstructor;
75
import lombok.Builder;
86
import lombok.Data;
9-
import lombok.Getter;
107
import lombok.NoArgsConstructor;
11-
import lombok.Setter;
8+
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbAttribute;
9+
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
1210

1311
@Data
1412
@AllArgsConstructor
1513
@NoArgsConstructor
16-
@Getter
17-
@Setter
1814
@Builder
19-
@DynamoDBDocument
15+
@DynamoDbBean
2016
public class Participant {
2117

22-
@DynamoDBAttribute
2318
private String name;
24-
25-
@DynamoDBAttribute
2619
private Address address;
2720

21+
@DynamoDbAttribute("name")
22+
23+
public String getName() {
24+
return name;
25+
}
26+
27+
public void setName(String name) {
28+
this.name = name;
29+
}
30+
31+
@DynamoDbAttribute("address")
32+
33+
public Address getAddress() {
34+
return address;
35+
}
36+
37+
public void setAddress(Address address) {
38+
this.address = address;
39+
}
2840
}

0 commit comments

Comments
 (0)