Skip to content

Commit 4e2bc77

Browse files
Remove SDK v1 from KCL v2 (#1444)
* update dependabot to check for dependencies in v2.x * exclude v1 sdk from glue dependency * remove sdk v1 dependency from multilang pom.xml * remove dependency on Regions class from sdk v1 * remove sdk v1 dependencies * update docs for credential provider * update documentation for NestedPropertyProcessor * update KclStsAssumeRoleCredentialsProvider to have resolveCredentials() * fix casing within AwsCredentialsProviderPropertyValueDecoderTest * update unit tests to have endpointRegion * update docs with endpointRegion
1 parent 08c874a commit 4e2bc77

20 files changed

+598
-506
lines changed

.github/dependabot.yml

+12-1
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,22 @@
11
version: 2
22
updates:
3+
# branch - master
4+
- package-ecosystem: "maven"
5+
directory: "/"
6+
labels:
7+
- "dependencies"
8+
- "v3.x"
9+
schedule:
10+
interval: "weekly"
11+
12+
# branch - v2.x
313
- package-ecosystem: "maven"
414
directory: "/"
515
labels:
616
- "dependencies"
717
- "v2.x"
8-
schedule:
18+
target-branch: "v2.x"
19+
schedule:
920
interval: "weekly"
1021

1122
# branch - v1.x

amazon-kinesis-client-multilang/pom.xml

-30
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,6 @@
2727

2828
<artifactId>amazon-kinesis-client-multilang</artifactId>
2929

30-
<properties>
31-
<aws-java-sdk.version>1.12.668</aws-java-sdk.version>
32-
</properties>
33-
3430
<dependencies>
3531
<dependency>
3632
<groupId>software.amazon.kinesis</groupId>
@@ -43,32 +39,6 @@
4339
<version>${awssdk.version}</version>
4440
</dependency>
4541

46-
<dependency>
47-
<groupId>com.amazonaws</groupId>
48-
<artifactId>aws-java-sdk-core</artifactId>
49-
<version>${aws-java-sdk.version}</version>
50-
<exclusions>
51-
<exclusion>
52-
<groupId>com.fasterxml.jackson.core</groupId>
53-
<artifactId>jackson-databind</artifactId>
54-
</exclusion>
55-
<exclusion>
56-
<groupId>com.fasterxml.jackson.dataformat</groupId>
57-
<artifactId>jackson-dataformat-cbor</artifactId>
58-
</exclusion>
59-
<exclusion>
60-
<groupId>org.apache.httpcomponents</groupId>
61-
<artifactId>httpclient</artifactId>
62-
</exclusion>
63-
</exclusions>
64-
</dependency>
65-
66-
<dependency>
67-
<groupId>com.amazonaws</groupId>
68-
<artifactId>aws-java-sdk-sts</artifactId>
69-
<version>${aws-java-sdk.version}</version>
70-
</dependency>
71-
7242
<dependency>
7343
<groupId>org.projectlombok</groupId>
7444
<artifactId>lombok</artifactId>

amazon-kinesis-client-multilang/src/main/java/software/amazon/kinesis/multilang/MultiLangDaemon.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,10 @@
6161
* applicationName = PythonKCLSample
6262
*
6363
* # Users can change the credentials provider the KCL will use to retrieve credentials.
64-
* # The DefaultAWSCredentialsProviderChain checks several other providers, which is
64+
* # The DefaultCredentialsProvider checks several other providers, which is
6565
* # described here:
66-
* # http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/DefaultAWSCredentialsProviderChain.html
67-
* AWSCredentialsProvider = DefaultAWSCredentialsProviderChain
66+
* # https://sdk.amazonaws.com/java/api/2.0.0-preview-11/software/amazon/awssdk/auth/credentials/DefaultCredentialsProvider.html
67+
* AwsCredentialsProvider = DefaultCredentialsProvider
6868
* </pre>
6969
*/
7070
@Slf4j

amazon-kinesis-client-multilang/src/main/java/software/amazon/kinesis/multilang/NestedPropertyKey.java

+9-3
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@
1515
package software.amazon.kinesis.multilang;
1616

1717
import java.util.HashMap;
18+
import java.util.List;
1819
import java.util.Map;
1920

20-
import com.amazonaws.regions.Regions;
2121
import com.google.common.base.CaseFormat;
2222
import lombok.AccessLevel;
2323
import lombok.Getter;
2424
import lombok.extern.slf4j.Slf4j;
25+
import software.amazon.awssdk.regions.Region;
2526

2627
/**
2728
* Key-Value pairs which may be nested in, and extracted from, a property value
@@ -73,8 +74,13 @@ void visit(final NestedPropertyProcessor processor, final String endpoint) {
7374
* @see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-regions">Available Regions</a>
7475
*/
7576
ENDPOINT_REGION {
76-
void visit(final NestedPropertyProcessor processor, final String region) {
77-
processor.acceptEndpointRegion(Regions.fromName(region));
77+
void visit(final NestedPropertyProcessor processor, final String regionName) {
78+
List<Region> validRegions = Region.regions();
79+
Region region = Region.of(regionName);
80+
if (!validRegions.contains(region)) {
81+
throw new IllegalArgumentException("Invalid region name: " + regionName);
82+
}
83+
processor.acceptEndpointRegion(region);
7884
}
7985
},
8086

amazon-kinesis-client-multilang/src/main/java/software/amazon/kinesis/multilang/NestedPropertyProcessor.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
*/
1515
package software.amazon.kinesis.multilang;
1616

17-
import com.amazonaws.regions.Regions;
17+
import software.amazon.awssdk.regions.Region;
1818

1919
/**
2020
* Defines methods to process {@link NestedPropertyKey}s.
@@ -26,11 +26,11 @@ public interface NestedPropertyProcessor {
2626
*
2727
* @param serviceEndpoint the service endpoint either with or without the protocol
2828
* (e.g., https://sns.us-west-1.amazonaws.com, sns.us-west-1.amazonaws.com)
29-
* @param signingRegion the region to use for SigV4 signing of requests (e.g. us-west-1)
29+
* @param signingRegion the region to use for the client (e.g. us-west-1)
3030
*
31-
* @see #acceptEndpointRegion(Regions)
32-
* @see <a href="https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/client/builder/AwsClientBuilder.EndpointConfiguration.html">
33-
* AwsClientBuilder.EndpointConfiguration</a>
31+
* @see #acceptEndpointRegion(Region)
32+
* @see <a href="https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/client/builder/SdkClientBuilder.html#endpointOverride(java.net.URI)">
33+
* AwsClientBuilder.endpointOverride</a>
3434
*/
3535
void acceptEndpoint(String serviceEndpoint, String signingRegion);
3636

@@ -42,7 +42,7 @@ public interface NestedPropertyProcessor {
4242
*
4343
* @see #acceptEndpoint(String, String)
4444
*/
45-
void acceptEndpointRegion(Regions region);
45+
void acceptEndpointRegion(Region region);
4646

4747
/**
4848
* Set the external id, an optional field to designate who can assume an IAM role.

amazon-kinesis-client-multilang/src/main/java/software/amazon/kinesis/multilang/auth/KclSTSAssumeRoleSessionCredentialsProvider.java

-86
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/*
2+
* Copyright 2024 Amazon.com, Inc. or its affiliates.
3+
* Licensed under the Apache License, Version 2.0 (the
4+
* "License"); you may not use this file except in compliance
5+
* with the License. You may obtain a copy of the License at
6+
*
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
*
9+
* Unless required by applicable law or agreed to in writing, software
10+
* distributed under the License is distributed on an "AS IS" BASIS,
11+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
* See the License for the specific language governing permissions and
13+
* limitations under the License.
14+
*/
15+
package software.amazon.kinesis.multilang.auth;
16+
17+
import java.net.URI;
18+
import java.util.Arrays;
19+
20+
import software.amazon.awssdk.auth.credentials.AwsCredentials;
21+
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
22+
import software.amazon.awssdk.regions.Region;
23+
import software.amazon.awssdk.services.sts.StsClient;
24+
import software.amazon.awssdk.services.sts.StsClientBuilder;
25+
import software.amazon.awssdk.services.sts.auth.StsAssumeRoleCredentialsProvider;
26+
import software.amazon.awssdk.services.sts.model.AssumeRoleRequest;
27+
import software.amazon.awssdk.services.sts.model.AssumeRoleRequest.Builder;
28+
import software.amazon.kinesis.multilang.NestedPropertyKey;
29+
import software.amazon.kinesis.multilang.NestedPropertyProcessor;
30+
31+
public class KclStsAssumeRoleCredentialsProvider implements AwsCredentialsProvider, NestedPropertyProcessor {
32+
private final Builder assumeRoleRequestBuilder;
33+
private final StsClientBuilder stsClientBuilder;
34+
private final StsAssumeRoleCredentialsProvider stsAssumeRoleCredentialsProvider;
35+
36+
public KclStsAssumeRoleCredentialsProvider(String[] params) {
37+
this(params[0], params[1], Arrays.copyOfRange(params, 2, params.length));
38+
}
39+
40+
public KclStsAssumeRoleCredentialsProvider(String roleArn, String roleSessionName, String... params) {
41+
this.assumeRoleRequestBuilder =
42+
AssumeRoleRequest.builder().roleArn(roleArn).roleSessionName(roleSessionName);
43+
this.stsClientBuilder = StsClient.builder();
44+
NestedPropertyKey.parse(this, params);
45+
this.stsAssumeRoleCredentialsProvider = StsAssumeRoleCredentialsProvider.builder()
46+
.refreshRequest(assumeRoleRequestBuilder.build())
47+
.asyncCredentialUpdateEnabled(true)
48+
.stsClient(stsClientBuilder.build())
49+
.build();
50+
}
51+
52+
@Override
53+
public AwsCredentials resolveCredentials() {
54+
return stsAssumeRoleCredentialsProvider.resolveCredentials();
55+
}
56+
57+
@Override
58+
public void acceptEndpoint(String serviceEndpoint, String signingRegion) {
59+
if (!serviceEndpoint.startsWith("http://") && !serviceEndpoint.startsWith("https://")) {
60+
serviceEndpoint = "https://" + serviceEndpoint;
61+
}
62+
stsClientBuilder.endpointOverride(URI.create(serviceEndpoint));
63+
stsClientBuilder.region(Region.of(signingRegion));
64+
}
65+
66+
@Override
67+
public void acceptEndpointRegion(Region region) {
68+
stsClientBuilder.region(region);
69+
}
70+
71+
@Override
72+
public void acceptExternalId(String externalId) {
73+
assumeRoleRequestBuilder.externalId(externalId);
74+
}
75+
}

0 commit comments

Comments
 (0)