サーバーレス コンピューティングが、自分のビジネス ニーズに適しているかどうかを判断する
サーバーレス コンピューティングが自分に適しているかどうかを容易に判断できるように、まずサーバーレスとはどのようなものかを説明します。
サーバーレス コンピューティングとは
サーバーレス コンピューティングは、Function as a Service (FaaS)、またはクラウド プラットフォーム上でホストされるマイクロサービスと考えることができます。 ご利用のビジネス ロジックは関数として実行され、インフラストラクチャのプロビジョニングまたはスケーリングを手動で行う必要はありません。 インフラストラクチャはクラウド プロバイダーによって管理されます。 ご利用のアプリは、負荷に応じて自動的にスケールアウトまたはスケールダウンされます。 Azure には、この種のアーキテクチャを構築するための方法がいくつか用意されています。 最も一般的な 2 つのアプローチは Azure Logic Apps と Azure Functions です。このモジュールでは後者を取り上げます。
Azure Functions とは
Azure Functions はサーバーレス アプリケーション プラットフォームです。 これにより、開発者は、インフラストラクチャをプロビジョニングすることなく実行できるビジネス ロジックをホストできます。 Azure Functions には、組み込みのスケーラビリティが用意されており、使用したリソースに対してのみ料金が請求されます。 C#、Java、JavaScript、Python、PowerShell など、好みの言語で関数コードを記述することができます。 NuGet や npm などのパッケージ マネージャーのサポートも含まれているので、ビジネス ロジック内で一般的なライブラリを使用することができます。
サーバーレス コンピューティング ソリューションの利点
サーバーレス コンピューティングは、クラウドでビジネス ロジックのコードをホストする場合に適したオプションです。 Azure Functions などサーバーレス サービスを使用すると、好みの言語でビジネス ロジックを記述できます。 スケーリングは自動的に行われます。管理対象のサーバーはありません。予約された時間ではなく、使用内容に基づいて課金されます。 サーバーレス ソリューションには、他にも検討すべき特性がいくつかあります。
インフラストラクチャの割り当て超過を回避する
仮想マシン (VM) サーバーをプロビジョニングして、ピーク負荷に対応するために十分なリソースを構成したとします。 負荷が小さい場合、使用していないインフラストラクチャに対しても料金がかかっている可能性があります。 サーバーレス コンピューティングでは、自動的なスケールアップまたはスケールダウンにより割り当ての問題を容易に解決することができ、ご利用の機能で作業が処理されているときのみ課金されます。
ステートレスなロジック
ステートレスな関数は、サーバーレス コンピューティングの有力候補です。関数のインスタンスがオンデマンドで作成され、破棄されます。 状態が必要な場合は、関連付けられているストレージ サービスに格納できます。
イベント ドリブン
Functions は "イベント ドリブン" です。 HTTP 要求の受信などのイベント ("トリガー" と呼ばれます)、またはキューに追加されているメッセージへの応答でのみ実行されます。 トリガーは関数定義の一部として構成します。 この方法によって、データの取得元 (トリガー/入力バインド) とデータの送信先 (出力バインド) を宣言できるようになるため、コードが大幅に単純化されます。 キュー、BLOB、ハブなどを監視するためのコードを記述する必要はありません。 純粋にビジネス ロジックに専念できます。
Functions は従来のコンピューティング環境で使用できます。
Functions は、サーバーレス コンピューティングの重要なコンポーネントであり、任意の種類のコードを実行するための一般的なコンピューティング プラットフォームでもあります。 アプリのニーズが変化する場合は、プロジェクトを取得してサーバーレス以外の環境に配置できます。 これにより柔軟性が実現し、スケーリングを管理したり仮想ネットワーク上で実行したりするだけではなく、関数を完全に分離することもできます。
サーバーレス コンピューティング ソリューションの欠点
従量課金プランの Azure Functions で提供されるサーバーレス コンピューティングは、ビジネス ロジックをホストするのに適切なソリューションとは限りません。 サーバーレス コンピューティングでご利用のサービスをホストするための決定に影響を与える可能性がある Functions の特性をいくつか示します。
実行時間
既定では、関数には 5 分のタイムアウトが設定されます。 このタイムアウトは、最大 10 分に設定することができます。 実行に 10 分以上必要な関数は、VM 上でホストすることができます。 さらに、サービスが HTTP 要求を介して開始され、その値を HTTP 応答として求める場合は、タイムアウトが 2.5 分にまで制限されます。 ただし、Durable Functions と呼ばれるオプションもあります。これを使用すると、タイムアウトなしで複数の関数の実行を調整することができます。
実行頻度
もう 1 つの特性は実行頻度です。 クライアントによって関数が継続的に実行されていることが予想される場合は、使用量を見積もり、それに応じて関数の使用のコストを計算することをお勧めします。 ご利用のサービスを VM 上でホストする方が安くなる可能性もあります。
関数のスケーリング時には、10 秒ごとに関数アプリ インスタンスを 1 つだけ作成でき、合計では最大 200 個のインスタンスを作成できます。 各インスタンスでは複数の同時実行を提供できるため、1 つのインスタンスで処理できるトラフィックには制限の設定がないことに留意してください。 トリガーの種類によって、スケーリング要件も異なるため、選択するトリガーとその制限についてご確認ください。