Microsoft は Dapr (分散アプリケーション ランタイム) 用の Azure Functions 拡張機能を提供していますが、現在、ホストされた Azure Functions クラウド サービスでは使用できません。
あらゆるものにAzureブランドを冠する同社の習慣が、今回の混乱の一因となっているのかもしれません。Azure FunctionsはAzure上で動作するサーバーレスプラットフォームであり、AWS Lambdaの競合製品だと勘違いしている人もいるかもしれませんが、実はそれだけではありません。
Azure Functions は、スケーリング コントローラーと組み合わせたイベントドリブン ランタイムである、と表現する方が正確です。このランタイムでは、C#、Java、JavaScript、Python、または PowerShell でコードを記述し、メッセージ、スケジュール、データ変更などのイベントなどのトリガーに応じて実行できます。
スケーリングコントローラーは、需要に応じて関数のコンピューティング能力を追加または削除します。Azure Functions は Lambda のようなホスト型サービスとして使用できますが、Azure App Service、Kubernetes、Azure IoT Edge など、他の方法でもランタイムをデプロイできます。
Kubernetes の場合、スケール コントローラーの役割は、Microsoft、Red Hat などがサポートする CNCF プロジェクトである KEDA (Kubernetes Event-driven Autoscaling) によって実行されます。
DaprランタイムはAzure Functionsを含むさまざまなプラットフォーム上のサービスをサポートしていますが、新しい拡張機能により、特定のリンクがよりスムーズで使いやすくなります。
マイクロソフトが新しいDapr統合で想定しているのは、まさにこのKubernetesのケースです。プリンシパル・プログラム・マネージャーのジェフ・ホラン氏とマーク・ファッセル氏が、ここでその詳細を説明しています。Daprは2019年10月に導入されましたが、GitHubのプロジェクトページには「Daprは現在、アルファ版としてコミュニティ開発中です。1.0安定版がリリースされるまでは、Daprは本番環境のワークロードには推奨されません」と記載されていますが、ホラン氏とファッセル氏の投稿ではこの制限については触れられていません。
回避策
Dapr は Kubernetes 上でネイティブに実行され (1 つのデプロイメント オプションとして)、状態管理や信頼性の高いメッセージングなどに役立ちます。
「Daprは、Azure Functionsが標準装備では提供していない多くの機能を提供します」とホラン氏はThe Registerに語った。「Kubernetesやクラウドネイティブアプリケーションなどの環境でFunctionsを実行することへの関心が高まっていることに気づき、Daprをより簡単に使えるようにしたいと考えました。この拡張機能により、これまで学習して記述する必要があった10~15行のコードが、『Daprを使う』と書くだけで済むようになります。」
Dapr は Kubenetes ワークロード向けに最適化されているため、当面は拡張機能は Kubenetes または IoT デバイス上で Dapr が現在同時に実行されている環境でのみ動作します。とはいえ、コミュニティの皆様からのご意見をお待ちしております。フルマネージドの Azure Functions サービスでこれらの Dapr 機能を使い始めたいとお考えであれば、喜んで問題を解決いたします。
AzureにはKubernetesサービス(AKS)もあるので、マネージドサービスではなく、AKSでホストされているAzure Functionsを使うことができます。これは本当にメリットがあるのでしょうか?
「生産性と制御性の間のスペクトルについてお話しします」とホラン氏は述べた。「ほとんどの人にとって、マネージドサービスで実行してみるのが良いでしょう。とはいえ、マルチクラウド化を進め、Amazon、Google、Azure、あるいはオンプレミスで実行する必要がある場合など、開発者がより多くの制御を必要とする場合もあります。そのような場合、Kubernetesは優れたソリューションです。DaprとKEDAを導入すれば、さらに優れたソリューションになるでしょう。」
ホラン氏によると、一部の企業はKubernetesを単純に標準化しているという。「Kubernetesがあらゆる場所で使えるように、あらゆるポリシーとコンプライアンスを遵守するために、多くの作業を行ってきました。」
この場合、AKS 上であろうと他の場所であろうと、マネージド サービスを使用するのではなく、Kubernetes 上で Azure Functions を実行するのが合理的です。
Daprが注目を集めているのは、その構成要素がKubernetesにデプロイする開発者にとっての一般的な要件(ステートフルサービスなど)を満たし、管理も容易なためだとホラン氏は主張する。「大きな伸びが見られます。マイクロソフトコミュニティ以外でも、本番環境への移行準備を進めている少数の顧客と協力しています。これは、1.0への適合性検証に役立つでしょう」とホラン氏は述べた。
多くの人にとって、サーバーレスの概念は、市場に最初に登場したAWS Lambdaによってほぼ定義づけられています。AzureやGoogle Cloud Platformは追いつくことができるでしょうか?Hollan氏によると、Azure Functionsには、ランタイムでステートフルな関数を実行できるDurable Functionsなど、独自の機能がいくつかあるとのことです。しかし、Azure Functionsの決定的な違いはオープンソースであることです。Azure FunctionsはGitHubで公開されています。
「サーバーレスコミュニティでは忌み言葉であるベンダーロックインを恐れてほしくありません。私たちは、サーバーレス環境をどこでも実行できるツールを提供します」と彼は語った。®