Giter VIP home page Giter VIP logo

aws-sdk-java-v2's Introduction

AWS SDK for Java 2.0

Build Status Maven Gitter codecov

All Contributors

The AWS SDK for Java 2.0 is a rewrite of 1.0 with some great new features. As with version 1.0, it enables you to easily work with Amazon Web Services but also includes features like non-blocking IO and pluggable HTTP implementation to further customize your applications. You can get started in minutes using Maven or any build system that supports MavenCentral as an artifact source.

Getting Started

Sign up for AWS

Before you begin, you need an AWS account. Please see the Sign Up for AWS section of the developer guide for information about how to create an AWS account and retrieve your AWS credentials.

Minimum requirements

To run the SDK you will need Java 1.8+. For more information about the requirements and optimum settings for the SDK, please see the Installing a Java Development Environment section of the developer guide.

Using the SDK

The recommended way to use the AWS SDK for Java in your project is to consume it from Maven Central.

Importing the BOM

To automatically manage module versions (currently all modules have the same version, but this may not always be the case) we recommend you use the Bill of Materials import as follows:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>bom</artifactId>
      <version>2.25.45</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

Then individual modules may omit the version from their dependency statement:

<dependencies>
  <dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>ec2</artifactId>
  </dependency>
  <dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>s3</artifactId>
  </dependency>
  <dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>dynamodb</artifactId>
  </dependency>
</dependencies>

Individual Services

Alternatively you can add dependencies for the specific services you use only:

<dependency>
  <groupId>software.amazon.awssdk</groupId>
  <artifactId>ec2</artifactId>
  <version>2.25.45</version>
</dependency>
<dependency>
  <groupId>software.amazon.awssdk</groupId>
  <artifactId>s3</artifactId>
  <version>2.25.45</version>
</dependency>

Whole SDK

You can import the whole SDK into your project (includes ALL services). Please note that it is recommended to only import the modules you need.

<dependency>
  <groupId>software.amazon.awssdk</groupId>
  <artifactId>aws-sdk-java</artifactId>
  <version>2.25.45</version>
</dependency>

See the Set up the AWS SDK for Java section of the developer guide for more usage information.

New Features for 2.0

  • Provides a way to plug in your own HTTP implementation.

  • Provides first class support for non-blocking IO in Async clients.

Building From Source

Once you check out the code from GitHub, you can build it using the following commands.

Linux:

./mvnw clean install

# Skip tests, checkstyles, findbugs, etc for quick build
./mvnw clean install -P quick

# Build a specific service module
./mvnw clean install -pl :s3 -P quick --am

Windows:

./mvnw.cmd clean install

Sample Code

You can find sample code for v2 in the following places:

Maintenance and Support for SDK Major Versions

For information about maintenance and support for SDK major versions and their underlying dependencies, see the following in the AWS SDKs and Tools Reference Guide:

Maintenance and Support for Java Versions

We maintain full support on Long-Term Support(LTS) releases: Java 8, Java 11, Java 17, and Java 21.

Giving Feedback

We need your help in making this SDK great. Please participate in the community and contribute to this effort by submitting issues, participating in discussion forums and submitting pull requests through the following channels:

  • Submit issues - this is the preferred channel to interact with our team
  • Articulate your feature request or upvote existing ones on our Issues page

Contributors ✨

Thanks goes to these wonderful people (emoji key):

sullis
sullis

πŸ’»
Austin Brooks
Austin Brooks

πŸ’»
Konrad `ktoso` Malawski
Konrad `ktoso` Malawski

πŸ’»
Andrew Hopkins
Andrew Hopkins

πŸ’»
Adam Thomas
Adam Thomas

πŸ’»
Steven Swor
Steven Swor

πŸ’»
Carey Burgess
Carey Burgess

πŸ’»
Anuraag Agrawal
Anuraag Agrawal

πŸ’»
jeffalder
jeffalder

πŸ’»
Boris
Boris

πŸ’»
Guillaume CorrΓ©
Guillaume CorrΓ©

πŸ’»
Henri Yandell
Henri Yandell

πŸ’»
Ryan Schmitt
Ryan Schmitt

πŸ’»
Somaya
Somaya

