Skip to content

Commit 3d8bf03

Browse files
committed
PP-13648 Upgrade java aws sdk to version 2
1 parent 0ac0c3f commit 3d8bf03

12 files changed

Lines changed: 150 additions & 101 deletions

File tree

pom.xml

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@
5252
<type>pom</type>
5353
</dependency>
5454
<dependency>
55-
<groupId>com.amazonaws</groupId>
56-
<artifactId>aws-java-sdk-bom</artifactId>
57-
<version>1.12.782</version>
55+
<groupId>software.amazon.awssdk</groupId>
56+
<artifactId>bom</artifactId>
57+
<version>2.31.39</version>
5858
<type>pom</type>
5959
<scope>import</scope>
6060
</dependency>
@@ -112,8 +112,9 @@
112112
<artifactId>jackson-datatype-jdk8</artifactId>
113113
</dependency>
114114
<dependency>
115-
<groupId>com.amazonaws</groupId>
116-
<artifactId>aws-java-sdk-sqs</artifactId>
115+
<groupId>software.amazon.awssdk</groupId>
116+
<artifactId>sqs</artifactId>
117+
<version>2.31.39</version>
117118
</dependency>
118119
<dependency>
119120
<groupId>io.dropwizard.metrics</groupId>
@@ -174,6 +175,12 @@
174175
<artifactId>dropwizard-sentry</artifactId>
175176
<version>2.1.6</version>
176177
</dependency>
178+
<dependency>
179+
<groupId>org.apache.httpcomponents</groupId>
180+
<artifactId>httpclient</artifactId>
181+
<version>4.5.14</version>
182+
</dependency>
183+
177184

178185
<!-- Test dependencies that are imported from one of the BOMs specified
179186
in <dependencyManagement> so no explicit versions needed -->
@@ -235,7 +242,6 @@
235242
<dependency>
236243
<groupId>com.h2database</groupId>
237244
<artifactId>h2</artifactId>
238-
<version>2.3.232</version>
239245
<scope>test</scope>
240246
</dependency>
241247
<dependency>

src/main/java/uk/gov/pay/webhooks/app/WebhooksModule.java

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
package uk.gov.pay.webhooks.app;
22

3-
import com.amazonaws.auth.AWSStaticCredentialsProvider;
4-
import com.amazonaws.auth.BasicAWSCredentials;
5-
import com.amazonaws.client.builder.AwsClientBuilder;
6-
import com.amazonaws.services.sqs.AmazonSQS;
7-
import com.amazonaws.services.sqs.AmazonSQSClientBuilder;
83
import com.google.inject.AbstractModule;
94
import com.google.inject.Provides;
105
import io.dropwizard.hibernate.HibernateBundle;
@@ -18,11 +13,19 @@
1813
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
1914
import org.apache.http.ssl.SSLContexts;
2015
import org.hibernate.SessionFactory;
16+
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
17+
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
18+
import software.amazon.awssdk.awscore.client.builder.AwsSyncClientBuilder;
19+
import software.amazon.awssdk.regions.Region;
20+
import software.amazon.awssdk.services.sqs.SqsClient;
21+
import software.amazon.awssdk.services.sqs.SqsClientBuilder;
2122
import uk.gov.pay.webhooks.message.WebhookMessageSignatureGenerator;
2223
import uk.gov.pay.webhooks.util.IdGenerator;
2324

2425
import jakarta.inject.Singleton;
2526
import jakarta.ws.rs.client.Client;
27+
28+
import java.net.URI;
2629
import java.time.InstantSource;
2730
import java.util.concurrent.TimeUnit;
2831

@@ -120,25 +123,19 @@ public UnitOfWorkAwareProxyFactory unitOfWorkAwareProxyFactory() {
120123
}
121124

