ノート:
- このチュートリアルは、Oracle提供の無料ラボ環境で入手できます。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントに例の値を使用します。演習を完了するときは、これらの値をクラウド環境に固有の値に置き換えます。
TASK 5: Micronautアプリケーションのネイティブ・イメージを構築し、Oracle Cloudにデプロイ
このラボでは、GraalVM Native Imageを使用して、JavaアプリケーションをネイティブのLinux実行可能ファイルに変換する方法を学習します。その後、それをOracle Cloudの仮想マシンにデプロイします。
見積時間: 20分
タスク・コンテンツ
このタスクでは、次のことを行います。
- Oracle CloudのJVMでMicronautアプリケーションを実行します
- MicronautアプリケーションのネイティブLinux実行可能ファイルを構築します。
- Oracle Cloudでネイティブ実行可能ファイルとしてMicronautアプリケーションをデプロイ
- クラウド・インスタンスへのトラフィックを許可するようにファイアウォールを構成します(オプション)
ステップ1: Oracle CloudのJVMでのMicronautアプリケーションの実行
このステップでは、従来(JARファイルから) Oracle CloudのJVMにMicronautアプリケーションをデプロイします。GraalVM Enterprise 22.0.0がデフォルトのJDKとして設定されているVSコードを引き続き使用します。
-
「ターミナル」、「新規ターミナル」の順に選択し、次のコマンドを実行してJavaバージョンを確認します:
java -version
java
コマンドを起動するたびに、GraalVM Enterpriseでデフォルトで有効になっている最適化されたGraal JITコンパイラが適用されます。 -
Javaプロジェクトを実行可能JARファイルにパッケージ化し、VSコード端末からアプリケーションを起動するか、「メインの実行」アクションを起動することができます。
-
「ターミナル」、「新規ターミナル」の順に移動し、
mn:run
目標を実行します。./mvnw mn:run
Gradleを使用している場合は、
run
タスクを実行します。./gradlew run
-
または、VSコードで
Application.java
クラス・ファイルを見つけて、メイン・メソッドの上にある「メインの実行」をクリックします。アプリケーションがポート8080で起動されます。起動に要した時間に注意してください(6500ミリ秒で開始することが予想されます)。
-
-
アプリケーションを終了します。
CTLR +C
ステップ2: MicronautアプリケーションのネイティブLinux実行可能ファイルのビルド
GraalVM Native Imageを使用すると、任意のJavaアプリケーションをネイティブ実行可能ファイルに変換できます。これは、Javaバイトコードを自己完結型ネイティブ・バイナリに変換できる、JDKの実行を必要とせず、特定のターゲット環境で実行するように設計されています。
すでに説明したように、ユーザーの便宜上、GraalVM Enterprise 22が仮想マシンにインストールされています。同じものがネイティブ・イメージで、すべての依存ライブラリ(libstdc++-static
、glibc
、zlib
など)とともに追加されます。native-image
ユーティリティは、GraalVMインストール・ディレクトリ($JAVA_HOME/bin
)に配置されます。
-
「VS Code Terminal」ウィンドウで、ネイティブ・イメージのバージョンを確認します。
native-image --version
-
この単一のコマンドを実行して、ネイティブのLinux実行可能ファイルを構築します。
- Mavenを使用している場合は、
native-image
パッケージ・フォーマットを指定します:
./mvnw clean package -Dpackaging=native-image
- Gradleを使用している場合は、
nativeImage
タスクを実行します。
./gradlew nativeCompile
しばらくすると、
ocidemo
というネイティブ実行可能ファイルが/target/native-image/
ディレクトリに作成されます。Gradleを使用している場合、ocidemo
という実行可能ファイルは/build/native/nativeCompile/
フォルダに書き込まれます。ノート:実行可能ファイルを構築する時間は、アプリケーションのサイズと複雑さによって異なりますが、低電力のVMでは時間がかかる場合があります。この演習に割り当てられたVMインスタンスの容量を使用すると、予想される時間は約5分です。
- Mavenを使用している場合は、
GraalVM Native Imageは、すべてのアプリケーション・クラス、依存ライブラリ・クラス、依存JDKクラス、およびアプリケーション・ヒープのスナップショットを含む実行可能ファイルを作成します。ネイティブ・イメージの構築には時間がかかるだけでなく、起動時間が大幅に短縮され、全体的なメモリー消費が削減されるという利点もあります。
ステップ3: OCIへのMicronautアプリケーションのデプロイ
前のステップで、MicronautアプリケーションのネイティブLinux実行可能ファイルを作成しました。次に、このネイティブ実行可能ファイルをOracle Cloudにデプロイし、同じアプリケーションをJARファイルから実行し、ネイティブ・イメージとして起動時間を比較します。
アプリケーションをネイティブ実行可能ファイルとしてデプロイするには、前のステップで生成されたバイナリ・ファイルを起動します。
- Mavenを使用した場合:
./target/ocidemo
- Gradleを使用した場合:
./build/native/nativeCompile/ocidemo
このMicronautマイクロサービスを、ステップ1のJARファイルよりネイティブ・イメージとして起動するのにどれくらいの速さがあることに注意してください(6500ミリ秒から2500にジャンプする必要があります)。実行可能ファイルが自己完結型バイナリであり、JDKを実行する必要がないため、迅速に起動できるため、アプリケーションを簡単に配布できます。ファイルサイズもかなり小さくなります。
Javaマイクロサービスをネイティブ実行可能ファイルとしてデプロイすると、即時起動、CPUとメモリー消費の削減が可能になり、GraalVM Enterpriseはクラウド・ネイティブJavaアプリケーションの構築とクラウド展開の候補として適切になります。
この時点でアプリケーションは正常に実行されていますが、ブラウザからアクセスするには、仮想マシンへの受信トラフィックを許可する必要があります。アプリケーションCTRL+C
を終了し、次のステップに進みます。
ステップ4:クラウド・インスタンスへのトラフィックを許可するファイアウォールの構成(オプション)
Oracle Cloudで実行されているこのサーバー側アプリケーションを確認し、ブラウザで開くには、ホスト・ファイアウォールで仮想マシンへのトラフィックが許可されていることを確認する必要があります。
-
クラウド・コンソールに戻り、「コンピュート」、「インスタンス」の順に移動します。
-
OCIコンソールにログインしたら、「コンピュート」に移動して「インスタンス」をクリックします。必要なコンパートメントにいることを確認します(タスク1のステップ3を参照)。
-
メインビューでVMインスタンス(graal-workshop-...で始まる名前)を見つけて開きます。
-
「プライマリVNIC」セクションで、インスタンスがアタッチされている「サブネット」(subnet-01)をクリックします。
-
サブネット・ページで、「内部セキュリティ・リスト」をクリックします。
-
「イングレス・ルールの追加」を押して、次のデータを入力します。
この規則により、すべてのソースからのトラフィックがポート 8080を使用できるようになり、アプリケーションがどこからでも到達できるようになります。
-
端末ウィンドウに戻り、次のコマンドを実行して、実行中のVMインスタンスでファイアウォールを再起動します。
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo systemctl reload firewalld
-
ネイティブ実行可能ファイルとしてアプリケーションを再起動します。
Mavenとともに構築:
./target/ocidemo
Gradleを使用して構築:
./build/native/nativeCompile/ocidemo
-
/pet
エンドポイントにはhttp://<SERVER_IP>:8080/pets
、/owners
エンドポイントにはhttp://<SERVER_IP>:8080/owners
を使用して、ブラウザでアプリケーションを開きます。または、VSコードで端末ウィンドウを分割し、curl
を使用してGETリクエストを送信します。curl -i http://<SERVER_IP>:8080/pets
完了しました。この演習を正常に完了している。
さらに学ぶ
-
GraalVM Native Imageを使用したハンズオン・ラボ体験を取得し、GraalVM Native Imageのクイック・スタートラボを実行して、クラウド・ネイティブJavaアプリケーションの構築を開始します。
-
GraalVM Enterpriseドキュメントを確認してください
-
MicronautとGraalVMによるマルチクラウド・サーバーレス・アプリケーションの構築に関する紹介ビデオを視聴してください。
このセッションを終了するには、ツールバーの「End Session」ボタンをクリックします。