Ein OpenJDK von Amazon

Unter der Haube von Amazon Corretto: So funktioniert die Java-Distribution von Amazon

Sascha Möllering, Steffen Grunwald

© Shutterstock / Elena Dijour

Sowohl bei Kunden von Amazon Web Services (AWS) als auch innerhalb von Amazon findet sich eine große Community von Java-Entwicklern. Amazon unterstützt diese Community zukünftig mit Amazon Corretto, einer kostenlosen, plattformübergreifenden Distribution von OpenJDK. Dieser Artikel gibt einen Einblick in die Vorteile und die Details von Amazon Corretto, das derzeit für Java 8 und Java 11 zur Verfügung steht.

Amazon Corretto ist eine kostenfreie und plattformübergreifende Distribution von OpenJDK für den produktiven Einsatz. Die aktuellen Versionen von Corretto 8 bzw. 11 entsprechen dem OpenJDK-Stand mit denselben Versionsnummern. Es existieren aktuell Installationspakete für macOS und Windows. Die unterstützten Linux-Distributionen sind Red Hat Enterprise Linux, CentOS, Ubuntu Linux, Debian Linux, SuSE sowie Amazon Linux.

Durch die interne Nutzung in Tausenden von Services im produktiven Betrieb hat Amazon viel Erfahrung gesammelt und führt seit 2017 Verbesserungen hinsichtlich Sicherheit, Stabilität oder Leistung in das OpenJDK-Projekt zurück. Darüber hinaus führt Feedback zu Amazon Corretto zu weiteren Verbesserungen. Diese werden allen Corretto-Nutzern gleichermaßen zur Verfügung gestellt und ermöglichen es, hochskalierbare Services zu betreiben und somit hohe Anforderungen an Leistung und Skalierbarkeit zu erfüllen.

W-JAX 2019 Java-Dossier für Software-Architekten

Kostenlos: 30+ Seiten Java-Wissen von Experten

Sie finden Artikel zu EnterpriseTales, Microservices, Req4Arcs, Java Core und Angular-Abenteuer von Experten wie Uwe Friedrichsen (codecentric AG), Arne Limburg (Open Knowledge), Manfred Steyer (SOFTWAREarchitekt.at) und vielen weiteren.

API Summit 2019
Thilo Frotscher

API-Design – Tipps und Tricks aus der Praxis

mit Thilo Frotscher (Freiberufler)

Golo Roden

Skalierbare Web-APIs mit Node.js entwickeln

mit Golo Roden (the native web)

Amazon Coretto 8 und Amazon Linux 2

Amazon Corretto wird 2019 das Standard-OpenJDK auf Amazon Linux 2 werden. Um bis dahin Amazon Corretto 8 auf Amazon Linux 2 verwenden zu können, muss zunächst das entsprechende YUM-Repository aktiviert werden:

sudo amazon-linux-extras enable corretto8

Amazon Corretto 8 kann entweder als JRE oder als vollständiges JDK genutzt werden. Das JDK kann folgendermaßen installiert werden:

sudo yum install java-1.8.0-amazon-corretto-devel

Um nur das JRE zu installieren, sieht der Befehl so aus:

sudo yum install java-1.8.0-amazon-corretto

Nach der Installation befindet sich das JDK bzw. das JRE unter /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64. Danach kann die Installation mit der Anzeige der Versionen verifiziert werden. Folgende Ausgaben werden bei der Version 8u192 erwartet:

$ java -version
openjdk version "1.8.0_202"
OpenJDK Runtime Environment Corretto-8.202.08.2 (build 1.8.0_202-b08)
OpenJDK 64-Bit Server VM Corretto-8.202.08.2 (build 25.202-b08, mixed mode)
$ javac -version
javac 1.8.0_202

Amazon Corretto und Docker

Falls Amazon Corretto im Kontext von Docker genutzt werden soll, existiert dafür auch ein Docker Base-Image, das als Basis für eigene Images genutzt werden kann. Ein „Hello World“ Dockerfile ist hier zu sehen:

FROM amazoncorretto:8
RUN echo $' \
public class Hello { \
public static void main(String[] args) { \
System.out.println("Welcome to Amazon Corretto!"); \
} \
}' > Hello.java
RUN javac Hello.java
CMD ["java", "Hello"]

