Azure には、チームで Java アプリケーションをビルドしてデプロイするための多くのオプションが用意されています。 この記事では、Azure 上の Java のメインストリーム シナリオについて説明し、計画に関する大まかな提案と考慮事項を示します。
Apache®、 Apache Kafka、 Apache Struts、 Apache Tomcat、および炎のロゴは、Apache Software Foundation の米国およびその他の国における登録商標です。 これらのマークを使用することが、Apache Software Foundation による保証を意味するものではありません。
プラットフォーム
Java アプリケーションのクラウド シナリオを選択する前に、プラットフォームを特定します。 ほとんどの Java アプリケーションでは、次のいずれかのプラットフォームが使用されます。
Spring Boot JAR アプリケーション
Spring Boot JAR アプリケーションは通常、コマンド ラインから直接呼び出されます。 Web 要求を処理します。 これらのアプリケーションは、アプリケーション サーバーに依存して HTTP 要求を処理する代わりに、HTTP 通信やその他の依存関係をアプリケーション パッケージに直接組み込みます。 このようなアプリケーションは、多くの場合、 Spring Boot、 Dropwizard、 Micronaut、 MicroProfile、 Vert.xなどのフレームワークを使用して構築されます。
これらのアプリケーションは、 .jar 拡張子 (JAR ファイルと呼ばれます) を使用してアーカイブにパッケージ化されます。
Spring Cloud アプリケーション
"マイクロサービス アーキテクチャ スタイル" は、1 つのアプリケーションを小さなサービスのスイートとして開発するアプローチです。 各サービスは独自のプロセス内で実行され、軽量なメカニズム (多くの場合、HTTP リソース API) を使って通信します。 これらのサービスは、ビジネス機能を中心に構築されます。
自動化されたデプロイ機構により、これらのマイクロサービスは個別にデプロイされます。 さまざまなプログラミング言語で記述され、さまざまなデータ ストレージ テクノロジを使用している可能性がある、最小限の集中管理が行われます。 こうしたサービスは、多くの場合、 Spring Cloudなどのフレームワークを使用して作成されます。
これらのサービスは、JAR ファイルとして複数のアプリケーションにパッケージ化されます。
Web アプリケーション
Web アプリケーションは、サーブレット コンテナー内で実行されます。 一部はサーブレット API を直接使用しますが、その他は、 Apache Struts、 Spring MVC、 JavaServer 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 に準拠しているアプリケーション サーバーにデプロイする必要があります。 たとえば、 WebLogic、 WebSphere、 WildFly、 GlassFish、 Payaraなどがあります。
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 Pipelines や Jenkinsなどのソリューションを使用できます。
オープンソース検索エンジン
検索は、あらゆるアプリケーションにとって不可欠な部分です。 速度、パフォーマンス、高可用性が重要な場合、テラバイトやペタバイトのデータを検索するのは難しい場合があります。 Azure で Java アプリケーションをホストする場合は、関連する Solr インスタンスと Elasticsearch インスタンスをホストすることを計画してください。 または、 Azure Cognitive Searchへの移行を検討してください。
ビッグ データ ツール
ビッグ データ ツールを使用すると、ソフトウェア システム間のデータ フローを自動化できます。 システム メディエーション ロジックと共に、スケーラブル、堅牢で合理化されたデータ ルーティング グラフがサポートされます。 これらは、ライブ データ フロー パイプラインとストリーム アプリケーションを構築するために使用されます。 Azure 上の Nifi と Apache 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 リージョンの利用可能性 | 詳細 | 詳細 | 詳細 | 詳細 | 詳細 | 詳細 | 詳細 |
また、このデシジョン ツリーを参照してください。
この図の Visio ファイル をダウンロードします。
Java アプリケーションを構築または移行する
Java アプリケーションを構築または移行するには、アプリケーションの Java プラットフォームを特定します。 一般的なプラットフォームには、 Java SE、 Jakarta EE、 MicroProfileがあります。
Java SE
Java プラットフォームである Standard Edition (Java SE) は、デスクトップとサーバー環境用の移植可能なコードの開発とデプロイのためのコンピューティング プラットフォームです。 Java SE 上に構築された一般的なプロジェクトには、Spring Boot、Spring Cloud、 Spring Framework、 Apache Tomcatなどがあります。
Jakarta EE
Jakarta EE は、クラウドネイティブ エンタープライズ Java のオープンソースの未来です。 これは、分散コンピューティングや Web サービスなどのエンタープライズ機能を使用して Java SE を拡張する一連の仕様です。 Jakarta EE アプリケーションは、参照ランタイムを実行します。 これらのランタイムは、マイクロサービスまたはアプリケーション サーバーにすることができます。 これらは、アプリケーションがデプロイするコンポーネントのトランザクション、セキュリティ、スケーラビリティ、コンカレンシー、管理を処理します。
MicroProfile
MicroProfile プロジェクトは、開発者がエンタープライズ Java クラウドネイティブ マイクロサービスを構築するのに役立つ仕様のコレクションを提供します。 Quarkus と Open 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 によって保守されています。 当初の寄稿者は以下のとおりです。
プリンシパルの作成者:
- Asir Vedamuthu Selvasingh | プリンシパル プログラム マネージャー
- Hang Wang | プロダクト マネージャー
- Xinyi Zhang | プリンシパル PM マネージャー
パブリックでない LinkedIn プロファイルを表示するには、LinkedIn にサインインします。
次のステップ
- Azure Container Apps の概要
- Azure Kubernetes Service
- Azure Spring Apps のドキュメント
- Azure 仮想ネットワーク統合
- Azure での仮想マシン