Azure での Java アプリケーションのホスティング オプションの比較

Azure Spring Apps
Azure App Service
Azure Kubernetes Service (AKS)
Azure Virtual Machines

Azure には、チームで Java アプリケーションをビルドしてデプロイするための多くのオプションが用意されています。 この記事では、Azure 上の Java のメインストリーム シナリオについて説明し、計画に関する大まかな提案と考慮事項を示します。

Apache®、Apache KafkaApache StrutsApache Tomcat、および炎のロゴは、Apache Software Foundation の米国およびその他の国における登録商標です。 これらのマークを使用することが、Apache Software Foundation による保証を意味するものではありません。

プラットフォーム

Java アプリケーションのクラウド シナリオを選択する前に、プラットフォームを特定します。 ほとんどの Java アプリケーションでは、次のいずれかのプラットフォームが使用されます。

Spring Boot JAR アプリケーション

Spring Boot JAR アプリケーションは通常、コマンド ラインから直接呼び出されます。 Web 要求を処理します。 これらのアプリケーションは、アプリケーション サーバーに依存して HTTP 要求を処理する代わりに、HTTP 通信やその他の依存関係をアプリケーション パッケージに直接組み込みます。 このようなアプリケーションは、多くの場合、Spring BootDropwizardMicronautMicroProfileVert.x などのフレームワークを使用して構築されます。

これらのアプリケーションは、.jar 拡張子 (JAR ファイルと呼ばれます) を使用してアーカイブにパッケージ化されます。

Spring Cloud アプリケーション

"マイクロサービス アーキテクチャ スタイル" は、1 つのアプリケーションを小さなサービスのスイートとして開発するアプローチです。 各サービスは独自のプロセス内で実行され、軽量なメカニズム (多くの場合、HTTP リソース API) を使って通信します。 これらのサービスは、ビジネス機能を中心に構築されます。

自動化されたデプロイ機構により、これらのマイクロサービスは個別にデプロイされます。 さまざまなプログラミング言語で記述され、さまざまなデータ ストレージ テクノロジを使用している可能性がある、最小限の集中管理が行われます。 こうしたサービスは、多くの場合、Spring Cloud などのフレームワークを使用して作成されます。

これらのサービスは、JAR ファイルとして複数のアプリケーションにパッケージ化されます。

Web アプリケーション

Web アプリケーションは、サーブレット コンテナー内で実行されます。 一部はサーブレット API を直接使用しますが、その他は、Apache StrutsSpring MVCJavaServer Faces など、サーブレット API をカプセル化するその他のフレームワークを使用します。

Web アプリケーションは、.war 拡張子 (WAR ファイルと呼ばれます) を使用してアーカイブにパッケージ化されます。

Jakarta EE アプリケーション

Jakarta Enterprise Edition (Jakarta EE) アプリケーションには、Web アプリケーションの要素の一部またはすべてを含めるか、まったく含めないことができます。 また、Jakarta EE 仕様で定義されているような多くのコンポーネントを含めて使用することもできます。 Jakarta EE アプリケーションは、以前は "Java EE アプリケーション" または "J2EE アプリケーション" と呼ばれていました。

Jakarta EE アプリケーションは、WAR ファイルとしてパッケージ化することも、EAR ファイルと呼ばれる .ear 拡張子を持つアーカイブとしてパッケージ化することもできます。

Jakarta EE アプリケーションは、Jakarta EE に準拠しているアプリケーション サーバーにデプロイする必要があります。 たとえば、WebLogicWebSphereWildFlyGlassFishPayara などがあります。

Jakarta EE 仕様によって提供される機能のみに依存するアプリケーションは、準拠アプリケーション サーバー間で移行できます。 アプリケーションが特定のアプリケーション サーバーに依存している場合は、そのアプリケーション サーバーをホストすることが許可される Azure サービス移行先を選択することが必要になる可能性があります。

プラットフォームのオプション

次の表を使用して、お使いのアプリケーションの種類で考えられるプラットフォームを特定します。

Azure Spring Apps App Service Java SE App Service Tomcat App Service JBoss EAP Azure Container Apps AKS Virtual Machines
Spring Boot/JAR アプリケーション
Spring Cloud アプリケーション
Web アプリケーション
Jakarta EE アプリケーション
Azure リージョンの利用可能性 詳細 詳細 詳細 詳細 詳細 詳細 詳細

Azure Kubernetes Service (AKS) と Azure Virtual Machines ではすべての種類のアプリケーションがサポートされていますが、次のセクションで説明するように、チームはより多くの責任を負う必要があります。

サポート

プラットフォームの選択に加えて、最新の Java アプリケーションには、次のような他のサポート可能性のニーズがある場合があります。

バッチ ジョブまたはスケジュールされたジョブ

一部のアプリケーションは、要求やユーザー入力を待機する代わりに、短時間実行され、特定のワークロードを実行してから終了します。 場合によっては、このようなジョブは 1 回だけ、または一定のスケジュールされた間隔で実行する必要があります。 オンプレミスでは、多くの場合、このようなジョブはサーバーの cron テーブルから呼び出されます。

これらのアプリケーションは JAR ファイルとしてパッケージ化されます。

Note

アプリケーションで Spring Batch や Quartz などのスケジューラーを使用してスケジュールされたタスクを実行する場合は、このようなタスクをアプリケーションの外部で実行することを強くお勧めします。 アプリケーションをクラウド内で複数のインスタンスにスケーリングすると、同じジョブが複数回実行される場合があります。 スケジュール メカニズムでホストのローカル タイム ゾーンを使用する場合、リージョン間でアプリケーションをスケーリングすると望ましくない動作が発生する可能性があります。