Um dieses Image zu bauen, muss folgendes Kommando ausgeführt werden:

docker build -t hello-app

Die Ausführung dieses Images als Docker-Container sieht wie folgt aus:

$ docker run hello-app
Welcome to Amazon Corretto!

Darüber hinaus ist es natürlich auch möglich, ein Docker Image auf Basis des GitHub Repositorys zu bauen:

docker build -t amazon-corretto-8 github.com/corretto/corretto-8-docker

Nach dem erfolgreichen Bauen des Docker-Images befindet sich dieses lokal abgelegt unter dem Namen amazon-corretto-8. Mit dem Kommando docker run -it amazon-corretto-8 kann der Docker-Container gestartet werden.

Automatisch auf dem neuesten Stand bleiben

Amazon Corretto Releases orientieren sich an den Long-Term Support (LTS) Releases des OpenJDK. Das letzte LTS Release ist OpenJDK 11, das in Corretto 11 bis mindestens August 2024 kostenlose Updates erhält. Ab dieser OpenJDK-Version erscheinen weitere LTS Releases im Drei-Jahres-Turnus, so dass die nächste Version im Jahr 2021 OpenJDK 17 sein wird. Das letzte LTS Release wird mit Corretto 8 bis mindestens Juni 2023 unterstützt.

AWS führt vor jedem Corretto Release das Java Technology Compatibility Kit (TCK) aus, um die Kompatibilität mit der Java-SE-Plattform sicherzustellen. Corretto ist als Drop-in-Ersatz für alle JDK-Distributionen auf HotSpot-JVM-Basis konzipiert. Das betrifft natürlich die Kompatibilität der Befehlszeilenoptionen, Tuning-Parameter und Überwachung, aber auch die Lizenz, die der von OpenJDK entspricht (GPLv2 with CPE).

Updates für alle Corretto-Versionen erscheinen voraussichtlich vierteljährlich. Die Änderungen sind in der Corretto-Dokumentation für die Versionen 8 und 11 aufgelistet. Mit der zukünftigen Bereitstellung in Amazon Linux 2 sind wichtige Updates auch im Amazon Linux Security Center aufgeführt. Die Updates enthalten Performance-Verbesserungen und kritische Fehlerbehebungen für die Anwendungsentwicklung von Unternehmen. Die Änderungen sollten aus diesem Grund kontrolliert, aber so schnell wie möglich ihren Weg in die Anwendung finden. Dazu gibt es mehrere Methoden, die hier kurz erläutert werden sollen.

Amazon EC2-Instanzen führen einmalig beim Start einer neuen Instanz ein User Data Script aus. Ein generelles Muster, um auf dem neuesten Stand zu bleiben, ist der folgende Befehl in diesem Skript am Beispiel von Amazon Linux. Verfügbare Sicherheitsupdates werden damit zum frühestmöglichen Zeitpunkt installiert.

#!/bin/bash
yum update --security -y

Instanzen können leicht regelmäßig und automatisiert terminiert werden. Eine Auto-Scaling-Gruppe stellt danach sicher, dass neue Instanzen nachgestartet werden. Dabei werden die neuesten Updates angewendet.

Kurze Startzeiten können beim Auto Scaling aufgrund eines Lastanstieg entscheidend sein. Deswegen eignet sich alternativ die Erstellung eigener AMIs mit Hilfe von AWS Systems Manager Automation oder z.B. HashiCorp Packer.

Die Erstellung eines neuen AMIs übernimmt AWS Systems Manager mit dem vordefinierten Automation-Dokument AWS-UpdateLinuxAmi auf Basis eines Amazon Linux 2 AMIs. Mit dem AWS CLI wird die Automation wie folgt gestartet:

aws ssm start-automation-execution \
--document-name "AWS-UpdateLinuxAmi" \
--parameters \
SourceAmiId=,\
PostUpdateScript=

Das PostUpdateScript ist ein benutzerdefiniertes Skript mit Befehlen. AWS Systems Manager führt die Befehle nach der Aktualisierung aller Pakete aber noch vor der Erstellung des AMIs aus. Das Skript enthält lediglich die hier beschriebenen Zeilen:

#!/bin/bash
amazon-linux-extras enable corretto8
yum install java-1.8.0-amazon-corretto-devel -y