πŸ’»
Steven Aerts
Steven Aerts

πŸ’»
Steven Wong
Steven Wong

πŸ’»
Tomasz Elendt
Tomasz Elendt

πŸ’»
Will Erickson
Will Erickson

πŸ’»
Julien Hoarau
Julien Hoarau

πŸ’»
SEOKHYOENCHOI
SEOKHYOENCHOI

πŸ’»
adriannistor
adriannistor

πŸ’»
Xian Sun
Xian Sun

πŸ’»
Andreas Scheja
Andreas Scheja

πŸ’»
Anton Egorov
Anton Egorov

πŸ’»
roexber
roexber

πŸ’»
brharrington
brharrington

πŸ’»
Christopher Radek
Christopher Radek

πŸ’»
Foivos
Foivos

πŸ’»
Frank Wesemann
Frank Wesemann

πŸ’»
Gergely Varga
Gergely Varga

πŸ’»
Guillermo
Guillermo

πŸ’»
Henry Heikkinen
Henry Heikkinen

πŸ’»
Jochen Schalanda
Jochen Schalanda

πŸ’»
Joe Barnett
Joe Barnett

πŸ’»
Kazuhiro Sera
Kazuhiro Sera

πŸ’»
Krishna Chaithanya Ganta
Krishna Chaithanya Ganta

πŸ’»
Lee Packham
Lee Packham

πŸ’»
Matteo Carrara
Matteo Carrara

πŸ’»
Michael Scharp
Michael Scharp

πŸ’»
Miguel Jimenez
Miguel Jimenez

πŸ’»
Russell Bolles
Russell Bolles

πŸ’»
Russell Scheerer
Russell Scheerer

πŸ’»
Scott
Scott

πŸ’»
Shin'ya Ueoka
Shin'ya Ueoka

πŸ’»
sushilamazon
sushilamazon

πŸ’»
tomliu4uber
tomliu4uber

πŸ’»
Vladimir Orany
Vladimir Orany

πŸ’»
Xinyu Hu
Xinyu Hu

πŸ’»
Yosef Fertel
Yosef Fertel

πŸ’»
Denys Konakhevych
Denys Konakhevych

πŸ’»
Alex Weibel
Alex Weibel

πŸ’»
Ryan Carper
Ryan Carper

πŸ’»
Jonathan M. Henson
Jonathan M. Henson

πŸ’»
Debora N. Ito
Debora N. Ito

πŸ’»
Bret Ambrose
Bret Ambrose

πŸ’»
Anna-Karin Salander
Anna-Karin Salander

πŸ’»
John Viegas
John Viegas

πŸ’»
Dongie Agnir
Dongie Agnir

πŸ’»
Matthew Miller
Matthew Miller

πŸ’»
Benjamin Maizels
Benjamin Maizels

πŸ’»
Quan Zhou
Quan Zhou

πŸ’»
Zoe Wang
Zoe Wang

πŸ’»
Varun Nandi
Varun Nandi

πŸ’»
Andrew Shore
Andrew Shore

πŸ’»
Kyle Thomson
Kyle Thomson

πŸ’»
Sam Fink
Sam Fink

πŸ’»
Jonathan Bond
Jonathan Bond

πŸ’»
ajs139
ajs139

πŸ’»
Dewey Nguyen
Dewey Nguyen

πŸ’»
David Leen
David Leen

πŸ’»
Michael Li
Michael Li

πŸ’»
Bennett Lynch
Bennett Lynch

πŸ’»
Ikko Ashimine
Ikko Ashimine

πŸ“–
Jamie Liu
Jamie Liu

πŸ“–
guillepb10
guillepb10

πŸ’»
Lorenz Nickel
Lorenz Nickel

πŸ“–
Erin Yang
Erin Yang

πŸ’»
Roberto Tyley
Roberto Tyley

πŸ’»
Alvin See
Alvin See

πŸ’»
ron1
ron1

πŸ’»
Sai Kumar Reddy Chandupatla
Sai Kumar Reddy Chandupatla

πŸ’»
David Ho
David Ho

πŸ’»
Thomas Turrell-Croft
Thomas Turrell-Croft

πŸ’»
Steven Shan
Steven Shan

