コンテナーとサーバーレスの手法の組み合わせ

ヒント

このコンテンツは eBook の「Azure 向けクラウド ネイティブ .NET アプリケーションの設計」からの抜粋です。.NET Docs で閲覧できるほか、PDF として無料ダウンロードすると、オンラインで閲覧できます。

Cloud Native .NET apps for Azure eBook cover thumbnail.

クラウドネイティブ アプリケーションでは、通常、コンテナーとオーケストレーションを活用するサービスが実装されます。 多くの場合、アプリケーションのサービスの一部を Azure Functions として公開する機会があります。 ただし、Kubernetes にデプロイされたクラウドネイティブ アプリでは、この同じツールセット内で Azure Functions を活用すると便利です。 Docker コンテナー内で Azure Functions をラップして、Kubernetes ベースのアプリのその他の部分と同じプロセスおよびツールを使用してデプロイすることができます。

コンテナーとサーバーレスの併用が適しているケース

Azure 関数には、デプロイされているプラットフォームに関する情報はありません。 シナリオによっては、特定の要件があり、関数コードを実行する環境をカスタマイズする必要が生じる場合があります。 既定のイメージでサポートされていない依存関係または構成をサポートするカスタム イメージが必要となります。 このような場合は、関数をカスタム Docker コンテナーにデプロイするのが理にかなっています。

Azure Functions でコンテナーを使用すべきでないケース

従量課金制を使用する場合は、コンテナーで関数を実行することはできません。 さらに、関数を Kubernetes クラスターにデプロイした場合は、Azure Functions によって提供される組み込みのスケーリングを利用できなくなります。 この章の前半で説明した Kubernetes のスケーリング機能を使用する必要があります。

サーバーレスと Docker コンテナーを組み合わせる方法

Docker コンテナー内で Azure 関数をラップするには、Azure Functions Core Tools をインストールしてから、次のコマンドを実行します。

func init ProjectName --worker-runtime dotnet --docker

プロジェクトが作成されると、Dockerfile と、dotnet に構成されたワーカー ランタイムが含まれます。 ここで、関数をローカルで作成してテストできます。 docker builddocker run コマンドを使用してこれをビルドし、実行します。 Docker サポートを使用して Azure Functions のビルドを開始する詳細な手順については、カスタム イメージを使用した Linux での関数の作成に関するチュートリアルを参照してください。

サーバーレスおよび Kubernetes を KEDA と組み合わせる方法

この章では、Azure Functions のプラットフォームが需要に応じて自動的にスケールアウトされることを確認しました。 ただし、コンテナー化された関数を AKS にデプロイした場合、組み込みのスケーリング機能は失われます。 その解決策として、Kubernetes-based Event Driven (KEDA) が用意されています。 これにより、コンテナー化された関数を含め、event-driven Kubernetes workloads, の高度な自動スケールが可能になります。

KEDA では、Docker コンテナー内の関数のランタイムにイベントドリブン スケーリング機能が提供されます。 KEDA は、負荷に基づいて、ゼロのインスタンス (イベントが発生していない場合) から n instances までスケーリングできます。 これにより、Kubernetes オートスケーラー (Horizontal Pod Autoscaler) にカスタム メトリックを公開することで、自動スケールが可能になります。 KEDA で Functions のコンテナーを使用すると、任意の Kubernetes クラスターにおいてサーバーレス関数の機能をレプリケートできるようになります。

現在、KEDA プロジェクトは Cloud Native Computing Foundation (CNCF) によって管理されていることにご注意ください。