Hinweis:
- Dieses Tutorial steht in einer von Oracle bereitgestellten kostenlosen Übungsumgebung zur Verfügung.
- Er verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, Mandanten und Compartments. Ersetzen Sie diese Werte beim Durchführen Ihrer Übung durch spezifische Werte für Ihre Cloud-Umgebung.
TASK 5: Natives Image einer Micronaut-Anwendung erstellen und in Oracle Cloud bereitstellen
In dieser Übung lernen Sie, wie Sie Ihre Java-Anwendung mit GraalVM Native Image in eine native ausführbare Linux-Datei umwandeln. Anschließend stellen Sie sie auf einer virtuellen Maschine in Oracle Cloud bereit.
Voraussichtliche Zeit: 20 Minuten
Aufgabeninhalt
In dieser Aufgabe führen Sie folgende Schritte aus:
- Micronaut-Anwendung auf der JVM in Oracle Cloud ausführen
- Erstellen Sie eine native, ausführbare Linux-Datei für Ihre Micronaut-Anwendung
- Stellen Sie Ihre Micronaut-Anwendung als native ausführbare Datei in Oracle Cloud bereit
- Konfigurieren Sie die Firewall so, dass der Traffic zu einer Cloud-Instanz zugelassen wird (optional)
Schritt 1: Micronaut-Anwendung auf der JVM in Oracle Cloud ausführen
In diesem Schritt stellen Sie traditionell eine Micronaut-Anwendung auf der JVM (aus einer JAR-Datei) in Oracle Cloud bereit. Sie verwenden weiterhin VS-Code, wobei GraalVM Enterprise 22.0.0 als Standard-JDK festgelegt ist.
-
Gehen Sie zu Terminal und dann zu New Terminal, und führen Sie diesen Befehl aus, um die Java-Version zu prüfen:
java -version
Bei jedem Aufruf des Befehls
java
wird der optimierte Graal JIT-Compiler angewendet, der standardmäßig in GraalVM Enterprise aktiviert ist. -
Sie können ein Java-Projekt in einer ausführbaren JAR-Datei verpacken und die Anwendung entweder über das VS-Code-Terminal starten oder die Aktion Haupt ausführen aufrufen.
-
Gehen Sie zu Terminal, Neues Terminal, und führen Sie das Ziel
mn:run
aus:./mvnw mn:run
Wenn Sie Gradle verwenden, führen Sie die Aufgabe
run
aus:./gradlew run
-
Suchen Sie alternativ die Klassendatei
Application.java
im VS-Code, und klicken Sie über der Hauptmethode auf Haupt ausführen:Die Anwendung wird auf Port 8080 gestartet. Beachten Sie die Zeit, die zum Starten benötigt wird (sie wird voraussichtlich in ~6500ms beginnen).
-
-
Beenden Sie die Bewerbung:
CTLR +C
Schritt 2: Erstellen Sie ein natives, ausführbares Linux-Programm einer Micronaut-Anwendung
Sie können jede Java-Anwendung mit GraalVM Native Image in eine native ausführbare Datei umwandeln. Es handelt sich um eine Kompilierungstechnologie im Voraus, mit der Sie Ihren Java-Bytecode in eine eigenständige native Binärdatei umwandeln können, die kein JDK zur Ausführung benötigt und für die Ausführung in einer bestimmten Zielumgebung konzipiert ist.
Wie bereits erwähnt, ist GraalVM Enterprise 22 auf Ihrer virtuellen Maschine vorinstalliert. Dasselbe ist ein natives Image, das mit allen abhängigen Librarys hinzugefügt wird (z.B. libstdc++-static
, glibc
, zlib
usw.). Das Dienstprogramm native-image
wird im GraalVM-Installationsverzeichnis ($JAVA_HOME/bin
) abgelegt.
-
Prüfen Sie im Fenster "VS Code Terminal" die Version des nativen Images:
native-image --version
-
Führen Sie diesen einzelnen Befehl aus, um eine native, ausführbare Linux-Datei zu erstellen:
- Wenn Sie Maven verwenden, geben Sie das Packageformat
native-image
an:
./mvnw clean package -Dpackaging=native-image
- Wenn Sie Gradle verwenden, führen Sie die Aufgabe
nativeImage
aus:
./gradlew nativeCompile
Nach einiger Zeit wird eine native ausführbare Datei namens
ocidemo
in das Verzeichnis/target/native-image/
integriert. Wenn Sie Gradle verwenden, wird die ausführbare Dateiocidemo
in den Ordner/build/native/nativeCompile/
geschrieben.Hinweis: Die Zeit zum Erstellen einer ausführbaren Datei hängt von der Anwendungsgröße und -komplexität ab und kann bei VMs mit niedriger Performance etwas länger dauern. Mit den für diese Übung zugewiesenen Kapazitäten der VM-Instanz beträgt die erwartete Zeit ca. 5 Minuten.
- Wenn Sie Maven verwenden, geben Sie das Packageformat
GraalVM Native Image erstellt eine ausführbare Datei mit allen Anwendungsklassen, abhängigen Bibliotheksklassen, abhängigen JDK-Klassen und einem Snapshot des Anwendungsheaps. Während der Aufbau eines nativen Images einige Zeit in Anspruch nehmen kann, bieten die Vorteile eine drastische Reduzierung der Startzeit und eine Verringerung des gesamten Speicherverbrauchs.
Schritt 3: Mikronaut-Anwendung in OCI bereitstellen
Im vorherigen Schritt haben Sie eine native Linux-Programmdatei der Micronaut-Anwendung erstellt. Jetzt stellen Sie diese native ausführbare Datei in Oracle Cloud bereit und vergleichen die Startzeiten, wenn Sie dieselbe Anwendung wie eine JAR-Datei und ein natives Image ausführen.
Um die Anwendung als native ausführbare Datei bereitzustellen, rufen Sie eine im vorherigen Schritt generierte Binärdatei auf:
- Wenn Sie Maven verwendet haben:
./target/ocidemo
- Wenn Sie Gradle verwendet haben:
./build/native/nativeCompile/ocidemo
Beachten Sie, wie viel schneller es dauert, diesen Micronaut-Microservice als natives Image aus einer JAR-Datei in Schritt 1 zu starten (er sollte von ~6500 Millisekunden auf 2500 springen). Sie wird schneller gestartet, da die ausführbare Datei eine eigenständige Binärdatei ist und kein JDK zur Ausführung benötigt. Auf diese Weise können Anwendungen einfach verteilt werden. Die Dateigröße ist auch ziemlich klein.
Das Deployment eines Java-Microservice als native ausführbare Datei hilft bei der sofortigen Inbetriebnahme, niedrigeren CPU- und Speicherverbrauch. GraalVM Enterprise ist daher ein guter Kandidat für die Entwicklung cloud-nativer Java-Anwendungen und für Cloud-Deployments.
Die Anwendung wird zu diesem Zeitpunkt erfolgreich ausgeführt. Um beispielsweise über einen Browser auf die Anwendung zuzugreifen, müssen Sie eingehenden Traffic auf Ihre virtuelle Maschine zulassen. Beenden Sie die Anwendung, CTRL+C
, und fahren Sie mit dem nächsten Schritt fort.
Schritt 4: Firewall für Traffic zu Ihrer Cloud-Instanz konfigurieren (optional)
Um diese serverseitige Anwendung in Oracle Cloud zu prüfen und in einem Browser zu öffnen, müssen Sie sicherstellen, dass die Hostfirewall den Datenverkehr in Ihre virtuelle Maschine zulässt.
-
Kehren Sie zur Cloud-Konsole zurück, navigieren Sie zu Compute, Instanzen.
-
Wenn Sie bei der OCI-Konsole angemeldet sind, navigieren Sie zu Compute, und klicken Sie auf Instanzen. Stellen Sie sicher, dass Sie sich im erforderlichen Compartment befinden (siehe Aufgabe 1, Schritt 3).
-
Suchen Sie die VM-Instanz (Name, der mit graal-workshop-... beginnt) in der Hauptansicht, und öffnen Sie sie.
-
Klicken Sie im Abschnitt Primäre VNIC auf Subnetz, an das Ihre Instanz angehängt ist (subnet-01).
-
Klicken Sie auf der Seite "Subnetz" auf Interne Sicherheitsliste.
-
Klicken Sie auf Ingress-Regel hinzufügen, und geben Sie die folgenden Daten ein.
Die Regel ermöglicht es Traffic von allen Quellen, Port 8080 zu verwenden, sodass die Anwendung von überall aus erreicht werden kann.
-
Kehren Sie zum Terminalfenster zurück, und führen Sie die folgenden Befehle aus, um die Firewall in der ausgeführten VM-Instanz neu zu starten.
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo systemctl reload firewalld
-
Starten Sie die Anwendung als native ausführbare Datei neu.
Mit Maven erstellt:
./target/ocidemo
Mit Gradle erstellt:
./build/native/nativeCompile/ocidemo
-
Öffnen Sie die Anwendung in einem Browser mit
http://<SERVER_IP>:8080/pets
für den/pet
-Endpunkt undhttp://<SERVER_IP>:8080/owners
für den/owners
-Endpunkt. Alternativ können Sie das Terminalfenster im VS-Code teilen und eine GET-Anforderung mitcurl
senden:curl -i http://<SERVER_IP>:8080/pets
Vielen Dank! Sie haben diese Übung erfolgreich abgeschlossen.
Weitere Informationen
-
Testen Sie praktische Übungen mit GraalVM Native Image, und erstellen Sie cloud-native Java-Anwendungen mit der Übung GraalVM Native Image Quick Start.
-
Weitere Informationen finden Sie in der GraalVM Enterprise-Dokumentation.
-
Video mit einer Einführung zum Erstellen von serverlosen Multi-Cloud-Anwendungen mit Micronaut und GraalVM.
Video zum Erstellen von serverlosen Multicloud-Anwendungen mit Micronaut und GraalVM
Um diese Session zu beenden, klicken Sie in der Symbolleiste auf die Schaltfläche "Session beenden".