Slide 1

Slide 1 text

Sean Sullivan Portland Java User Group December 15, 2020 Java on AWS

Slide 2

Slide 2 text

This presentation reflects my personal opinion. It does not represent the views of my employer.

Slide 3

Slide 3 text

Java is fine 2020

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

which JDK should I use?

Slide 6

Slide 6 text

Oracle JDK Amazon Corretto

Slide 7

Slide 7 text

https://aws.amazon.com/corretto/

Slide 8

Slide 8 text

Corretto provided at no-cost multi-platform long-term support from Amazon released quarterly

Slide 9

Slide 9 text

Amazon runs Corretto internally on thousands of production services

Slide 10

Slide 10 text

Corretto is released under the same open source license as OpenJDK

Slide 11

Slide 11 text

https://github.com/corretto/corretto-jdk/

Slide 12

Slide 12 text

Corretto is covered on the same basis as all other supported AWS Services and software. Already have an AWS Support Plan?

Slide 13

Slide 13 text

JDK 8 JDK 11 JDK 15

Slide 14

Slide 14 text

Corretto is multi-platform Linux Windows MacOS

Slide 15

Slide 15 text

Corretto on Linux x86 ARM

Slide 16

Slide 16 text

https://twitter.com/errcraft/status/1177385675340959744 September 2019 Corretto on ARM64

Slide 17

Slide 17 text

Corretto Docker images

Slide 18

Slide 18 text

docker pull amazoncorretto:8 docker pull amazoncorretto:15 docker pull amazoncorretto:11

Slide 19

Slide 19 text

docker manifest inspect amazoncorretto:11

Slide 20

Slide 20 text

{ "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "size": 742, "digest": “sha256:9e612069601762761f296c13ecb8bca198f1821ab931fa6ca7e7db6fc644ef30 ", "platform": { "architecture": "amd64", "os": "linux" } } x86

Slide 21

Slide 21 text

{ "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "size": 742, "digest": “sha256:e71b5f2be284dfaa3a19cad2370600d1205fb0a41bbbe53dc530505c3ffc b1cb", "platform": { "architecture": "arm64", "os": "linux", "variant": "v8" } } ARM

Slide 22

Slide 22 text

docker run amazoncorretto:11 java -version openjdk version "11.0.9.1" 2020-11-04 LTS OpenJDK Runtime Environment Corretto-11.0.9.12.1 (build 11.0.9.1+12-LTS) OpenJDK 64-Bit Server VM Corretto-11.0.9.12.1 (build 11.0.9.1+12-LTS, mixed mode)

Slide 23

Slide 23 text

docker run amazoncorretto:11 uname -s -m Linux x86_64 x86

Slide 24

Slide 24 text

docker run arm64v8/amazoncorretto:11 java -version openjdk version "11.0.9.1" 2020-11-04 LTS OpenJDK Runtime Environment Corretto-11.0.9.12.1 (build 11.0.9.1+12-LTS) OpenJDK 64-Bit Server VM Corretto-11.0.9.12.1 (build 11.0.9.1+12-LTS, mixed mode)

Slide 25

Slide 25 text

docker run arm64v8/amazoncorretto:11 uname -s -m Linux aarch64 ARM 64

Slide 26

Slide 26 text

https://aws.amazon.com/ec2/graviton/

Slide 27

Slide 27 text

AWS re:Invent December 1, 2020

Slide 28

Slide 28 text

AWS Graviton

Slide 29

Slide 29 text

faster Java crypto?

Slide 30

Slide 30 text

https://github.com/corretto/amazon-corretto-crypto-provider

Slide 31

Slide 31 text

“algorithms are primarily backed by OpenSSL's implementations”

Slide 32

Slide 32 text

Maven pom.xml

Slide 33

Slide 33 text

com.amazon.corretto.crypto.provider.AmazonCorrettoCryptoProvider.install()

Slide 34

Slide 34 text

Infrastructure as Code?

Slide 35

Slide 35 text

Infrastructure as YAML Infrastructure as JSON Infrastructure as HCL

Slide 36

Slide 36 text

AWS CDK https://aws.amazon.com/cdk/

Slide 37

Slide 37 text

define your infrastructure in a familiar programming language

Slide 38

Slide 38 text

TypeScript Java C# Python CDK languages

Slide 39

Slide 39 text

writing YAML by hand AWS CDK

Slide 40

Slide 40 text

CDK is open source

Slide 41

Slide 41 text

npm install -g aws-cdk

Slide 42

Slide 42 text

cdk synth cdk deploy mkdir my-project cd my-project cdk init app --language java

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

Maven pom.xml

Slide 45

Slide 45 text

import software.amazon.awscdk.core.Construct; import software.amazon.awscdk.core.Duration; import software.amazon.awscdk.core.Stack; import software.amazon.awscdk.core.StackProps; CDK core classes

Slide 46

Slide 46 text

import software.amazon.awscdk.services.sns.Topic; import software.amazon.awscdk.services.sqs.Queue; import software.amazon.awscdk.services.lambda.Function; CDK Java imports

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

AWS SDK for Java

Slide 49

Slide 49 text

AWS SDK != AWS CDK

Slide 50

Slide 50 text

AWS SDK v1 AWS SDK v2

Slide 51

Slide 51 text

software.amazon.awssdk dynamodb 2.15.45 Maven pom.xml

Slide 52

Slide 52 text

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.ListTablesResponse; import software.amazon.awssdk.services.dynamodb.model.ListTablesRequest; Import statements

Slide 53

Slide 53 text

No content

Slide 54

Slide 54 text

Serverless Java?

Slide 55

Slide 55 text

AWS Lambda

Slide 56

Slide 56 text

AWS Lambda

Slide 57

Slide 57 text

Maven pom.xml

Slide 58

Slide 58 text

No content

Slide 59

Slide 59 text

public class Handler implements RequestHandler public String handleRequest(S3Event s3event, Context context) { // handle S3 event }

Slide 60

Slide 60 text

Lambda Powertools

Slide 61

Slide 61 text

Integration Tests

Slide 62

Slide 62 text

LocalStack

Slide 63

Slide 63 text

https://github.com/localstack/localstack

Slide 64

Slide 64 text

docker pull localstack/localstack

Slide 65

Slide 65 text

LocalStack + TestContainers

Slide 66

Slide 66 text

a Java library for embedding Docker containers

Slide 67

Slide 67 text

Maven pom.xml

Slide 68

Slide 68 text

TestContainers import org.testcontainers.utility.DockerImageName; import org.testcontainers.containers.localstack.LocalStackContainer; import static org.testcontainers.containers.localstack.LocalStackContainer.Service.S3; import static org.testcontainers.containers.localstack.LocalStackContainer.Service.SQS;

Slide 69

Slide 69 text

TestContainers DockerImageName IMAGE_NAME = DockerImageName.parse(“localstack/localstack:0.12.3") public static LocalStackContainer CONTAINER = new LocalStackContainer(IMAGE_NAME) .withServices(S3, SQS);

Slide 70

Slide 70 text

Final thoughts

Slide 71

Slide 71 text

Amazon Corretto Java on ARM64 Graviton2 instance types AWS CDK

Slide 72

Slide 72 text

Questions?

Slide 73

Slide 73 text

The End