Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS SDK for Java version 2 - NYJavaSIG 2019-11-21

99d4c0ed3c8027ea1c37b53d6441d042?s=47 sullis
November 21, 2019

AWS SDK for Java version 2 - NYJavaSIG 2019-11-21

AWS SDK for Java version 2.x
November 21, 2019




November 21, 2019


  1. Sean Sullivan November 21, 2019 NY JavaSIG AWS SDK for

    Java version 2.x
  2. software engineer Portland Oregon Java Scala About me

  3. Agenda SDK for Java 2.x SDK internals Migrating from v1

    to v2 Scala and SDK v2
  4. AWS SDK for Java

  5. SDK v2 announced June 2017 @awsforjava

  6. “Under the hood, we use an HTTP client built on

    top of Netty to make the non- blocking HTTP call” “first class support for non-blocking I/O in our async clients” source: AWS Developer Blog
  7. “The AWS SDK for Java 2.0 asynchronous client methods return

    CompletableFuture objects” source: SDK v2 Developer Guide
  8. import java.util.concurrent.CompletableFuture; DynamoDBAsyncClient client = DynamoDBAsyncClient.builder() .region(Region.US_WEST_2) .build(); CompletableFuture<ListTablesResponse> response

    = client.listTables(ListTablesRequest.builder().build()); CompletableFuture<List<String>> tableNames = response.thenApply(ListTablesResponse::tableNames); tableNames.whenComplete((tables, err) -> { if (tables != null) { tables.forEach(System.out::println); } else { err.printStackTrace(); } }); SDK v2
  9. Github projects aws-sdk-java aws-sdk-java-v2

  10. SDK v2

  11. Pull Request

  12. SDK v2 Maven artifacts

  13. https://search.maven.org/

  14. <dependency> <groupId>com.amazonaws<groupId> <artifactId>aws-java-sdk-dynamodb</artifactId> <version>1.11.679</version> </dependency> Maven dependencies SDK v1 <dependency>

    <groupId>software.amazon.awssdk<groupId> <artifactId>dynamodb</artifactId> <version>2.10.20</version> </dependency> SDK v2
  15. import com.amazonaws.services.cloudwatch.AmazonCloudWatchClient; import com.amazonaws.services.cloudwatch.AmazonCloudWatchClientBuilder; import com.amazonaws.services.cloudwatch.model.MetricDatum; import com.amazonaws.services.cloudwatch.model.PutMetricDataRequest; Java packages

    SDK v1 import software.amazon.awssdk.services.cloudwatch.CloudWatchAsyncClient; import software.amazon.awssdk.services.cloudwatch.model.MetricDatum; import software.amazon.awssdk.services.cloudwatch.model.PutMetricDataRequest; SDK v2
  16. distinct Maven artifact names distinct Java package names SDK v2

    and SDK v1 can co-exist in a Java application SDK v1 jar SDK v2 jar
  17. SDK v2 programming API • Immutable clients and models •

    Enhanced pagination • Smart configuration merging • Forward-compatible enums • Streaming operations as first-class concepts
  18. SDK internals

  19. <slf4j.version>1.7.28</slf4j.version> <jackson.version>2.10.0</jackson.version> <netty.version>4.1.42.Final</netty.version> Transitive dependencies

  20. “To provide SDK support for the many services that AWS

    owns, the AWS SDKs make extensive use of code generation” Code generation https://aws.amazon.com/blogs/developer/aws-sdk-for-java-2-x-released/
  21. Why code generation?

  22. less boilerplate more consistency Why code generation?

  23. class names parameter names method names exception names Consistency error

    handling logging JSON serialization network I/O
  24. AWS SDK for Java v2

  25. JavaPoet AWS SDK for Java v2

  26. Migrating code from v1 to v2

  27. aws-secretsmanager-caching-java

  28. https://github.com/aws/aws-secretsmanager-caching-java/

  29. “AWS Secrets Manager Java caching client enables in-process caching of

    secrets for Java applications” aws-secretsmanager-caching-java
  30. aws-secretsmanager-caching-java is based on AWS SDK v1

  31. https://github.com/aws/aws-secretsmanager-caching-java/issues/

  32. how to migrate aws-secretsmanager- caching-java from SDK v1 to SDK

    v2 ?
  33. https://github.com/ aws/aws- secretsmanager- caching-java/pull/6

  34. https://github.com/aws/aws-secretsmanager-caching-java/pull/6/files

  35. https://github.com/aws/aws-secretsmanager-caching-java/pull/6/files

  36. Scala and AWS SDK v2

  37. val awsSdkVersion = “2.10.20” "org.scala-lang.modules" %% "scala-java8-compat" % “0.9.0", "software.amazon.awssdk"

    % "cloudwatch" % awsSdkVersion, "software.amazon.awssdk" % "dynamodb" % awsSdkVersion build.sbt
  38. import scala.compat.java8.FutureConverters._ import scala.collection.JavaConverters._

  39. FutureConverters?

  40. java.util.concurrent.CompletableFuture scala.concurrent.Future

  41. FutureConverters.scala

  42. migrating a Scala library from AWS SDK v1 to v2

  43. “A tiny Scala wrapper around AWS CloudWatch Java client” gfc-aws-cloudwatch

  44. https://github.com/gilt/gfc-aws-cloudwatch

  45. https://github.com/ gilt/gfc-aws- cloudwatch/pull/8/ files

  46. None
  47. None
  48. Conclusion SDK v1 — production ready SDK v2 — production

    ready github.com/aws twitter.com/awsforjava
  49. The end

  50. None
  51. Bonus material

  52. “Hands-on in the AWS Java Ecosystem” AWS re:Invent 2018

  53. “Developing Applications on AWS in the JVM” AWS re:Invent 2017

  54. https://www.slideshare.net/AmazonWebServices/ dev205developing-applications-on-aws-in-the-jvm