BREAKING: Overhaul of Endpoint Discovery features #1534
ianbotsf
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
An upcoming release of the AWS SDK for Kotlin will introduce improvements and fixes for Endpoint Discovery, which is required when using Amazon Timestream and optional when using Amazon DynamoDB. If you do not use either of these services, you are unaffected by these changes.
Release target
This overhaul is targeted to be included in the v1.5 release of the SDK. See the v1.5 announcment for more details and other important changes.
What's changing
The goal of this overhaul is to make Endpoint Discovery easier to configure, customize, and disable. To accomplish this, several aspects of Endpoint Discovery are changing:
ReadThroughCache
class are being relaxed to use the newExpiringKeyedCache
interface to allow fully custom cache implementationsReadThroughCache
is now provided in the newPeriodicSweepCache
class, which implements the newExpiringKeyedCache
interfaceaws.endpointDiscoveryEnabled
system property (JVM only)AWS_ENABLE_ENDPOINT_DISCOVERY
environment variableendpoint_discovery_enabled
profile keyHow to migrate
Migrating existing code using Endpoint Discovery may require no modifications if you do not customize discovery or use custom endpoints. Your code may require modifications in the following scenarios:
Specifying a custom endpoint discoverer
Previously, the Timestream and DynamoDB service clients provided an
endpointDiscoverer
configuration parameter. The type of this parameter was specific to the client. For instance, the Timestream Query client'sendpointDiscoverer
was of typeTimestreamQueryEndpointDiscoverer
. Unfortunately, this type was a non-open
class
meaning there was no easy way to provide a custom implementation.After this update, the client-specific parameter type is now an
interface
which may be fully implemented by users. The default implementation (e.g.,DefaultTimestreamQueryEndpointDiscoverer
) is recommended in most scenarios. If you wish to provide a custom implementation, you may do so by setting theendpointDiscoverer
parameter:See the client-specific interfaces (e.g.,
TimestreamQueryEndpointDiscoverer
) for more details about implementation.Specifying custom caching behavior
Previously, the default implementations of endpoint discoverers used an internal cache to avoid re-discovering endpoints for every new operation invocation, provided by the
ReadThroughCache
class. This meant there was no easy way to customize or replace caching behavior.After this update, the new
ExpiringKeyedCache
interface defines the semantics and requirements for caching while the newPeriodicSweepCache
class provides the oldReadThroughCache
implementation. The default caching behavior included in the default endpoint discoverers (e.g.,DefaultTimestreamQueryEndpointDiscoverer
) is recommended in most scenarios. If you wish to use custom caching behavior, you may do so by passing anExpiringKeyedCache
implementation to the default discoverer constructor:Customizing Endpoint Discovery with environmental configuration
Previously, the settings for Endpoint Discovery were controlled through explicitly-set parameters in client configuration because the AWS SDK for Kotlin did not support the standard environmental configuration sources used by other AWS SDKs. This made it difficult to universally configure Endpoint Discovery at a host level, file level, or in a multi-tenant environment.
After this update, Endpoint Discovery settings will be resolved from the following sources in descending priority:
endpointDiscoverer
(including viawithConfig
)aws.endpointDiscoveryEnabled
system property (Kotlin/JVM only)AWS_ENABLE_ENDPOINT_DISCOVERY
environment variableendpoint_discovery_enabled
profile keyA source will only be used if the higher-priority source(s) above it are not configured. For instance, the
aws.endpointDiscoveryEnabled
system property will be ignored ifendpointDiscoverer
is explicitly configured.Additional info
For more information about Endpoint Discovery, see the following resources:
DescribeEndpoints
operationDescribeEndpoints
operationDescribeEndpoints
operationFeedback
If you have any questions concerning this change, please feel free to engage with us in this discussion. If you encounter a bug with this change, please file an issue.
Beta Was this translation helpful? Give feedback.
All reactions