アプリケーションの展開の種類
Java アプリケーションをクラウドにデプロイするには、いくつかの方法があります。 このユニットでは、次のユニットで Azure が提供するサービスをよりよく理解できるように、さまざまなオプションについて説明します。
仮想マシン、コンテナー、またはサービスとしてのプラットフォーム
主な質問は、仮想マシン (VM)、コンテナー内、またはサービスとしてのプラットフォーム (PaaS) ソリューションにアプリケーションをデプロイするかどうかです。
仮想マシンを使用すると、オンプレミス環境や従来のデータセンター環境に似た環境にいます。 Azure には、メイン オペレーティング システム (Windows および Linux) を実行する一連の構成済み VM が用意されており、それらのマシンを構成して保守する必要があります。
このソリューションは、ほとんどの企業がクラウドに移行する前に既に使用しているものに最も近いため、最初に採用することをお勧めします。 通常、独自の構成管理ソフトウェアをインストールし、お気に入りのバージョンの Java をインストールし、過去の方法と同様の方法で Java ワークロードを実行できます。
VM ソリューションは、構成と保守を行う経験豊富な運用チームがあり、特定のユース ケースがある場合に適切に機能します。 たとえば、一部のネイティブ ライブラリや、Oracle WebLogic Server や IBM WebSphere Application Server などの独自のソフトウェアを使用している場合があります。
コンテナーでは、VM に対して持っているほとんどのコントロールは引き続き使用できますが、操作の労力は少なくなります。 独自の Java 仮想マシン (JVM) または特定のソフトウェアをインストールできます。コンテナーはローカルまたは任意のクラウド プロバイダーで実行されます。
コンテナーは多くの自由を提供するため、VM と同じ問題の一部に苦しんでいます。 独自の JVM を提供する場合は、必要に応じて更新してパッチを適用する必要があります。 その結果、Docker イメージでは、コンテナーを適切に維持するために、優れた継続的インテグレーションと継続的デリバリー (CI/CD) ツールチェーンが必要になります。 Docker イメージはローカルで実行でき、VM よりも軽いため、優れた開発者エクスペリエンスも提供します。
サービスとしてのプラットフォーム ソリューションを使用すると、クラウド プロバイダーはメンテナンスと運用の負担のほとんどを処理します。 オペレーティング システム (OS) の更新プログラム、Java パッチ、セキュリティ、コンプライアンスがすべて提供されます。 その結果、通常、このオプションはセキュリティが強化され、コストが削減されます。 また、一部のスケーラビリティ機能も備えています。これにより、アプリケーションが顧客のニーズに合わせてより適切に適応できるようになります。 また、負荷の下でパフォーマンスが向上し、トラフィックが少ない場合のコストも削減されます。
PaaS ソリューションを使用すると、より多くのことを実現できます。 自動構成の設定、シークレットの管理と読み込み (たとえば、Azure Key Vault を使用)、アプリケーションの監視、ライブ プロファイリング セッションの起動、ダウンタイムゼロのデプロイの有効化を行うことができます。
配置オプション
VM、コンテナー、または PaaS ソリューションのどちらを使用する場合でも、通常、次の 2 つの方法のいずれかで Java アプリケーションをクラウドにデプロイできます。
- ソース コードのデプロイ: ソース コードを Git リポジトリにコミットすると、クラウド プロバイダーはアプリケーションをコンパイル、ビルド、パッケージ化するプロセスを実行します。
- JAR、WAR、または EAR ファイルのデプロイ: 通常は実行可能 JAR (Java ARchive) ファイルとしてアプリケーションをパッケージ化しますが、WAR (Web アプリケーション ARchive)、EAR (エンタープライズ アプリケーション ARchive)、およびその他のファイル形式も可能です。 その後、クラウド プロバイダーによって実行可能ファイルが実行されます。
これら 2 つのデプロイ オプションは、Java アプリケーションを実行する従来の方法です。 どちらのオプションでも、ビルド プロセスは通常似ていますが、主な違いは、そのプロセスが実行される場所です。 クラウド プロバイダーにビルドを実行させる方が簡単です。この方法では、クラウド プロバイダーは独自のセキュリティ チェックとパッチを適用します。 アプリケーションをローカルでビルドするか、GitHub Actions などの CI/CD プラットフォームを使用することで、柔軟性と制御性が向上します。
サーバーレス関数
サーバーレス関数 (具体的には Azure Functions) は、これまで見てきたさまざまなソリューションが混在しており、非常に具体的な機能を提供します。サーバーレス関数は、短時間実行することを目的としています。 通常、関数は HTTP 要求などのイベントによって目覚め、スリープ状態に戻るまで数分間 "ホット" なままです。
関数は、前に説明した PaaS ソリューションと機能を共有します。 Azure では、PaaS ソリューション (Azure App Service) とサーバーレス ソリューション (Azure Functions) は技術的に似ていて、いくつかの一般的なコードとサービスを共有しています。
デプロイ オプションの場合、関数は通常 JAR ファイルで動作します。 Docker などの他のオプションも利用できますが、あまり人気がなく、通常はパフォーマンスも低下します。 これは、基になるプラットフォームが JAR ファイルの場合と同じ方法で最適化できないためです。
サーバーレス関数は、その性質上、具体的にコーディングする必要があります。 これらの機能は、実行するクラウド プロバイダーによって異なり、短い期間では、キャッシュや HTTP セッション レプリケーションなどの従来のソリューションの使用が複雑になります。
サーバーレス関数は適切にスケーリングでき、使用率の低い環境に最適な価格を提供します。 同時に、最も要求の厳しいトラフィック負荷に対応できます。