Skip to content

Commit cf1904f

Browse files
committed
PP-13646 update AWS SDK to version 2
The AWS SDK for Java 1.x is in maintenance mode, effective July 31, 2024. The AWS SDK for Java 1.x will no longer receive updates for new or existing services. We need to upgrade pay-ledger to use the AWS SDK version 2 for SQS operations. This will involve updating dependencies, refactoring code to accommodate changes in the SDK, and ensuring the new SDK's methods and patterns are followed.
1 parent 67d1467 commit cf1904f

43 files changed

Lines changed: 267 additions & 125 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

pom.xml

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@
3737
<scope>import</scope>
3838
</dependency>
3939
<dependency>
40-
<groupId>com.amazonaws</groupId>
41-
<artifactId>aws-java-sdk-bom</artifactId>
42-
<version>1.12.782</version>
40+
<groupId>software.amazon.awssdk</groupId>
41+
<artifactId>bom</artifactId>
42+
<version>2.31.33</version>
4343
<type>pom</type>
4444
<scope>import</scope>
4545
</dependency>
@@ -109,8 +109,12 @@
109109
<artifactId>jackson-dataformat-csv</artifactId>
110110
</dependency>
111111
<dependency>
112-
<groupId>com.amazonaws</groupId>
113-
<artifactId>aws-java-sdk-sqs</artifactId>
112+
<groupId>software.amazon.awssdk</groupId>
113+
<artifactId>sqs</artifactId>
114+
</dependency>
115+
<dependency>
116+
<groupId>software.amazon.awssdk</groupId>
117+
<artifactId>sns</artifactId>
114118
</dependency>
115119
<dependency>
116120
<groupId>com.google.guava</groupId>
@@ -169,14 +173,9 @@
169173
</dependency>
170174
<dependency>
171175
<groupId>uk.gov.service.payments</groupId>
172-
<artifactId>queue-dropwizard-4</artifactId>
176+
<artifactId>queue-dropwizard-4-aws-sdk-v2</artifactId>
173177
<version>${pay-java-commons.version}</version>
174178
</dependency>
175-
<dependency>
176-
<groupId>software.amazon.awssdk</groupId>
177-
<artifactId>sns</artifactId>
178-
<version>2.31.30</version>
179-
</dependency>
180179
<dependency>
181180
<groupId>com.google.code.gson</groupId>
182181
<artifactId>gson</artifactId>

src/main/java/uk/gov/pay/ledger/app/LedgerModule.java

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
package uk.gov.pay.ledger.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.fasterxml.jackson.databind.ObjectMapper;
94
import com.google.inject.AbstractModule;
105
import com.google.inject.Provides;
@@ -16,6 +11,8 @@
1611
import software.amazon.awssdk.regions.Region;
1712
import software.amazon.awssdk.services.sns.SnsClient;
1813
import software.amazon.awssdk.services.sns.SnsClientBuilder;
14+
import software.amazon.awssdk.services.sqs.SqsClient;
15+
import software.amazon.awssdk.services.sqs.SqsClientBuilder;
1916
import uk.gov.pay.ledger.agreement.dao.AgreementDao;
2017
import uk.gov.pay.ledger.agreement.dao.PaymentInstrumentDao;
2118
import uk.gov.pay.ledger.event.dao.EventDao;
@@ -31,6 +28,7 @@
3128
import uk.gov.pay.ledger.transactionsummary.dao.TransactionSummaryDao;
3229
import uk.gov.service.payments.commons.queue.sqs.SqsQueueService;
3330

31+
import java.net.URI;
3432
import java.time.InstantSource;
3533