πŸ’»
Barry O'Neill
Barry O'Neill

πŸ’»
Andy Kiesler
Andy Kiesler

πŸ’»
Martin
Martin

πŸ’»
Paulo Lieuthier
Paulo Lieuthier

πŸ’»
SΓ©bastien Crocquesel
SΓ©bastien Crocquesel

πŸ’»
David Negrete
David Negrete

πŸ’»
Stephen Flavin
Stephen Flavin

πŸ’»
Olivier L Applin
Olivier L Applin

πŸ’»
Adrian Chlebosz
Adrian Chlebosz

πŸ’»
Chad Wilson
Chad Wilson

πŸ’»
Manish Dait
Manish Dait

πŸ“–
Dennis Kieselhorst
Dennis Kieselhorst

πŸ’»
Nilesh PS
Nilesh PS

πŸ’»
Steven Swartz
Steven Swartz

πŸ’»
Michael Dimchuk
Michael Dimchuk

πŸ’»
Nikita Sokolov
Nikita Sokolov

πŸ’»
Manuel Sugawara
Manuel Sugawara

πŸ’»
Anirudh
Anirudh

πŸ’»
Hayden Baker
Hayden Baker

πŸ’»
Jaykumar Gosar
Jaykumar Gosar

πŸ’»
Michael Graeb
Michael Graeb

πŸ’»
Michael Grundie
Michael Grundie

πŸ’»
Eckard MΓΌhlich
Eckard MΓΌhlich

πŸ’»

This project follows the all-contributors specification. Contributions of any kind welcome!

aws-sdk-java-v2's People

Contributors

adamthom-amzn avatar alexw91 avatar allcontributors[bot] avatar andrewhop avatar aws-sdk-java-automation avatar bennett-lynch avatar bmaizels avatar bretambrose avatar cenedhryn avatar dagnir avatar dave-fn avatar davidh44 avatar debora-ito avatar dependabot[bot] avatar gosar avatar haydenbaker avatar jonathanhenson avatar joviegas avatar kiiadi avatar ktoso avatar l-applin avatar millems avatar quanzzzz avatar rccarper avatar shorea avatar spfink avatar sugmanue avatar sullis avatar varunnvs92 avatar zoewangg avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

aws-sdk-java-v2's Issues

Don't use the context class loader when loading HTTP implementations

We are relying on the context class loader (the class loader for the current thread) when loading the HTTP implementations. https://github.com/aws/aws-sdk-java-v2/blob/master/core/src/main/java/software/amazon/awssdk/http/loader/SdkServiceLoader.java#L29

We should instead use the class loader that loaded the SDK to preserve the semantics of ordinary classloading.

ServiceLoader.load(clzz, SdkServiceLoader.class.getClassLoader()) 

Request-Level Configuration Overrides

Some pieces of configuration are supported per-request (eg. read timeouts), but currently can only be specified at the client level. It would be useful to be able to override these configurations on a per-request basis when certain requests require different timeouts.

Progress Listeners

Review the inherited state of V1 progress listeners and determine which changes are necessary for V2.

(Feel free to comment on this issue with desired changes).

Remove AWS-specific code from the "core" module

Clients generated for API gateway customers use the "core" module for transmission and other pieces of core functionality. This means that such clients also pull in AWS-specific functionality, like credential providers, regions, etc.

These AWS-specific pieces of functionality should be moved to a separate "aws-core" module that depends on "core" so that API gateway clients do not need to include them.

EC2 Metadata Client

Since all access to EC2MetadataUtils is static, the class is very difficult to use in a properly tested application. It can't be mocked; you can't give canned answers when running in a non-EC2 environment.

If there were an EC2Metadata interface or abstract class of which there were a default implementation, then it would be easier to use.

A contrived example:

public class Application {
    EC2Metadata metadata;
    public static void main(String args[]) {
        new Application(EC2MetadataUtils.getDefaultInstance());
    }
    public Application(EC2Metadata metadata) {
        this.metadata = metadata;
        LOG.info("We're running on " + metadata.getInstanceId());
    }
}

public class ApplicationTest {
    @Mock EC2Metadata metadata;
    @Test public testApp() {
        when(metadata.getDefaultInstance()).then(return "i-fakeinstance");
        new Application(metadata);
        verifyLoggedLine("We're running on i-fakeinstance");
    }
}

