ノート:

TASK 5: Micronautアプリケーションのネイティブ・イメージを構築し、Oracle Cloudにデプロイ

このラボでは、GraalVM Native Imageを使用して、JavaアプリケーションをネイティブのLinux実行可能ファイルに変換する方法を学習します。その後、それをOracle Cloudの仮想マシンにデプロイします。

見積時間: 20分

タスク・コンテンツ

このタスクでは、次のことを行います。

ステップ1: Oracle CloudのJVMでのMicronautアプリケーションの実行

このステップでは、従来(JARファイルから) Oracle CloudのJVMにMicronautアプリケーションをデプロイします。GraalVM Enterprise 22.0.0がデフォルトのJDKとして設定されているVSコードを引き続き使用します。

  1. 「ターミナル」「新規ターミナル」の順に選択し、次のコマンドを実行してJavaバージョンを確認します:

    java -version
    

    javaコマンドを起動するたびに、GraalVM Enterpriseでデフォルトで有効になっている最適化されたGraal JITコンパイラが適用されます。

  2. Javaプロジェクトを実行可能JARファイルにパッケージ化し、VSコード端末からアプリケーションを起動するか、「メインの実行」アクションを起動することができます。

    • 「ターミナル」「新規ターミナル」の順に移動し、mn:run目標を実行します。

      ./mvnw mn:run
      

      Gradleを使用している場合は、runタスクを実行します。

      ./gradlew run
      
    • または、VSコードでApplication.javaクラス・ファイルを見つけて、メイン・メソッドの上にある「メインの実行」をクリックします。

      メイン・メソッド・クイック処理の実行

      アプリケーションがポート8080で起動されます。起動に要した時間に注意してください(6500ミリ秒で開始することが予想されます)。

  3. アプリケーションを終了します。

    CTLR +C
    

ステップ2: MicronautアプリケーションのネイティブLinux実行可能ファイルのビルド

GraalVM Native Imageを使用すると、任意のJavaアプリケーションをネイティブ実行可能ファイルに変換できます。これは、Javaバイトコードを自己完結型ネイティブ・バイナリに変換できる、JDKの実行を必要とせず、特定のターゲット環境で実行するように設計されています。

すでに説明したように、ユーザーの便宜上、GraalVM Enterprise 22が仮想マシンにインストールされています。同じものがネイティブ・イメージで、すべての依存ライブラリ(libstdc++-staticglibczlibなど)とともに追加されます。native-imageユーティリティは、GraalVMインストール・ディレクトリ($JAVA_HOME/bin)に配置されます。

  1. 「VS Code Terminal」ウィンドウで、ネイティブ・イメージのバージョンを確認します。

    native-image --version
    
  2. この単一のコマンドを実行して、ネイティブの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分です。

GraalVM Native Imageは、すべてのアプリケーション・クラス、依存ライブラリ・クラス、依存JDKクラス、およびアプリケーション・ヒープのスナップショットを含む実行可能ファイルを作成します。ネイティブ・イメージの構築には時間がかかるだけでなく、起動時間が大幅に短縮され、全体的なメモリー消費が削減されるという利点もあります。

ステップ3: OCIへのMicronautアプリケーションのデプロイ

前のステップで、MicronautアプリケーションのネイティブLinux実行可能ファイルを作成しました。次に、このネイティブ実行可能ファイルをOracle Cloudにデプロイし、同じアプリケーションをJARファイルから実行し、ネイティブ・イメージとして起動時間を比較します。

アプリケーションをネイティブ実行可能ファイルとしてデプロイするには、前のステップで生成されたバイナリ・ファイルを起動します。

./target/ocidemo

./build/native/nativeCompile/ocidemo

このMicronautマイクロサービスを、ステップ1のJARファイルよりネイティブ・イメージとして起動するのにどれくらいの速さがあることに注意してください(6500ミリ秒から2500にジャンプする必要があります)。実行可能ファイルが自己完結型バイナリであり、JDKを実行する必要がないため、迅速に起動できるため、アプリケーションを簡単に配布できます。ファイルサイズもかなり小さくなります。

Javaマイクロサービスをネイティブ実行可能ファイルとしてデプロイすると、即時起動、CPUとメモリー消費の削減が可能になり、GraalVM Enterpriseはクラウド・ネイティブJavaアプリケーションの構築とクラウド展開の候補として適切になります。

この時点でアプリケーションは正常に実行されていますが、ブラウザからアクセスするには、仮想マシンへの受信トラフィックを許可する必要があります。アプリケーションCTRL+Cを終了し、次のステップに進みます。

ステップ4:クラウド・インスタンスへのトラフィックを許可するファイアウォールの構成(オプション)

Oracle Cloudで実行されているこのサーバー側アプリケーションを確認し、ブラウザで開くには、ホスト・ファイアウォールで仮想マシンへのトラフィックが許可されていることを確認する必要があります。

  1. クラウド・コンソールに戻り、「コンピュート」「インスタンス」の順に移動します。

  2. OCIコンソールにログインしたら、「コンピュート」に移動して「インスタンス」をクリックします。必要なコンパートメントにいることを確認します(タスク1のステップ3を参照)。

    コンピュート・インスタンスの検索

  3. メインビューでVMインスタンス(graal-workshop-...で始まる名前)を見つけて開きます。

  4. 「プライマリVNIC」セクションで、インスタンスがアタッチされている「サブネット」(subnet-01)をクリックします。

  5. サブネット・ページで、「内部セキュリティ・リスト」をクリックします。

  6. 「イングレス・ルールの追加」を押して、次のデータを入力します。

    ポートへの受信トラフィックを許可するイングレス・ルールの追加

    この規則により、すべてのソースからのトラフィックがポート 8080を使用できるようになり、アプリケーションがどこからでも到達できるようになります。

  7. 端末ウィンドウに戻り、次のコマンドを実行して、実行中のVMインスタンスでファイアウォールを再起動します。

    sudo firewall-cmd --permanent --add-port=8080/tcp
    

    sudo systemctl reload firewalld
    
  8. ネイティブ実行可能ファイルとしてアプリケーションを再起動します。

    Mavenとともに構築:

    ./target/ocidemo
    

    Gradleを使用して構築:

    ./build/native/nativeCompile/ocidemo
    
  9. /petエンドポイントにはhttp://<SERVER_IP>:8080/pets/ownersエンドポイントにはhttp://<SERVER_IP>:8080/ownersを使用して、ブラウザでアプリケーションを開きます。または、VSコードで端末ウィンドウを分割し、curlを使用してGETリクエストを送信します。

    curl -i http://<SERVER_IP>:8080/pets
    

完了しました。この演習を正常に完了している。

さらに学ぶ

このセッションを終了するには、ツールバーの「End Session」ボタンをクリックします。