Skip to content

Commit 78cd84a

Browse files
feat: provide client config property for region provider (#1488)
* feat: provide client config property for region provider * lint * change log * remove commented code * Trigger CI * address PR reviews * address PR reviews * address PR reviews * address pr reviews * add missing import * remove extra space * update smithy version * retrigger CI * address pr reviews * lint * modify comment * align smithy version * disable smithy version * update libs.versions.toml * retrigger CI * Trigger Build * Trigger Build * retrigger CI * update smithy codegen version * address pr review * lint * sync smithy-kotlin version --------- Co-authored-by: 0marperez <[email protected]>
1 parent bd6fff1 commit 78cd84a

File tree

21 files changed

+166
-174
lines changed

21 files changed

+166
-174
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"id": "05ac561b-963f-4953-bb4f-1fc19fc1207c",
3+
"type": "feature",
4+
"description": "Add `regionProvider` property to client config",
5+
"issues": [
6+
"awslabs/aws-sdk-kotlin#1478"
7+
]
8+
}

aws-runtime/aws-config/api/aws-config.api

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,27 @@ public abstract class aws/sdk/kotlin/runtime/config/AbstractAwsSdkClientFactory
244244
public static synthetic fun fromEnvironment$default (Laws/sdk/kotlin/runtime/config/AbstractAwsSdkClientFactory;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
245245
}
246246