As it stands today, I need to run a whole HTTP process that mimics the metadata server and somehow get the system property to point to it; and even that is a global setting for the whole JVM: parallel tests can interfere with each other. Or I can write my own EC2Metadata interface and use it throughout my app, but it's not something each developer should have to do.

S3 200 Retries

In some cases, S3 will return an HTTP 200, but will request that the request be retried in the message payload. These cases should be automatically retried by the SDK.

OSGI Bundle

Make sure we play nice with the module systems in OSGI and Java9 (especially our detection of the default HTTP implementation). Ensure that we can provide modularized service clients to OSGI environments instead of a single uber jar containing the entire SDK.

Remove Joda-time dependency

The 2.0.x SDK has inherited the 1.11.x dependency on joda-time. The SDK should be updated to use Java 8 time features so that we can remove the dependency on joda-time.

Remove Python build dependency

We currently need Python and the jmespath package to generate waiters. We should remove the dependency by using a Jmespath library built for Java (either our own or a 3rd party).

Refactor: Profile File Support

Review the inherited state of V1 profile file support and determine which changes are necessary for V2.

(Feel free to comment on this issue with desired changes).

Automatic Sync Depagination

Customers are currently required to iterate over paginated result sets themselves in almost all locations by making extra service calls to retrieve more results if they're loading large sets of results.

We currently provide depaginators for S3 (S3Objects) and DynamoDBMapper results (PaginatedList), but these patterns are applied inconsistently across the code base.

Provide general-purpose List-view methods for traversing and accessing full result sets without having to make multiple service calls manually or loading the full result set in memory at one time.

Used a named thread factory for the EventLoop threads

As a user of the SDK, having a formal name for the EventLoop threads, will make it easier to debug and troubleshoot production issues.

For example, a named thread pool is easier to find in a thread dump or while doing some CPU profiling.

Threads could be named something like:
"AWS-SDK-EventLoopThread-<GroupNumber>-<WorkerNumber>".

GroupNumber is the EventLoopGroup number. Typically most clients will have one instance of the AWS SDK instantiated per JVM and this will always be 1. For some reason, they do spin up multiple, having different GroupNumber will avoid thread name collisions.

WorkerNumber is the thread number within an EventLoopGroup.

Avoid null in return values

The new v2 API looks to be following most of the recommendations for good Java APIs, which is great. One key thing I've not seen mentioned however is the use of null.

Ideally, no method in the SDK should return null. The Optional class should be used instead. This includes POJOs as well as key classes like AmazonS3.

If this proves to be too big a change, at least the key classes like AmazonS3 should never return null.

This particularly affects cases where a remote call is made and the target is not found, eg row not found in Dynamo. At present, some services return null while others throw an exception, and this is often not well documented. A consistent use of Optional for missing data (or a consistent use of exceptions) would be desirable.

Move internal classes to "internal" package

It isn't obvious without looking for an SdkInternal annotation (that may not even be there) which classes are internal to the SDK. If internal classes were moved to an package with "internal" in the name, this would make it more obvious what should be used by customers. It will also simplify things during Java 9 modularization.

EC2 Dry-Runs

In 1.11.x, customers can execute certain EC2 requests as a "dry-run" request. This adds a special header to tell EC2 to not actually execute the request.

Support for this feature should be added in 2.0.

Refactor: Exceptions

Review the inherited state of V1 exceptions and determine whether any changes are necessary for V2.

(Feel free to comment on this issue with desired changes).

Execution and Request timeouts

Execution and request timeouts are currently exposed on the client configuration override object, but don't actually work. This functionality should be fixed.

Refactor: Retry Policies

Review the inherited state of V1 retry policies and determine whether any changes are necessary for V2.

(Feel free to comment on this issue with desired changes).

Waiters

Review the inherited state of V1 waiters and determine which changes are necessary for V2.

(Feel free to comment on this issue with desired changes).

API Gateway Client Generation

Support for API gateway client generation isn't yet supported for 2.0.x-style SDKs. The 2.0.x should be able to support generating API gateway clients, especially because it is planned to support such clients in a more straight-forward way than 1.11.x.

