アプリケーションの展開の種類

完了

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 ソリューションのいずれを使う場合でも、Java アプリケーションをクラウドにデプロイするには、通常、次の 2 つの方法があります。

  • ソース コードのデプロイ: ソース コードを Git リポジトリにコミットします。アプリケーションのコンパイル、ビルド、パッケージ化のプロセスは、クラウド プロバイダーによって実行されます。
  • JAR、WAR、または EAR ファイルのデプロイ:アプリケーションをパッケージ化します。通常は実行可能な JAR (Java ARchive) ファイルとしてパッケージ化しますが、WAR (Web Application ARchive) や EAR (Enterprise Application ARchive)、またはその他のファイル形式も使用できます。 その後、クラウド プロバイダーによって実行可能ファイルが実行されます。

これら 2 つのデプロイ オプションは、Java アプリケーションを実行する従来の方法です。 どちらのオプションでも、ビルド プロセスは通常似ています。主な違いは、そのプロセスが実行される場所です。 クラウド プロバイダーにビルドしてもらう方法の方が簡単です。この方法では、クラウド プロバイダーが独自のセキュリティ チェックとパッチを適用します。 アプリケーションをローカル環境で、または GitHub Actions などの CI/CD プラットフォームを使用してビルドすると、柔軟性が高くなり、よりきめ細かく制御できます。

サーバーレス関数

サーバーレス関数、より具体的には Azure Functions は、これまで見てきたさまざまなソリューションを組み合わせたものであり、独自の機能を備えています。サーバーレス関数は、短時間実行することを目的としています。 通常、関数はイベント (HTTP 要求など) によって起動され、数分間 "ホット" な状態を維持した後、スリープ状態に戻ります。

関数は、前に説明した PaaS ソリューションと機能を共有しています。 Azure では、Microsoft の PaaS ソリューション (Azure App Service) とサーバーレス ソリューション (Azure Functions) は技術的に類似しており、一部の一般的なコードおよびサービスを共有しています。

デプロイ オプションの場合、関数では通常 JAR ファイルが使用されます。 Docker などのその他のオプションも使用できますが、あまり一般的ではなく、同様のパフォーマンスを実現できないことがよくあります。 基になるプラットフォームで、それらを JAR ファイルの場合と同じように最適化できないためです。

サーバーレス関数は、その性質上、具体的にコーディングする必要があります。 その機能は、実行されるクラウド プロバイダーによって異なり、寿命が短いため、キャッシュや HTTP セッション レプリケーションなどの従来のソリューションの使用が複雑になります。

サーバーレス関数は十分にスケーリングすることができ、使用率の低い環境にとって最適な価格を実現します。 同時に、最も要求の厳しいトラフィック負荷に対応することもできます。