247+
public abstract interface class aws/sdk/kotlin/runtime/config/AwsSdkClientConfig : aws/smithy/kotlin/runtime/client/SdkClientConfig {
248+
public abstract fun getApplicationId ()Ljava/lang/String;
249+
public abstract fun getRegion ()Ljava/lang/String;
250+
public abstract fun getRegionProvider ()Laws/smithy/kotlin/runtime/client/region/RegionProvider;
251+
public abstract fun getUseDualStack ()Z
252+
public abstract fun getUseFips ()Z
253+
}
254+
255+
public abstract interface class aws/sdk/kotlin/runtime/config/AwsSdkClientConfig$Builder {
256+
public abstract fun getApplicationId ()Ljava/lang/String;
257+
public abstract fun getRegion ()Ljava/lang/String;
258+
public abstract fun getRegionProvider ()Laws/smithy/kotlin/runtime/client/region/RegionProvider;
259+
public abstract fun getUseDualStack ()Ljava/lang/Boolean;
260+
public abstract fun getUseFips ()Ljava/lang/Boolean;
261+
public abstract fun setApplicationId (Ljava/lang/String;)V
262+
public abstract fun setRegion (Ljava/lang/String;)V
263+
public abstract fun setRegionProvider (Laws/smithy/kotlin/runtime/client/region/RegionProvider;)V
264+
public abstract fun setUseDualStack (Ljava/lang/Boolean;)V
265+
public abstract fun setUseFips (Ljava/lang/Boolean;)V
266+
}
267+
247268
public final class aws/sdk/kotlin/runtime/config/AwsSdkSetting {
248269
public static final field INSTANCE Laws/sdk/kotlin/runtime/config/AwsSdkSetting;
249270
public final fun getAwsAccessKeyId ()Laws/smithy/kotlin/runtime/config/EnvironmentSetting;
@@ -549,55 +570,43 @@ public final class aws/sdk/kotlin/runtime/config/useragent/ResolveUserAgentKt {
549570
public static synthetic fun resolveUserAgentAppId$default (Laws/smithy/kotlin/runtime/util/PlatformProvider;Laws/smithy/kotlin/runtime/util/LazyAsyncValue;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
550571
}
551572

552-
public final class aws/sdk/kotlin/runtime/region/DefaultRegionProviderChain : aws/sdk/kotlin/runtime/region/RegionProviderChain, aws/sdk/kotlin/runtime/region/RegionProvider, java/io/Closeable {
573+
public final class aws/sdk/kotlin/runtime/region/DefaultRegionProviderChain : aws/smithy/kotlin/runtime/client/region/RegionProviderChain, aws/smithy/kotlin/runtime/client/region/RegionProvider, java/io/Closeable {
553574
public fun <init> ()V
554575
public fun <init> (Laws/smithy/kotlin/runtime/util/PlatformProvider;Lkotlin/Lazy;Laws/smithy/kotlin/runtime/util/LazyAsyncValue;)V
555576
public synthetic fun <init> (Laws/smithy/kotlin/runtime/util/PlatformProvider;Lkotlin/Lazy;Laws/smithy/kotlin/runtime/util/LazyAsyncValue;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
556577
public fun close ()V
557578
}
558579

559-
public final class aws/sdk/kotlin/runtime/region/EnvironmentRegionProvider : aws/sdk/kotlin/runtime/region/RegionProvider {
580+
public final class aws/sdk/kotlin/runtime/region/EnvironmentRegionProvider : aws/smithy/kotlin/runtime/client/region/RegionProvider {
560581
public fun <init> ()V
561582
public fun <init> (Laws/smithy/kotlin/runtime/util/EnvironmentProvider;)V
562583
public synthetic fun <init> (Laws/smithy/kotlin/runtime/util/EnvironmentProvider;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
563584
public fun getRegion (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
564585
}
565586

566-
public final class aws/sdk/kotlin/runtime/region/ImdsRegionProvider : aws/sdk/kotlin/runtime/region/RegionProvider, java/io/Closeable {
587+
public final class aws/sdk/kotlin/runtime/region/ImdsRegionProvider : aws/smithy/kotlin/runtime/client/region/RegionProvider, java/io/Closeable {
567588
public fun <init> ()V
568589
public fun <init> (Lkotlin/Lazy;Laws/smithy/kotlin/runtime/util/PlatformEnvironProvider;)V
569590
public synthetic fun <init> (Lkotlin/Lazy;Laws/smithy/kotlin/runtime/util/PlatformEnvironProvider;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
570591
public fun close ()V
571592
public fun getRegion (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
572593
}
573594

574-
public final class aws/sdk/kotlin/runtime/region/JvmSystemPropRegionProvider : aws/sdk/kotlin/runtime/region/RegionProvider {
595+
public final class aws/sdk/kotlin/runtime/region/JvmSystemPropRegionProvider : aws/smithy/kotlin/runtime/client/region/RegionProvider {
575596
public fun <init> ()V
576597
public fun <init> (Laws/smithy/kotlin/runtime/util/PropertyProvider;)V
577598
public synthetic fun <init> (Laws/smithy/kotlin/runtime/util/PropertyProvider;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
578599
public fun getRegion (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
579600
}
580601

581-
public final class aws/sdk/kotlin/runtime/region/ProfileRegionProvider : aws/sdk/kotlin/runtime/region/RegionProvider {
602+
public final class aws/sdk/kotlin/runtime/region/ProfileRegionProvider : aws/smithy/kotlin/runtime/client/region/RegionProvider {
582603
public fun <init> ()V
583604
public fun <init> (Laws/smithy/kotlin/runtime/util/LazyAsyncValue;)V
584605
public synthetic fun <init> (Laws/smithy/kotlin/runtime/util/LazyAsyncValue;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
585606
public fun <init> (Ljava/lang/String;)V
586607
public fun getRegion (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
587608
}
588609

589-
public abstract interface class aws/sdk/kotlin/runtime/region/RegionProvider {
590-
public abstract fun getRegion (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
591-
}
592-
593-
public class aws/sdk/kotlin/runtime/region/RegionProviderChain : aws/sdk/kotlin/runtime/region/RegionProvider {
594-
public fun <init> (Ljava/util/List;)V
595-
public fun <init> ([Laws/sdk/kotlin/runtime/region/RegionProvider;)V
596-
protected final fun getProviders ()[Laws/sdk/kotlin/runtime/region/RegionProvider;
597-
public fun getRegion (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
598-
public fun toString ()Ljava/lang/String;
599-
}
600-
601610
public final class aws/sdk/kotlin/runtime/region/ResolveRegionKt {
602611
public static final fun resolveRegion (Laws/smithy/kotlin/runtime/util/PlatformProvider;Laws/smithy/kotlin/runtime/util/LazyAsyncValue;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
603612
public static synthetic fun resolveRegion$default (Laws/smithy/kotlin/runtime/util/PlatformProvider;Laws/smithy/kotlin/runtime/util/LazyAsyncValue;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;

aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/config/AbstractAwsSdkClientFactory.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
package aws.sdk.kotlin.runtime.config
77

8-
import aws.sdk.kotlin.runtime.client.AwsSdkClientConfig
98
import aws.sdk.kotlin.runtime.config.checksums.resolveRequestChecksumCalculation
109
import aws.sdk.kotlin.runtime.config.checksums.resolveResponseChecksumValidation
1110
import aws.sdk.kotlin.runtime.config.compression.resolveDisableRequestCompression
@@ -77,7 +76,7 @@ public abstract class AbstractAwsSdkClientFactory<
7776
block?.let(config::apply)
7877

7978
config.logMode = config.logMode ?: ClientSettings.LogMode.resolve(platform = platform)
80-
config.region = config.region ?: resolveRegion(profile = profile)
79+
config.region = config.region ?: config.regionProvider?.getRegion() ?: resolveRegion(profile = profile)
8180
config.useFips = config.useFips ?: resolveUseFips(profile = profile)
8281
config.useDualStack = config.useDualStack ?: resolveUseDualStack(profile = profile)
8382
config.applicationId = config.applicationId ?: resolveUserAgentAppId(platform, profile)

aws-runtime/aws-core/common/src/aws/sdk/kotlin/runtime/client/AwsSdkClientConfig.kt renamed to aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/config/AwsSdkClientConfig.kt

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6-
package aws.sdk.kotlin.runtime.client
6+
package aws.sdk.kotlin.runtime.config
77

88
import aws.smithy.kotlin.runtime.client.SdkClientConfig
9+
import aws.smithy.kotlin.runtime.client.region.RegionProvider
910

1011
/**
1112
* Base interface all generated AWS SDK Kotlin clients implement
@@ -14,11 +15,27 @@ public interface AwsSdkClientConfig : SdkClientConfig {
1415

1516
/**
1617
* The AWS region (e.g. `us-west-2`) to make requests to. See about AWS
17-
* [global infrastructure](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/) for more
18-
* information
18+
* [global infrastructure](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/) for more information.
19+
* When specified, this static region configuration takes precedence over other region resolution methods.
20+
*
21+
* The region resolution order is:
22+
* 1. Static region (if specified)
23+
* 2. Custom region provider (if configured)
24+
* 3. Default region provider chain
1925
*/
2026
public val region: String?
2127

28+
/**
29+
* An optional region provider that determines the AWS region for client operations. When specified, this provider
30+
* takes precedence over the default region provider chain, unless a static region is explicitly configured.
31+
*
32+
* The region resolution order is:
33+
* 1. Static region (if specified)
34+
* 2. Custom region provider (if configured)
35+
* 3. Default region provider chain
36+
*/
37+
public val regionProvider: RegionProvider
38+
2239
/**
2340
* Flag to toggle whether to use [FIPS](https://aws.amazon.com/compliance/fips/) endpoints when making requests.
2441
* Disabled by default.
@@ -49,11 +66,27 @@ public interface AwsSdkClientConfig : SdkClientConfig {
4966
public interface Builder {
5067
/**
5168
* The AWS region (e.g. `us-west-2`) to make requests to. See about AWS
52-
* [global infrastructure](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/) for more
53-
* information
69+
* [global infrastructure](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/) for more information.
70+
* When specified, this static region configuration takes precedence over other region resolution methods.
71+
*
72+
* The region resolution order is:
73+
* 1. Static region (if specified)
74+
* 2. Custom region provider (if configured)
75+
* 3. Default region provider chain
5476
*/
5577
public var region: String?
5678

79+
/**
80+
* An optional region provider that determines the AWS region for client operations. When specified, this provider
81+
* takes precedence over the default region provider chain, unless a static region is explicitly configured.
82+
*
83+
* The region resolution order is:
84+
* 1. Static region (if specified)
85+
* 2. Custom region provider (if configured)
86+
* 3. Default region provider chain
87+
*/
88+
public var regionProvider: RegionProvider?
89+
5790
/**
5891
* Flag to toggle whether to use [FIPS](https://aws.amazon.com/compliance/fips/) endpoints when making requests.
5992
* Disabled by default.

aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/region/DefaultRegionProviderChain.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import aws.sdk.kotlin.runtime.config.imds.ImdsClient
99
import aws.sdk.kotlin.runtime.config.imds.InstanceMetadataProvider
1010
import aws.sdk.kotlin.runtime.config.profile.AwsProfile
1111
import aws.sdk.kotlin.runtime.config.profile.loadAwsSharedConfig
12+
import aws.smithy.kotlin.runtime.client.region.RegionProvider
1213
import aws.smithy.kotlin.runtime.io.Closeable
1314
import aws.smithy.kotlin.runtime.util.LazyAsyncValue
1415
import aws.smithy.kotlin.runtime.util.PlatformProvider

aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/region/EnvironmentRegionProvider.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package aws.sdk.kotlin.runtime.region
77

88
import aws.sdk.kotlin.runtime.config.AwsSdkSetting
9+
import aws.smithy.kotlin.runtime.client.region.RegionProvider
910
import aws.smithy.kotlin.runtime.util.EnvironmentProvider
1011
import aws.smithy.kotlin.runtime.util.PlatformProvider
1112

aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/region/ImdsRegionProvider.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ package aws.sdk.kotlin.runtime.region
88
import aws.sdk.kotlin.runtime.config.AwsSdkSetting
99
import aws.sdk.kotlin.runtime.config.imds.ImdsClient
1010
import aws.sdk.kotlin.runtime.config.imds.InstanceMetadataProvider
11+
import aws.smithy.kotlin.runtime.client.region.RegionProvider
1112
import aws.smithy.kotlin.runtime.config.resolve
1213
import aws.smithy.kotlin.runtime.io.Closeable
1314
import aws.smithy.kotlin.runtime.util.PlatformEnvironProvider

aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/region/ProfileRegionProvider.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ package aws.sdk.kotlin.runtime.region
88
import aws.sdk.kotlin.runtime.config.profile.AwsProfile
99
import aws.sdk.kotlin.runtime.config.profile.loadAwsSharedConfig
1010
import aws.sdk.kotlin.runtime.config.profile.region
11+
import aws.smithy.kotlin.runtime.client.region.RegionProvider
1112
import aws.smithy.kotlin.runtime.util.LazyAsyncValue
1213
import aws.smithy.kotlin.runtime.util.PlatformProvider
1314
import aws.smithy.kotlin.runtime.util.asyncLazy

aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/region/RegionProvider.kt

Lines changed: 0 additions & 17 deletions
This file was deleted.

aws-runtime/aws-config/common/src/aws/sdk/kotlin/runtime/region/RegionProviderChain.kt

Lines changed: 0 additions & 52 deletions
This file was deleted.

0 commit comments

Comments
 (0)