S3: Copy Object Tagging Simplification

The S3 models treat tags inconsistently and unintuitively between APIs, which makes it difficult to copy values between APIs or specify tags on requests (how do you format the String tagging field on a PutObjectRequest?)

Add a customization to the generated S3 models to make this more consistent and intuitive.

Profile File Writers

The credential file parsing is currently public, as well as the writer. The location of these files is marked as internal though. We should look into making the parser able to write updated credentials back to the file.

URL-Based Sync HTTP Implementation

For customers that are willing to (or have to) trade functionality for reduced dependencies, we should provide an HTTP implementation that uses native Java libraries for transmission instead of Apache.

HTTP Pipelining

For some AWS APIs, customers may wish to execute multiple concurrent requests over a single connection without relying on the service having implemented a "batch" version of the API. An API could be provided to execute multiple "pipelinable" requests over a single connection if the HTTP client supports it.

Support immutable classes in DynamoDbMapper

DynamoDbMapper requires all mapped classes to be mutable. Immutable domain objects are increasingly the norm in Java, and using DynamoDbMapper means creating mutable duplicates of all domain objects or giving up on the benefits of immutability.

Step Functions DSL

The step functions DSL is relatively new, so it shouldn't need major changes, but we should still review its current state and determine which changes are necessary for V2.

(Feel free to comment on this issue with desired changes).

default user agent is illegal

The default user-agent format will reader aws-sdk-java/2.0.0-preview-1 Linux/4.9.37-1-lts Java_HotSpot(TM)_64-Bit_Server_VM/25.131-b11/1.8.0_131 scala/2.12.2 on my machine. According to rfc 7231 this is illegal. The part Java_HotSpot(TM)_64-Bit_Server_VM/25.131-b11/1.8.0_131 contrains two versions and the product name contains ().

Background: I'm implementing a async http client using akka-http, which implement parsers according to the RFCs. This might not be an issue in the past but since using a different http client is a feature now, everything being passed to/from the http client should be rfc compliant.

Cross-Region S3 Client

The 1.11.x S3 client automatically routed requests to the correct bucket region in a complicated manner. The 2.0.x client does not perform this automatic re-routing.

We should create a wrapper to pool S3 clients for different regions and automatically route requests to the region in which the bucket was created.

Dynamo DB Mapper

Review the inherited state of V1 Dynamo DB mapper support and determine which changes are necessary for V2.

(Feel free to comment on this issue with desired changes).

cloudsearch brings in very old jetty libraries transitively

$ mvn dependency:tree
+- software.amazon.awssdk:aws-sdk-java:jar:2.0.0-preview-1:compile
|  +- software.amazon.awssdk:cloudsearch:jar:2.0.0-preview-1:compile
|  |  \- com.github.tomakehurst:wiremock:jar:1.55:compile
|  |     +- org.mortbay.jetty:jetty:jar:6.1.26:compile
|  |     |  +- org.mortbay.jetty:jetty-util:jar:6.1.26:compile
|  |     |  \- org.mortbay.jetty:servlet-api:jar:2.5-20081211:compile

The org.mortbay classes (especially the servlet-api.jar) are very old versions of the servlet api that (in my case at least) ended up shadowing the modern servlet api, meaning my server wouldn't work after I added the aws-sdk-java dependency.

I can probably exclude things to make it work, but it seems like cloudsearch shouldn't bring in wiremock at all, let alone letting it bring in an ancient version of jetty.

Browsing the code I don't see anywhere wiremock is used by the cloudsearch jar.

It failed with this stack trace in a dropwizard server:

WARN  [2017-07-11 20:49:36,099] org.eclipse.jetty.server.HttpChannel: /swagger.json
! java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.getStatus()I
! at com.codahale.metrics.jetty9.InstrumentedHandler.updateResponses(InstrumentedHandler.java:289)
! at com.codahale.metrics.jetty9.InstrumentedHandler.handle(InstrumentedHandler.java:252)
! at io.dropwizard.jetty.ContextRoutingHandler.handle(ContextRoutingHandler.java:38)
! at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:561)
! at io.dropwizard.jetty.BiDiGzipHandler.handle(BiDiGzipHandler.java:68)
! at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:56)
! at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:169)
! at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
! at org.eclipse.jetty.server.Server.handle(Server.java:564)
! at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:320)
! at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251)
! at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279)
! at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:110)
! at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124)
! at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:672)
! at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:590)
! at java.lang.Thread.run(Thread.java:745)

