Portland Java User Group meetup December 15, 2020 Portland Oregon
Topics covered: - Amazon Corretto - AWS CDK - AWS SDK - AWS Lambda - TestContainers and LocalStack
Sean SullivanPortland Java User GroupDecember 15, 2020Java on AWS
View Slide
This presentation reflectsmy personal opinion.It does not representthe views of my employer.
Java is fine2020
which JDK should I use?
Oracle JDKAmazonCorretto
https://aws.amazon.com/corretto/
Correttoprovided at no-costmulti-platformlong-term support from Amazonreleased quarterly
Amazon runs Correttointernally on thousands ofproduction services
Corretto is releasedunder the sameopen source licenseas OpenJDK
https://github.com/corretto/corretto-jdk/
Corretto is covered on the samebasis as all other supportedAWS Services and software.Already have an AWS Support Plan?
JDK 8JDK 11JDK 15
Corretto is multi-platformLinuxWindowsMacOS
Corretto on Linuxx86ARM
https://twitter.com/errcraft/status/1177385675340959744September 2019Corretto on ARM64
Corretto Docker images
docker pull amazoncorretto:8docker pull amazoncorretto:15docker pull amazoncorretto:11
docker manifest inspect amazoncorretto:11
{"mediaType": "application/vnd.docker.distribution.manifest.v2+json","size": 742,"digest":“sha256:9e612069601762761f296c13ecb8bca198f1821ab931fa6ca7e7db6fc644ef30","platform": {"architecture": "amd64","os": "linux"}}x86
{"mediaType": "application/vnd.docker.distribution.manifest.v2+json","size": 742,"digest":“sha256:e71b5f2be284dfaa3a19cad2370600d1205fb0a41bbbe53dc530505c3ffcb1cb","platform": {"architecture": "arm64","os": "linux","variant": "v8"}}ARM
docker run amazoncorretto:11 java -versionopenjdk version "11.0.9.1" 2020-11-04 LTSOpenJDK 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)
docker run amazoncorretto:11 uname -s -mLinux x86_64 x86
docker run arm64v8/amazoncorretto:11 java -versionopenjdk version "11.0.9.1" 2020-11-04 LTSOpenJDK 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)
docker run arm64v8/amazoncorretto:11 uname -s -mLinux aarch64 ARM 64
https://aws.amazon.com/ec2/graviton/
AWS re:InventDecember 1, 2020
AWS Graviton
faster Java crypto?
https://github.com/corretto/amazon-corretto-crypto-provider
“algorithms are primarilybacked by OpenSSL'simplementations”
Maven pom.xml
com.amazon.corretto.crypto.provider.AmazonCorrettoCryptoProvider.install()
Infrastructure as Code?
Infrastructure as YAMLInfrastructure as JSONInfrastructure as HCL
AWS CDKhttps://aws.amazon.com/cdk/
define your infrastructurein a familiarprogramming language
TypeScriptJavaC#PythonCDK languages
writingYAMLby handAWS CDK
CDK is open source
npm install -g aws-cdk
cdk synthcdk deploymkdir my-projectcd my-projectcdk init app --language java
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
import software.amazon.awscdk.services.sns.Topic;import software.amazon.awscdk.services.sqs.Queue;import software.amazon.awscdk.services.lambda.Function;CDK Java imports
AWS SDK for Java
AWS SDK != AWS CDK
AWS SDK v1AWS SDK v2
software.amazon.awssdkdynamodb2.15.45Maven pom.xml
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
Serverless Java?
AWS Lambda
public class Handler implements RequestHandlerpublic String handleRequest(S3Event s3event, Context context) {// handle S3 event}
Lambda Powertools
Integration Tests
LocalStack
https://github.com/localstack/localstack
docker pull localstack/localstack
LocalStack + TestContainers
a Java libraryfor embeddingDocker containers
TestContainersimport 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;
TestContainersDockerImageName IMAGE_NAME = DockerImageName.parse(“localstack/localstack:0.12.3")public static LocalStackContainer CONTAINER = new LocalStackContainer(IMAGE_NAME).withServices(S3, SQS);
Final thoughts
Amazon CorrettoJava on ARM64Graviton2 instance typesAWS CDK
Questions?
The End