3634
public class LedgerModule extends AbstractModule {
@@ -144,26 +142,22 @@ public PaymentInstrumentDao providePaymentInstrumentDao() {
144142
}
145143

146144
@Provides
147-
public AmazonSQS sqsClient(LedgerConfig ledgerConfig) {
148-
AmazonSQSClientBuilder clientBuilder = AmazonSQSClientBuilder
149-
.standard();
145+
public SqsClient sqsClient(LedgerConfig ledgerConfig) {
146+
SqsClientBuilder clientBuilder = SqsClient.builder();
150147

151148
if (ledgerConfig.getSqsConfig().isNonStandardServiceEndpoint()) {
152149

153-
BasicAWSCredentials basicAWSCredentials = new BasicAWSCredentials(
154-
ledgerConfig.getSqsConfig().getAccessKey(),
155-
ledgerConfig.getSqsConfig().getSecretKey());
150+
AwsBasicCredentials basicAWSCredentials = AwsBasicCredentials
151+
.create(ledgerConfig.getSqsConfig().getAccessKey(),
152+
ledgerConfig.getSqsConfig().getSecretKey());
156153

157154
clientBuilder
158-
.withCredentials(new AWSStaticCredentialsProvider(basicAWSCredentials))
159-
.withEndpointConfiguration(
160-
new AwsClientBuilder.EndpointConfiguration(
161-
ledgerConfig.getSqsConfig().getEndpoint(),
162-
ledgerConfig.getSqsConfig().getRegion())
163-
);
155+
.credentialsProvider(StaticCredentialsProvider.create(basicAWSCredentials))
156+
.endpointOverride(URI.create(ledgerConfig.getSqsConfig().getEndpoint()))
157+
.region(Region.of(ledgerConfig.getSqsConfig().getRegion()));
164158
} else {
165159
// uses AWS SDK's DefaultAWSCredentialsProviderChain to obtain credentials
166-
clientBuilder.withRegion(ledgerConfig.getSqsConfig().getRegion());
160+
clientBuilder.region(Region.of(ledgerConfig.getSqsConfig().getRegion()));
167161
}
168162

169163
return clientBuilder.build();
@@ -192,7 +186,7 @@ public SnsClient snsClient(LedgerConfig ledgerConfig) {
192186
}
193187

194188
@Provides
195-
public SqsQueueService provideSqsQueueService(AmazonSQS amazonSQS, LedgerConfig ledgerConfig) {
189+
public SqsQueueService provideSqsQueueService(SqsClient amazonSQS, LedgerConfig ledgerConfig) {
196190
return new SqsQueueService(
197191
amazonSQS,
198192
ledgerConfig.getSqsConfig().getMessageMaximumWaitTimeInSeconds(),

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

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

3-
import com.amazonaws.SdkClientException;
4-
import com.amazonaws.services.sqs.AmazonSQS;
5-
import com.amazonaws.services.sqs.model.GetQueueAttributesRequest;
63
import com.codahale.metrics.health.HealthCheck;
74
import com.google.inject.Inject;
85
import org.apache.http.NameValuePair;
96
import org.apache.http.message.BasicNameValuePair;
107
import org.slf4j.Logger;
118
import org.slf4j.LoggerFactory;
9+
import software.amazon.awssdk.core.exception.SdkClientException;
10+
import software.amazon.awssdk.services.sqs.SqsClient;
11+
import software.amazon.awssdk.services.sqs.model.GetQueueAttributesRequest;
1212
import uk.gov.pay.ledger.app.LedgerConfig;
1313

14-
1514
import java.util.Optional;
1615

1716
import static java.lang.String.format;
1817

1918
public class SQSHealthCheck extends HealthCheck {
2019

21-
private final AmazonSQS sqsClient;
20+
private final SqsClient sqsClient;
2221
private final Logger logger = LoggerFactory.getLogger(SQSHealthCheck.class);
2322
private NameValuePair sqsHealthCheckHolder;
2423

2524
@Inject
26-
public SQSHealthCheck(AmazonSQS sqsClient, LedgerConfig ledgerConfig) {
25+
public SQSHealthCheck(SqsClient sqsClient, LedgerConfig ledgerConfig) {
2726
this.sqsClient = sqsClient;
2827
setUpSQSHealthCheckHolder(ledgerConfig);
2928
}
@@ -43,8 +42,10 @@ protected Result check() {
4342

4443
private Optional<String> checkQueue(NameValuePair nameValuePair) {
4544
GetQueueAttributesRequest queueAttributesRequest =
46-
new GetQueueAttributesRequest(nameValuePair.getValue())
47-
.withAttributeNames("All");
45+
GetQueueAttributesRequest.builder()
46+
.queueUrl(nameValuePair.getValue())
47+
.attributeNamesWithStrings("All")
48+
.build();
4849
try {
4950
sqsClient.getQueueAttributes(queueAttributesRequest);
5051
} catch (UnsupportedOperationException | SdkClientException e) {

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package uk.gov.pay.ledger.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.ledger.app.LedgerApp;
1414
import uk.gov.pay.ledger.app.LedgerConfig;
1515
import uk.gov.pay.ledger.rule.SqsTestDocker;
@@ -30,7 +30,7 @@ public class AppWithPostgresAndSqsExtension implements BeforeAllCallback, AfterA
3030

3131
private static String CONFIG_PATH = resourceFilePath("config/test-config.yaml");
3232
private final Jdbi jdbi;
33-
private AmazonSQS sqsClient;
33+
private SqsClient sqsClient;
3434
private DropwizardAppExtension<LedgerConfig> dropwizardAppExtension;
3535

3636
public AppWithPostgresAndSqsExtension() {
@@ -40,7 +40,7 @@ public AppWithPostgresAndSqsExtension() {
4040
public AppWithPostgresAndSqsExtension(ConfigOverride... configOverrides) {
4141
getOrCreate();
4242

43-
sqsClient = SqsTestDocker.initialise("event-queue");
43+
sqsClient = SqsTestDocker.initialise(List.of("event-queue"));
4444

4545
ConfigOverride[] newConfigOverrides = overrideDatabaseConfig(configOverrides);
4646
newConfigOverrides = overrideSqsConfig(newConfigOverrides);
@@ -94,7 +94,7 @@ public Jdbi getJdbi() {
9494
return jdbi;
9595
}
9696

97-
public AmazonSQS getSqsClient() {
97+
public SqsClient getSqsClient() {
9898
return sqsClient;
9999
}
100100
}

src/test/java/uk/gov/pay/ledger/pact/event/CancelledByUserEventQueueConsumerIT.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.google.gson.Gson;
99
import org.junit.Rule;
1010
import org.junit.Test;
11+
import software.amazon.awssdk.services.sqs.model.SendMessageRequest;
1112
import uk.gov.pay.ledger.app.LedgerConfig;
1213
import uk.gov.pay.ledger.event.model.SalientEventType;
1314
import uk.gov.pay.ledger.rule.AppWithPostgresAndSqsRule;
@@ -67,7 +68,11 @@ public MessagePact createCancelledByUserEventPact(MessagePactBuilder builder) {
6768
@Test
6869
@PactVerification({"connector"})
6970
public void test() {
70-
appRule.getSqsClient().sendMessage(SqsTestDocker.getQueueUrl("event-queue"), new String(currentMessage));
71+
SendMessageRequest messageRequest = SendMessageRequest.builder()
72+
.queueUrl(SqsTestDocker.getQueueUrl("event-queue"))
73+
.messageBody(new String(currentMessage))
74+
.build();
75+
appRule.getSqsClient().sendMessage(messageRequest);
7176

7277
TransactionDao transactionDao = new TransactionDao(appRule.getJdbi(), mock(LedgerConfig.class));
7378

src/test/java/uk/gov/pay/ledger/pact/event/CaptureConfirmedEventQueueConsumerIT.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.google.gson.Gson;
1010
import org.junit.Rule;
1111
import org.junit.Test;
12+
import software.amazon.awssdk.services.sqs.model.SendMessageRequest;
1213
import uk.gov.pay.ledger.app.LedgerConfig;
1314
import uk.gov.pay.ledger.event.dao.EventDao;
1415
import uk.gov.pay.ledger.event.entity.EventEntity;
@@ -71,7 +72,11 @@ public MessagePact createCaptureConfirmedEventPact(MessagePactBuilder builder) {
7172
@Test
7273
@PactVerification({"connector"})
7374
public void test() {
74-
appRule.getSqsClient().sendMessage(SqsTestDocker.getQueueUrl("event-queue"), new String(currentMessage));
75+
SendMessageRequest messageRequest = SendMessageRequest.builder()
76+
.queueUrl(SqsTestDocker.getQueueUrl("event-queue"))
77+
.messageBody(new String(currentMessage))
78+
.build();
79+
appRule.getSqsClient().sendMessage(messageRequest);
7580

7681
TransactionDao transactionDao = new TransactionDao(appRule.getJdbi(), mock(LedgerConfig.class));
7782
EventDao eventDao = appRule.getJdbi().onDemand(EventDao.class);

src/test/java/uk/gov/pay/ledger/pact/event/CaptureSubmittedEventQueueConsumerIT.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.google.gson.Gson;
99
import org.junit.Rule;
1010
import org.junit.Test;
11+
import software.amazon.awssdk.services.sqs.model.SendMessageRequest;
1112
import uk.gov.pay.ledger.app.LedgerConfig;
1213
import uk.gov.pay.ledger.event.model.SalientEventType;
1314
import uk.gov.pay.ledger.rule.AppWithPostgresAndSqsRule;
@@ -67,7 +68,11 @@ public MessagePact createPaymentCreatedEventPact(MessagePactBuilder builder) {
6768
@Test
6869
@PactVerification({"connector"})
6970
public void test() {
70-
appRule.getSqsClient().sendMessage(SqsTestDocker.getQueueUrl("event-queue"), new String(currentMessage));
71+
SendMessageRequest messageRequest = SendMessageRequest.builder()
72+
.queueUrl(SqsTestDocker.getQueueUrl("event-queue"))
73+
.messageBody(new String(currentMessage))
74+
.build();
75+
appRule.getSqsClient().sendMessage(messageRequest);
7176

7277
TransactionDao transactionDao = new TransactionDao(appRule.getJdbi(), mock(LedgerConfig.class));
7378

src/test/java/uk/gov/pay/ledger/pact/event/DisputeCreatedEventQueueConsumerIT.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.junit.Before;
1313
import org.junit.Rule;
1414
import org.junit.Test;
15+
import software.amazon.awssdk.services.sqs.model.SendMessageRequest;
1516
import uk.gov.pay.ledger.app.LedgerConfig;
1617
import uk.gov.pay.ledger.event.dao.EventDao;
1718
import uk.gov.pay.ledger.event.entity.EventEntity;
@@ -96,7 +97,11 @@ public void setUp() {
9697
@Test
9798
@PactVerification({"connector"})
9899
public void test() throws JsonProcessingException {
99-
appRule.getSqsClient().sendMessage(SqsTestDocker.getQueueUrl("event-queue"), new String(currentMessage));
100+
SendMessageRequest messageRequest = SendMessageRequest.builder()
101+
.queueUrl(SqsTestDocker.getQueueUrl("event-queue"))
102+
.messageBody(new String(currentMessage))
103+
.build();
104+
appRule.getSqsClient().sendMessage(messageRequest);
100105
EventDao eventDao = appRule.getJdbi().onDemand(EventDao.class);
101106
await().atMost(1, TimeUnit.SECONDS).until(
102107
() -> !eventDao.findEventsForExternalIds(Set.of(resourceExternalId)).isEmpty()

src/test/java/uk/gov/pay/ledger/pact/event/DisputeEvidenceSubmittedEventQueueConsumerIT.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.junit.Before;
1313
import org.junit.Rule;
1414
import org.junit.Test;
15+
import software.amazon.awssdk.services.sqs.model.SendMessageRequest;
1516
import uk.gov.pay.ledger.app.LedgerConfig;
1617
import uk.gov.pay.ledger.event.dao.EventDao;
1718
import uk.gov.pay.ledger.event.entity.EventEntity;
@@ -96,7 +97,11 @@ public void setUp() {
9697
@Test
9798
@PactVerification({"connector"})
9899
public void test() throws JsonProcessingException {
99-
appRule.getSqsClient().sendMessage(SqsTestDocker.getQueueUrl("event-queue"), new String(currentMessage));
100+
SendMessageRequest messageRequest = SendMessageRequest.builder()
101+
.queueUrl(SqsTestDocker.getQueueUrl("event-queue"))
102+
.messageBody(new String(currentMessage))
103+
.build();
104+
appRule.getSqsClient().sendMessage(messageRequest);
100105
EventDao eventDao = appRule.getJdbi().onDemand(EventDao.class);
101106
await().atMost(1, TimeUnit.SECONDS).until(
102107
() -> !eventDao.findEventsForExternalIds(Set.of(resourceExternalId)).isEmpty()

src/test/java/uk/gov/pay/ledger/pact/event/DisputeLostEventQueueConsumerIT.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.junit.Before;
1212
import org.junit.Rule;
1313
import org.junit.Test;
14+
import software.amazon.awssdk.services.sqs.model.SendMessageRequest;
1415
import uk.gov.pay.ledger.app.LedgerConfig;
1516
import uk.gov.pay.ledger.event.dao.EventDao;
1617
import uk.gov.pay.ledger.event.entity.EventEntity;
@@ -96,7 +97,11 @@ public void setUp() {
9697
@Test
9798
@PactVerification({"connector"})
9899
public void test() throws JsonProcessingException {
99-
appRule.getSqsClient().sendMessage(SqsTestDocker.getQueueUrl("event-queue"), new String(currentMessage));
100+
SendMessageRequest messageRequest = SendMessageRequest.builder()
101+
.queueUrl(SqsTestDocker.getQueueUrl("event-queue"))
102+
.messageBody(new String(currentMessage))
103+
.build();
104+
appRule.getSqsClient().sendMessage(messageRequest);
100105
EventDao eventDao = appRule.getJdbi().onDemand(EventDao.class);
101106
await().atMost(1, TimeUnit.SECONDS).until(
102107
() -> !eventDao.findEventsForExternalIds(Set.of(resourceExternalId)).isEmpty()

0 commit comments

Comments
 (0)