Improve SDK cold-start latency

With the rise of serverless frameworks, library's cold-start latency has become increasingly important to minimize. Libraries that rely heavily on reflection, class-path scanning, needlessly-large thread pools, etc. greatly increase the time it takes to get a lambda JVM to a state that it can process requests.

Cold-start latency of the SDK should be benchmarked and expensive libraries (I'm looking at you, Jackson databind) should be moved out of the critical startup path.

IAM Policy Builder

The IAM policy builder includes some hacks and changes, like removing dashes from account IDs, that could be considered unintuitive.

Review the inherited state of the V1 IAM policy builder and determine which changes are necessary for V2.

(Feel free to comment on this issue with desired changes).

Allow users to configure NioEventLoop thread pool size

As a user of the AWS SDK, I want to be able to configure the number of threads used assigned to the EventLoopGroup.

Currently, this is not configurable and the library relies on Netty to pick the number of threads. Netty defaults to 2 * number of cores, as the thread pool size: https://github.com/netty/netty/blob/4.1/transport/src/main/java/io/netty/channel/MultithreadEventLoopGroup.java#L40-L41

While this is good for most users, some users would want to configure this based on application requirements and available resources on client's host.

Client-Side Encryption

Client-side encryption and signing is supported by the S3 and dynamo DB clients in 1.11.x, but not in 2.0.x. This feature is used by a large number of customers and should be supported in 2.0.x.

4/6/23 Update: The AWS crypto tools team has launched the S3 encryption client with support for the AWS SDK for Java 2.x! Check it out here:

11/17/23 Update: A new Database Encryption client was launched with support for the AWS SDK for Java 2.x, and it's also maintained by the AWS Crypto Tools team. For more info:

Refactor: Signers

Review the inherited state of V1 signers and determine which changes are necessary for V2.

(Feel free to comment on this issue with desired changes).

Refactor: Marshallers and Unmarshallers

Review the inherited state of V1 marshallers and unmarshallers and determine which changes are necessary for V2. In particular, they'll need to be migrated to be generated by poet instead of freemarker.

(Feel free to comment on this issue with desired changes).

Metrics

Review the inherited state of V1 metrics and determine which changes are necessary for V2.

(Feel free to comment on this issue with desired changes).

DynamoDB Document API

Review the inherited state of V1 Dynamo DB document API and determine which changes are necessary for V2.

(Feel free to comment on this issue with desired changes).

Consider using jackson-modules-java8 instead of build serialization

One of the most controversial things in blog post is a serialization that should be done by using builders

String serialized = mapper.writeValueAsString(request.toBuilder());

ListTablesRequest deserialized = mapper.readValue(serialized, ListTablesRequest.serializableBuilderClass())
                                       .build()

As you already set java 8 as a baseline and use jackson as a serialization library, why not use https://github.com/FasterXML/jackson-modules-java8 that will give you correct immutable object creation with constructor without extra manual step?

Refactor: Request Handlers

Request handlers have become particularly messy in 1.11.x. There are multiple versions of request handlers and none are feature complete enough to support features that make sense to be implemented as request handlers, like metrics, signing and encryption. This makes add-on features like the API gateway clients require more significant changes in the core than could usually be required.

Update the request handler abstraction to support the expected current and future use-cases.

(Feel free to comment on this issue with desired changes).

Remove AmazonWebServiceRequest as base model

All model objects currently extend AmazonWebServiceRequest, which includes a large number of deprecated 1.11.x concepts. This base class should be removed or replaced to clean up the contents of our model objects.

Polling Event Consumer (SQS, DynamoDB Streams)

Customers are currently required to manually poll an SQS queue for data. An event-driven SQS consumer should be provided that handles this polling so that customers can just focus on processing messages.

Transfer Manager

Review the inherited state of the V1 transfer manager and determine which changes are necessary for V2.

(Feel free to comment on this issue with desired changes).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.