Skip to content

Commit

Permalink
Upgrade to AWS SDK v2 (#149)
Browse files Browse the repository at this point in the history
Description of changes: Migrate to AWS SDKv2. Includes corresponding upgrades to sigv4 signing and kinesis libraries. This was tested using the usual suite of integration tests, along with manual tests of exports via a non-default credentials profile, exports to kinesis, and exports to kinesis using a separate assumed role.
  • Loading branch information
Cole-Greer authored Mar 10, 2025
1 parent 1350389 commit 4b5d7d5
Show file tree
Hide file tree
Showing 54 changed files with 772 additions and 656 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

### New Features and Improvements:

- Migrate to AWS SDK for Java v2

### Bug Fixes:

## Neptune Export v1.1.11 (Release Date: Mar 10, 2025):
Expand Down
50 changes: 28 additions & 22 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,15 @@
<uberjar.name>neptune-export-${project.version}-all</uberjar.name>
<skipIntegrationTests>true</skipIntegrationTests>
<neptuneEndpoint></neptuneEndpoint>
<aws.sdk.version>1.12.773</aws.sdk.version>
<aws.sdk.version>2.29.3</aws.sdk.version>
<gremlin.version>3.7.3</gremlin.version>
<slf4j.version>2.0.5</slf4j.version>
<rdf4j.version>3.5.0</rdf4j.version>
<amazon.neptune.sigv4.signer.version>2.4.0</amazon.neptune.sigv4.signer.version>
<amazon.neptune.gremlin.java.sigv4.version>2.4.0</amazon.neptune.gremlin.java.sigv4.version>
<amazon.neptune.sparql.java.sigv4.version>2.4.0</amazon.neptune.sparql.java.sigv4.version>
<amazon.neptune.sigv4.signer.version>3.0.1</amazon.neptune.sigv4.signer.version>
<amazon.neptune.gremlin.java.sigv4.version>3.0.1</amazon.neptune.gremlin.java.sigv4.version>
<amazon.neptune.sparql.java.sigv4.version>3.0.1</amazon.neptune.sparql.java.sigv4.version>
<netty.version>4.1.52.Final</netty.version>
<kinesis.producer.version>0.14.0</kinesis.producer.version>
<kinesis.producer.version>1.0.0</kinesis.producer.version>
<jackson.version>2.15.3</jackson.version>
</properties>

Expand Down Expand Up @@ -69,6 +69,12 @@
<version>1.9.0</version>
</dependency>

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.17.0</version>
</dependency>

<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
Expand All @@ -88,46 +94,46 @@
</dependency>

<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-core</artifactId>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sdk-core</artifactId>
<version>${aws.sdk.version}</version>
</dependency>

<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>${aws.sdk.version}</version>
</dependency>

<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3-transfer-manager</artifactId>
<version>${aws.sdk.version}</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-sts -->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-sts</artifactId>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sts</artifactId>
<version>${aws.sdk.version}</version>
</dependency>

<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-neptune</artifactId>
<groupId>software.amazon.awssdk</groupId>
<artifactId>neptune</artifactId>
<version>${aws.sdk.version}</version>
</dependency>

<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-kinesis</artifactId>
<groupId>software.amazon.awssdk</groupId>
<artifactId>kinesis</artifactId>
<version>${aws.sdk.version}</version>
</dependency>

<dependency>
<groupId>com.amazonaws</groupId>
<groupId>software.amazon.kinesis</groupId>
<artifactId>amazon-kinesis-producer</artifactId>
<version>${kinesis.producer.version}</version>
<exclusions>
<exclusion>
<groupId>software.amazon.glue</groupId>
<artifactId>schema-registry-serde</artifactId>
</exclusion>
</exclusions>
</dependency>

<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
import com.github.rvesse.airline.annotations.Command;
import com.github.rvesse.airline.annotations.Option;
import com.github.rvesse.airline.annotations.restrictions.Once;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.StringUtils;

import javax.inject.Inject;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
import com.github.rvesse.airline.annotations.Option;
import com.github.rvesse.airline.annotations.restrictions.Once;
import com.github.rvesse.airline.annotations.restrictions.RequireOnlyOne;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.StringUtils;

import javax.inject.Inject;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@

package com.amazonaws.services.neptune.cli;


import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.services.neptune.io.CommandWriter;
import com.amazonaws.services.neptune.io.Directories;
import com.amazonaws.services.neptune.io.DirectoryStructure;
Expand All @@ -24,7 +22,8 @@
import com.github.rvesse.airline.annotations.restrictions.Once;
import com.github.rvesse.airline.annotations.restrictions.PathKind;
import com.github.rvesse.airline.annotations.restrictions.Required;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.StringUtils;
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;

import javax.inject.Inject;
import java.io.File;
Expand Down Expand Up @@ -142,7 +141,7 @@ public void writeMessage(String value) {

protected abstract DirectoryStructure directoryStructure();

public AWSCredentialsProvider getCredentialsProvider() {
public AwsCredentialsProvider getCredentialsProvider() {
if (StringUtils.isEmpty(streamRoleArn)) {
return credentialProfileModule.getCredentialsProvider();
}
Expand Down
24 changes: 11 additions & 13 deletions src/main/java/com/amazonaws/services/neptune/cli/AwsCliModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,18 @@

package com.amazonaws.services.neptune.cli;

import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.neptune.AmazonNeptune;
import com.amazonaws.services.neptune.AmazonNeptuneClientBuilder;
import com.github.rvesse.airline.annotations.Option;
import com.github.rvesse.airline.annotations.restrictions.Once;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.StringUtils;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.neptune.NeptuneClient;
import software.amazon.awssdk.services.neptune.NeptuneClientBuilder;

import javax.inject.Inject;
import java.net.URI;
import java.util.function.Supplier;

public class AwsCliModule implements Supplier<AmazonNeptune> {
public class AwsCliModule implements Supplier<NeptuneClient> {

@Inject
private CredentialProfileModule credentialProfileModule = new CredentialProfileModule();
Expand All @@ -37,19 +37,17 @@ public class AwsCliModule implements Supplier<AmazonNeptune> {
private String awsCliRegion;

@Override
public AmazonNeptune get() {
AmazonNeptuneClientBuilder builder = AmazonNeptuneClientBuilder.standard();
public NeptuneClient get() {
NeptuneClientBuilder builder = NeptuneClient.builder();

if (StringUtils.isNotEmpty(awsCliEndpointUrl) && StringUtils.isNotEmpty(awsCliRegion)) {
builder = builder.withEndpointConfiguration(
new AwsClientBuilder.EndpointConfiguration(awsCliEndpointUrl, awsCliRegion)
);
builder = builder.endpointOverride(URI.create(awsCliEndpointUrl)).region(Region.of(awsCliRegion));
}

if (credentialProfileModule.getCredentialsProvider() != null) {
builder = builder
.withCredentials(credentialProfileModule.getCredentialsProvider())
.withRegion(credentialProfileModule.getRegionProvider().getRegion());
.credentialsProvider(credentialProfileModule.getCredentialsProvider())
.region(Region.of(credentialProfileModule.getRegionProvider().getRegion()));
}

return builder.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@

package com.amazonaws.services.neptune.cli;

import com.amazonaws.services.neptune.AmazonNeptune;
import software.amazon.awssdk.services.neptune.NeptuneClient;
import com.amazonaws.services.neptune.cluster.ConnectionConfig;
import com.amazonaws.services.neptune.cluster.NeptuneClusterMetadata;
import com.amazonaws.services.neptune.cluster.ProxyConfig;
import com.amazonaws.services.neptune.export.EndpointValidator;
import com.github.rvesse.airline.annotations.Option;
import com.github.rvesse.airline.annotations.restrictions.*;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.StringUtils;

import javax.inject.Inject;
import java.util.Collection;
Expand Down Expand Up @@ -87,9 +87,9 @@ public class CommonConnectionModule {
@Once
private boolean removeProxyHostHeader = false;

private final Supplier<AmazonNeptune> amazonNeptuneClientSupplier;
private final Supplier<NeptuneClient> amazonNeptuneClientSupplier;

public CommonConnectionModule(Supplier<AmazonNeptune> amazonNeptuneClientSupplier) {
public CommonConnectionModule(Supplier<NeptuneClient> amazonNeptuneClientSupplier) {
this.amazonNeptuneClientSupplier = amazonNeptuneClientSupplier;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,15 @@

package com.amazonaws.services.neptune.cli;

import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.regions.AwsProfileRegionProvider;
import com.amazonaws.regions.AwsRegionProvider;
import com.amazonaws.regions.AwsRegionProviderChain;
import com.amazonaws.regions.DefaultAwsRegionProviderChain;
import com.amazonaws.services.neptune.util.AWSCredentialsUtil;
import com.github.rvesse.airline.annotations.Option;
import com.github.rvesse.airline.annotations.restrictions.Once;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.StringUtils;
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;

public class CredentialProfileModule {
@Option(name = {"--credentials-profile"}, description = "Use profile from credentials config file.", hidden = true)
Expand All @@ -31,7 +31,7 @@ public class CredentialProfileModule {
@Once
private String credentialsConfigFilePath;

public AWSCredentialsProvider getCredentialsProvider() {
public AwsCredentialsProvider getCredentialsProvider() {
return AWSCredentialsUtil.getProfileCredentialsProvider(credentialsProfile, credentialsConfigFilePath);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.rvesse.airline.annotations.Option;
import com.github.rvesse.airline.annotations.restrictions.MutuallyExclusiveWith;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.StringUtils;

import java.io.IOException;
import java.net.URI;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
import com.github.rvesse.airline.annotations.Option;
import com.github.rvesse.airline.annotations.restrictions.AllowedEnumValues;
import com.github.rvesse.airline.annotations.restrictions.Once;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.StringUtils;

import java.net.URL;

Expand Down
Loading

0 comments on commit 4b5d7d5

Please sign in to comment.