仮想ネットワークの統合

Java アプリケーションを仮想ネットワークにデプロイする場合、仮想ネットワークの外部にあるサービスへの送信依存関係が発生します。 管理と運用に関して、プロジェクトで特定のポートと完全修飾ドメイン名にアクセスできる必要があります。 Azure Virtual Network を使用すると、多くの Azure リソースをインターネットにルーティングできないネットワークに配置できます。 "仮想ネットワーク統合" 機能を使用すると、アプリケーションは仮想ネットワーク内のリソースにアクセスしたり、仮想ネットワークを通じてリソースにアクセスしたりできます。 仮想ネットワーク統合では、アプリケーションにプライベートでアクセスすることはできません。

サーバーレス開発モデル

サーバーレスはクラウドネイティブの開発モデルであり、開発者はサーバーを管理することなくアプリケーションをビルドして実行できます。 サーバーレス アプリケーションを使用すると、コードを実行するために必要なインフラストラクチャのプロビジョニング、スケーリング、管理が、クラウド サービス プロバイダーによって自動的に行われます。 サーバーレス モデルにもサーバーは存在します。 これらは、アプリケーション開発からは抽象化されています。

コンテナー詰め

コンテナ化とは、ソフトウェア コードを、ライブラリ、フレームワーク、その他の依存関係など、必要なすべてのコンポーネントと一緒にパッケージ化することです。 アプリケーションは独自のコンテナー内に分離されます。

CI/CD

継続的インテグレーションと継続的デリバリー (CI/CD) は、アプリケーション開発のステージに自動化を導入することで、顧客にアプリケーションを頻繁に配信する方法です。 CI/CD の主な概念は、"継続的インテグレーション"、"継続的デリバリー"、"継続的デプロイ" です。 すべての Azure の選択肢で、ほとんどの CI/CD ツールがサポートされています。 たとえば、Azure PipelinesJenkins などのソリューションを使用できます。

オープンソース検索エンジン

検索は、あらゆるアプリケーションにとって不可欠な部分です。 速度、パフォーマンス、高可用性が重要な場合、テラバイトやペタバイトのデータを検索するのは難しい場合があります。 Azure で Java アプリケーションをホストする場合は、関連する Solr インスタンスと Elasticsearch インスタンスをホストすることを計画してください。 または、Azure Cognitive Search への移行を検討してください。

ビッグ データ ツール

ビッグ データ ツールを使用すると、ソフトウェア システム間のデータ フローを自動化できます。 システム メディエーション ロジックと共に、スケーラブル、堅牢で合理化されたデータ ルーティング グラフがサポートされます。 これらは、ライブ データ フロー パイプラインとストリーム アプリケーションを構築するために使用されます。 Azure 上の NifiApache Kafka がニーズに適しているかどうかをご確認ください。

サポート可能性のオプション

次の表を使用して、お使いのアプリケーションの種類で考えられるオプションを特定します。 AKS と Virtual Machines ではすべてのアプリケーションの種類がサポートされますが、チームはより多くの責任を担う必要があります。

Azure Spring Apps App Service Java SE App Service Tomcat App Service JBoss EAP Azure Container Apps AKS Virtual Machines
バッチ ジョブまたはスケジュールされたジョブ
仮想ネットワークの統合
サーバーレス
コンテナー詰め
Azure リージョンの利用可能性 詳細 詳細 詳細 詳細 詳細 詳細 詳細

また、このデシジョン ツリーを参照してください。

Azure サービス上の Java のデシジョン ツリーを示す図。

この図の Visio ファイルをダウンロードします。

Java アプリケーションを構築または移行する

Java アプリケーションを構築または移行するには、アプリケーションの Java プラットフォームを特定します。 一般的なプラットフォームには、Java SEJakarta EEMicroProfile があります。

Java SE

Java プラットフォームである Standard Edition (Java SE) は、デスクトップとサーバー環境用の移植可能なコードの開発とデプロイのためのコンピューティング プラットフォームです。 Java SE 上に構築された一般的なプロジェクトには、Spring Boot、Spring Cloud、Spring FrameworkApache Tomcat などがあります。

Jakarta EE

Jakarta EE は、クラウドネイティブ エンタープライズ Java のオープンソースの未来です。 これは、分散コンピューティングや Web サービスなどのエンタープライズ機能を使用して Java SE を拡張する一連の仕様です。 Jakarta EE アプリケーションは、参照ランタイムを実行します。 これらのランタイムは、マイクロサービスまたはアプリケーション サーバーにすることができます。 これらは、アプリケーションがデプロイするコンポーネントのトランザクション、セキュリティ、スケーラビリティ、コンカレンシー、管理を処理します。

MicroProfile

MicroProfile プロジェクトは、開発者がエンタープライズ Java クラウドネイティブ マイクロサービスを構築するのに役立つ仕様のコレクションを提供します。 QuarkusOpen Liberty は、MicroProfile の一般的な実装です。

構築または移行の概要

次の表に、アプリケーションの種類と Azure サービス別の構築または移行に関する情報を示します。

Type Java SE MicroProfile JarkartaSE
仮想マシン IaaS
VMware Tanzu IaaS
Azure Kubernetes Service コンテナー
Red Hat OpenShift コンテナー
Azure コンテナー アプリ PaaS
JBoss EAP PaaS App Service
Apache Tomcat PaaS App Service
Java SE PaaS App Service
Azure Spring Apps PaaS

共同作成者

この記事は、Microsoft によって保守されています。 当初の寄稿者は以下のとおりです。

プリンシパルの作成者:

パブリックでない LinkedIn プロファイルを表示するには、LinkedIn にサインインします。

次のステップ