122125
@Provides
123-
public AmazonSQS sqsClient(WebhooksConfig webhooksConfig) {
124-
AmazonSQSClientBuilder clientBuilder = AmazonSQSClientBuilder
125-
.standard();
126+
public SqsClient sqsClient(WebhooksConfig webhooksConfig) {
127+
SqsClientBuilder clientBuilder = SqsClient.builder();
126128
if (webhooksConfig.getSqsConfig().isNonStandardServiceEndpoint()) {
127129
// build static credentials in a local environment
128-
BasicAWSCredentials basicAWSCredentials = new BasicAWSCredentials(
129-
webhooksConfig.getSqsConfig().getAccessKey(),
130-
webhooksConfig.getSqsConfig().getSecretKey());
130+
AwsBasicCredentials basicAWSCredentials = AwsBasicCredentials.create(webhooksConfig.getSqsConfig().getAccessKey(), webhooksConfig.getSqsConfig().getSecretKey());
131131

132132
clientBuilder
133-
.withCredentials(new AWSStaticCredentialsProvider(basicAWSCredentials))
134-
.withEndpointConfiguration(
135-
new AwsClientBuilder.EndpointConfiguration(
136-
webhooksConfig.getSqsConfig().getEndpoint(),
137-
webhooksConfig.getSqsConfig().getRegion())
138-
);
133+
.credentialsProvider(StaticCredentialsProvider.create(basicAWSCredentials))
134+
.endpointOverride(URI.create(webhooksConfig.getSqsConfig().getEndpoint()))
135+
.region(Region.of(webhooksConfig.getSqsConfig().getRegion()));
139136
} else {
140137
// AWS SDK will use the default provider chain to get credentials from ECS
141-
clientBuilder.withRegion(webhooksConfig.getSqsConfig().getRegion());
138+
clientBuilder.region(Region.of(webhooksConfig.getSqsConfig().getRegion()));
142139
}
143140

144141
return clientBuilder.build();

src/main/java/uk/gov/pay/webhooks/healthcheck/SQSHealthCheck.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package uk.gov.pay.webhooks.healthcheck;
22

3-
import com.amazonaws.SdkClientException;
4-
import com.amazonaws.services.sqs.AmazonSQS;
5-
import com.amazonaws.services.sqs.model.AmazonSQSException;
6-
import com.amazonaws.services.sqs.model.GetQueueAttributesRequest;
73
import com.codahale.metrics.health.HealthCheck;
84
import org.apache.http.NameValuePair;
95
import org.apache.http.message.BasicNameValuePair;
106
import org.slf4j.Logger;
117
import org.slf4j.LoggerFactory;
8+
import software.amazon.awssdk.core.exception.SdkClientException;
9+
import software.amazon.awssdk.services.sqs.SqsClient;
10+
import software.amazon.awssdk.services.sqs.model.GetQueueAttributesRequest;
11+
import software.amazon.awssdk.services.sqs.model.SqsException;
1212
import uk.gov.pay.webhooks.app.WebhooksConfig;
1313

1414
import jakarta.inject.Inject;
@@ -21,12 +21,12 @@
2121

2222
public class SQSHealthCheck extends HealthCheck {
2323

24-
private final AmazonSQS sqsClient;
24+
private final SqsClient sqsClient;
2525
private final Logger logger = LoggerFactory.getLogger(SQSHealthCheck.class);
2626
private List<NameValuePair> checkList = new ArrayList<>();
2727

2828
@Inject
29-
public SQSHealthCheck(AmazonSQS sqsClient, WebhooksConfig webhooksConfig) {
29+
public SQSHealthCheck(SqsClient sqsClient, WebhooksConfig webhooksConfig) {
3030
this.sqsClient = sqsClient;
3131
setUpCheckList(webhooksConfig);
3232
}
@@ -50,11 +50,13 @@ private void setUpCheckList(WebhooksConfig webhooksConfig) {
5050

5151
private Optional<String> checkQueue(NameValuePair nameValuePair) {
5252
GetQueueAttributesRequest queueAttributesRequest =
53-
new GetQueueAttributesRequest(nameValuePair.getValue())
54-
.withAttributeNames("All");
53+
GetQueueAttributesRequest.builder()
54+
.queueUrl(nameValuePair.getValue())
55+
.attributeNamesWithStrings("All")
56+
.build();
5557
try {
5658
sqsClient.getQueueAttributes(queueAttributesRequest);
57-
} catch (AmazonSQSException | UnsupportedOperationException e) {
59+
} catch (SqsException | UnsupportedOperationException e) {
5860
logger.error("Failed to retrieve [{}] queue attributes - {}", nameValuePair.getName(), e.getMessage());
5961
return Optional.of(e.getMessage());
6062
} catch (SdkClientException e) {
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
package uk.gov.pay.webhooks.queue.sqs;
22

3-
import com.amazonaws.services.sqs.model.ReceiveMessageResult;
4-
import com.amazonaws.services.sqs.model.SendMessageResult;
3+
import software.amazon.awssdk.services.sqs.model.ReceiveMessageResponse;
4+
import software.amazon.awssdk.services.sqs.model.SendMessageResponse;
55

66
import java.util.List;
77

88
public record QueueMessage(String messageId, String receiptHandle, String messageBody) {
99

10-
public static List<QueueMessage> of(ReceiveMessageResult receiveMessageResult) {
11-
return receiveMessageResult.getMessages()
10+
public static List<QueueMessage> of(ReceiveMessageResponse receiveMessageResult) {
11+
return receiveMessageResult.messages()
1212
.stream()
13-
.map(message -> new QueueMessage(message.getMessageId(), message.getReceiptHandle(), message.getBody()))
13+
.map(message -> new QueueMessage(message.messageId(), message.receiptHandle(), message.body()))
1414
.toList();
1515
}
1616

17-
public static QueueMessage of(SendMessageResult messageResult, String validJsonMessage) {
18-
return new QueueMessage(messageResult.getMessageId(), null, validJsonMessage);
17+
public static QueueMessage of(SendMessageResponse messageResult, String validJsonMessage) {
18+
return new QueueMessage(messageResult.messageId(), null, validJsonMessage);
1919
}
2020

2121
}

src/main/java/uk/gov/pay/webhooks/queue/sqs/SqsQueueService.java

Lines changed: 34 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package uk.gov.pay.webhooks.queue.sqs;
22

3-
import com.amazonaws.AmazonServiceException;
4-
import com.amazonaws.services.sqs.AmazonSQS;
5-
import com.amazonaws.services.sqs.model.AmazonSQSException;
6-
import com.amazonaws.services.sqs.model.ChangeMessageVisibilityRequest;
7-
import com.amazonaws.services.sqs.model.DeleteMessageRequest;
8-
import com.amazonaws.services.sqs.model.ReceiveMessageRequest;
9-
import com.amazonaws.services.sqs.model.ReceiveMessageResult;
103
import org.slf4j.Logger;
114
import org.slf4j.LoggerFactory;
5+
import software.amazon.awssdk.awscore.exception.AwsServiceException;
6+
import software.amazon.awssdk.services.sqs.SqsClient;
7+
import software.amazon.awssdk.services.sqs.model.ChangeMessageVisibilityRequest;
8+
import software.amazon.awssdk.services.sqs.model.DeleteMessageRequest;
9+
import software.amazon.awssdk.services.sqs.model.ReceiveMessageRequest;
10+
import software.amazon.awssdk.services.sqs.model.ReceiveMessageResponse;
11+
import software.amazon.awssdk.services.sqs.model.SqsException;
1212
import uk.gov.pay.webhooks.app.WebhooksConfig;
1313

1414
import jakarta.inject.Inject;
@@ -17,27 +17,34 @@
1717
public class SqsQueueService {
1818
private final Logger logger = LoggerFactory.getLogger(SqsQueueService.class);
1919

20-
private final AmazonSQS sqsClient;
20+
private final SqsClient sqsClient;
2121

2222
private final int messageMaximumWaitTimeInSeconds;
2323
private final int messageMaximumBatchSize;
2424

2525
@Inject
26-
public SqsQueueService(AmazonSQS sqsClient, WebhooksConfig webhooksConfig) {
26+
public SqsQueueService(SqsClient sqsClient, WebhooksConfig webhooksConfig) {
2727
this.sqsClient = sqsClient;
2828
this.messageMaximumBatchSize = webhooksConfig.getSqsConfig().getMessageMaximumBatchSize();
2929
this.messageMaximumWaitTimeInSeconds = webhooksConfig.getSqsConfig().getMessageMaximumWaitTimeInSeconds();
3030
}
3131

3232
public List<QueueMessage> receiveMessages(String queueUrl, String messageAttributeName) throws QueueException {
3333
try {
34-
ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(queueUrl);
35-
receiveMessageRequest
36-
.withMessageAttributeNames(messageAttributeName)
37-
.withWaitTimeSeconds(messageMaximumWaitTimeInSeconds)
38-
.withMaxNumberOfMessages(messageMaximumBatchSize);
34+
// ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(queueUrl);
35+
// receiveMessageRequest
36+
// .messageAttributeNames(messageAttributeName)
37+
// .waitTimeSeconds(messageMaximumWaitTimeInSeconds)
38+
// .maxNumberOfMessages(messageMaximumBatchSize);
3939

40-
ReceiveMessageResult receiveMessageResult = sqsClient.receiveMessage(receiveMessageRequest);
40+
ReceiveMessageRequest receiveMessageRequest = ReceiveMessageRequest.builder()
41+
.queueUrl(queueUrl)
42+
.messageAttributeNames()
43+
.waitTimeSeconds(1)
44+
.maxNumberOfMessages(10)
45+
.build();
46+
47+
ReceiveMessageResponse receiveMessageResult = sqsClient.receiveMessage(receiveMessageRequest);
4148

4249
return QueueMessage.of(receiveMessageResult);
4350
} catch (Exception e) {
@@ -48,26 +55,28 @@ public List<QueueMessage> receiveMessages(String queueUrl, String messageAttribu
4855

4956
public void deleteMessage(String queueUrl, String messageReceiptHandle) throws QueueException {
5057
try {
51-
sqsClient.deleteMessage(new DeleteMessageRequest(queueUrl, messageReceiptHandle));
52-
} catch (AmazonSQSException | UnsupportedOperationException e) {
58+
DeleteMessageRequest deleteMessageRequest = DeleteMessageRequest.builder().queueUrl(queueUrl).receiptHandle(messageReceiptHandle).build();
59+
sqsClient.deleteMessage(deleteMessageRequest);
60+
} catch (SqsException | UnsupportedOperationException e) {
5361
logger.error("Failed to delete message from SQS queue - {}", e.getMessage());
5462
throw new QueueException("Failed to delete message from SQS queue", e);
55-
} catch (AmazonServiceException e) {
56-
logger.error("Failed to delete message from SQS queue - [errorMessage={}] [awsErrorCode={}]", e.getMessage(), e.getErrorCode());
63+
} catch (AwsServiceException e) {
64+
logger.error("Failed to delete message from SQS queue - [errorMessage={}] [awsErrorCode={}]", e.getMessage(), e.awsErrorDetails().errorCode());
5765
throw new QueueException("Failed to delete message from SQS queue", e);
5866
}
5967
}
6068

6169
public void deferMessage(String queueUrl, String messageReceiptHandle, int retryDelayInSeconds) throws QueueException {
6270
try {
63-
ChangeMessageVisibilityRequest changeMessageVisibilityRequest = new ChangeMessageVisibilityRequest(
64-
queueUrl,
65-
messageReceiptHandle,
66-
retryDelayInSeconds
67-
);
71+
ChangeMessageVisibilityRequest changeMessageVisibilityRequest = ChangeMessageVisibilityRequest.builder()
72+
.queueUrl(queueUrl)
73+
.receiptHandle(messageReceiptHandle)
74+
.visibilityTimeout(retryDelayInSeconds)
75+
.build();
76+
6877

6978
sqsClient.changeMessageVisibility(changeMessageVisibilityRequest);
70-
} catch (AmazonSQSException | UnsupportedOperationException e) {
79+
} catch (SqsException | UnsupportedOperationException e) {
7180
logger.error("Failed to defer message from SQS queue - {}", e.getMessage());
7281
throw new QueueException("Failed to defer message from SQS queue", e);
7382
}

src/test/java/uk/gov/pay/extension/AppWithPostgresAndSqsExtension.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package uk.gov.pay.extension;
22

3-
import com.amazonaws.services.sqs.AmazonSQS;
43
import io.dropwizard.testing.ConfigOverride;
54
import io.dropwizard.testing.junit5.DropwizardAppExtension;
65
import org.jdbi.v3.core.Jdbi;
@@ -10,6 +9,7 @@
109
import org.junit.jupiter.api.extension.ExtensionContext;
1110
import org.slf4j.Logger;
1211
import org.slf4j.LoggerFactory;
12+
import software.amazon.awssdk.services.sqs.SqsClient;
1313
import uk.gov.pay.rule.PostgresTestDocker;
1414
import uk.gov.pay.rule.SqsTestDocker;
1515
import uk.gov.pay.webhooks.app.WebhooksApp;
@@ -35,7 +35,7 @@ public class AppWithPostgresAndSqsExtension implements BeforeAllCallback, AfterA
3535

3636
static final int wireMockPort = PortFactory.findFreePort();
3737

38-
private final AmazonSQS sqsClient;
38+
private final SqsClient sqsClient;
3939

4040
public AppWithPostgresAndSqsExtension() {
4141
this(new ConfigOverride[0]);
@@ -104,7 +104,7 @@ public Jdbi getJdbi() {
104104
return jdbi;
105105
}
106106

107-
public AmazonSQS getSqsClient() {
107+
public SqsClient getSqsClient() {
108108
return sqsClient;
109109
}
110110

0 commit comments

Comments
 (0)