Nachdem die Automation erfolgreich beendet ist, enthält deren Output die ID des gebauten AMIs. Wird danach die Auto-Scaling-Gruppe über AWS CloudFormation auf dieses AMI angepasst, übernimmt AWS CloudFormation das Ausrollen des AMIs automatisch. Der Vorteil dieser Variante ist, dass der genaue Stand der installierten Software in Code dokumentiert ist. So ist auch ein Zurückrollen auf eine ältere Version im Fehlerfall möglich.

Die letzte Variante zum Update kommt ins Spiel, wenn die Instanzen nicht regelmäßig neu gestartet werden sollen. In den aktuellen Standard-AMIs für Windows- und Amazon Linux ist der AWS Systems Manager Agent vorinstalliert. Dieser übernimmt die Aktualisierung der installierten Pakete anhand einer Patch Baseline, die im AWS Systems Manager Patch Manager für die jeweilige Instanz konfiguriert wurde.

Amazon Corretto 11 in Aktion

Java 11 enthält viele Funktionen, auf die Entwickler seit dem letzten LTS Release gewartet haben. Neu ist u.a. die Modularisierung, die Typinferenz mit der var-Syntax und die Möglichkeit, eine Quellcode-Datei ohne vorherige Kompilierung schnell auszuführen. Letzteres soll hier mit dem seit März 2019 verfügbaren Corretto 11 kurz gezeigt werden.

Der folgende Code verwendet das neueste RPM-Paket, das in der Online-Dokumentation zu finden ist, und installiert es mit yum auf einem neuen Server mit Amazon Linux 2:

sudo yum localinstall java-11-amazon-corretto-devel-11.0.2.9-3.x86_64.rpm

Nach der Installation können Sie die Version überprüfen:

$ java -version
openjdk version "11.0.2" 2019-01-15 LTS
OpenJDK Runtime Environment Corretto-11.0.2.9.3 (build 11.0.2+9-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.2.9.3 (build 11.0.2+9-LTS, mixed mode)

Erstellen Sie eine neue Datei Echo.java, die einfach das erste Argument ausgibt:

public class Echo {
public static void main(String[] args) {
System.out.format("Hello %s!", args[0]);
}
}

Führen Sie den Code ohne vorherige Kompilierung mit java aus:

$ java Echo.java Corretto
Hello Corretto!

Voilà! Sie haben Ihren ersten Code auf Corretto 11 erfolgreich ausgeführt.

Ausblick

Bei Anwendungen, die Planungssicherheit, langfristigen Support und überschaubare Lizenzen benötigen, ist der Start bzw. Umstieg auf Amazon Corretto-Builds zu empfehlen. Darüber hinaus sollten dennoch – wie beschrieben – wichtige Sicherheitspatches automatisiert eingespielt und getestet werden.

Amazon hat bereits in der Vergangenheit mehrere Contributions zu OpenJDK geleistet und freut sich auf eine enge Zusammenarbeit mit der OpenJDK-Community bei zukünftigen Erweiterungen. Amazon stellt Backport-Fixes für OpenJDK 8 und 11 bereit, fügt Verbesserungen hinzu, die auf eigenen Erfahrungen und Bedürfnissen basieren, und erstellt darauf basierend Corretto-Builds. Falls die Upstream-Bemühungen für solche Patches nicht erfolgreich, verzögert oder für das OpenJDK-Projekt ungeeignet sind, werden diese Amazon-Kunden zur Verfügung gestellt, solange diese Patches einen Mehrwert schaffen.

Der Quellcode für Corretto befindet sich unter github.com/corretto. Verbesserungsvorschläge in Form von Pull-Requests sind sehr willkommen!

Geschrieben von
Sascha Möllering
Sascha Möllering
Sascha Möllering arbeitet als Solutions Architect bei der Amazon Web Services Germany GmbH. Seine Interessen liegen in den Bereichen Automation, Infrastructure as Code, Distributed Computing, Container und JVM.
Steffen Grunwald

Steffen Grunwald Steffen ist Solutions Architect bei der Amazon Web Services EMEA SARL. Er unterstützt dort überwiegend Kunden aus dem Enterprise-Umfeld auf ihrem Weg in die Cloud.

Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
4000
  Subscribe  
Benachrichtige mich zu: