今月のBuildカンファレンスにおいてMicrosoftは、オンデマンドでコードを実行できるサービスAzure Functionsのプレビューを発表した。 Azure Functionsは、Amazon, Google, IBMなどに占有されているイベント駆動型のサーバーレスコンピューティングという人気上昇中の領域にMicrosoftが踏み込んだことになる。
Azure Functionsはコンピューターのプロビジョニングやストレージリソースを心配することなく、外部トリガーによって実行されるコードを開発者が公開することができる。これらのfunctionは— C#, JavaScript, Bash, F#, PHP, PowerShell, PHP で書かれ—、短命の非同期タスクである。プレビューリリースに関するブログ投稿においてMicrosoftは、この種類のサービスの理由について"データ処理"を強調した。
データはどこにでもあります。クラウドにもオンプレミスにも、ますます増加しているインターネットに接続されたデバイスの間にも。組織はデータの値をアンロックするために取り込んでおり、常に圧縮されたタイムテーブル上に構築された高度にスケーラブルなソリューションで応答するために開発者に求めています。ingest ソリューションは、トランザクションの調整、データの取込と処理、イベントにリアルタイムに反応など、オンデマンドまたはスケジュールされたバッチを実装する開発者が必要になることが多い。
開発者は、HTTP呼び出し、Azure QueuesやBlobストレージの変更、cronスケジュールなど様々な方法でAzure Functionsをトリガーする。Microsoftは、HTTPをサポートすることでSoftware-as-a-Serviceアプリからwebhookメッセージを受信するためのAzure Functionsが機能することを強調している。
MicrosoftはAzure Functionsに2つのホスティングオプションを提供している:従来型のApp Serviceプランとダイナミックサービスプラン。この選択は拡張性とコストを意味している。App Serviceプランでは、Azure Functionは専用の仮想マシンで実行され、Functionはそのユーザーのアカウントで実行している他のアプリとサーバーを共有することがある。ダイナミックサービスプランを選択すると、Azure Functionは使用率に応じて自動的にスケールしてアプリのインスタンスをまたいで並列に実行される。App Serviceプランが利用に関係なくホストしているVMに支払うのに対して、このプランではユーザーはインスタンスの実行時間に応じて支払うだけでよい。
開発者は、スターターテンプレートから単一目的のfunctionを作るかスクラッチで開発する。MicrosoftはWebベースの開発環境、ローカル開発へのGitエンドポイント、GitHub, Bitbucket, Visual Studio Team Services, Dropboxなどを使った継続的インテグレーションを提供する。WebベースのIDEは言語特有のシンタックスフォーマットとコード補完ヒント、いくつかの基本的なテストツールを提供する。functionのアプリケーション設定でユーザーはAzure Functionsに使用する(最大1536MBまでの)使用可能なメモリ量、ユーザー認証をするかどうか、サービスメタデータをどうやって公開するかを指定できる。
MicrosoftはAzure FunctionをApp ServicesとWebJobsのような既存のAzureサービスの上に90日間で構築した。Microsoftによるとシンプルさが鍵になったという。データソースや宛先からAzure Functionコードを切り離す"バインディング" と呼ばれる機能を提供した。
Functionsバインディングを使うと開発者は、Functionにデータがどのように流れるかを気にすることなく彼らのFunctionを通じて他のデータソースやサービスとシンプルに対話することができる。 バインディングは、メッセージをキューに追加、Functionの出力変数にJSONを渡すためシンプルにBlobから読み込み、Functionの入力変数からBlobの読みなどのタスクを作成できる。この機能により開発者は、サービスの下で対話しているものについてほとんど知る必要がなく、後から他のサービスに切り替えることも簡単にできる。
Microsoftがサーバーレスコンピューティングモデルを導入するのははじめてではない。このサービスは従来型のPlatform-as-a-Service (PaaS)と同じように聞こえるかもしれないが、Microsoftは実行に応じた請求と消費量に応じたインスタンススケールを提供することで、Azure FunctionsはPaaSのコンセプトを拡張すると主張する。 Azure FunctionsはAWS Lambda, Google Cloud Functions, IBM Bluemix OpenWhisk, Auth0のWebTaskなどの製品に似ている。
Azure Functionsは、オープンソースランタイム、より多い言語のサポート、実行時間の制限がないなど、いくつかの方法でAWS Lambdaとは異なる。 ブログの記事において、テクノロジストとAWSラムダユーザーであるTom Maiarotoは2つのサービスの比較を行い、Azure Functionsは"根本的にLambdaとは大きく違う"と考えた。
"App Service"はAzure cloud functionsのコンテナであり環境です。これはLambdaとは大きく異なっています。実際には2つのサービスは大きく違っていました。
Lambdasは組織的に独立しており、ACFは論理的に"アプリケーション"にグループ化されています。
...
Azureは実際には[EC2 Container Service]タスクとLambdaのブレンドのようなものです。たとえはACFは利用可能なApp Servicesに環境変数をセットできます。AWS Lambdaは環境変数を永続化できるが、ECSタスクはできます。
全体的なアーキテクチャが異なります。 Lambdasはコールドリクエストに応じて新しいものが供給され、(zipファイルから)あなたのコードをデプロイします。後続の要求はコンテナを再利用できるためより高速に処理することができます。ただしNode.js Lambdasにおいてそれが永続されることがなく、コンテナが再利用されるため変数スコープを監視する必要があります。
しかしACFはコールド/ウォーム要求の影響を受けにくいです。Azureは必要に応じてリソースを供給しますが、zipファイル内のどこかにあなたのファイルが"凍結" されているわけではありません。それらはAzureのWebJobs上で実行されます。
...
有効化されていれば、すべてのfunctionは自動的にHTTPエンドポイントにマップされます。LambdaはAPI Gatewayを別途設定する必要があります。API Gatewayはよいのですが、複雑で時間がかかります。サーバーレスフレームワークはLambdas用のAPIを自動的にセットアップすることで、この欠点を補ってくれます。Microsoftは構成を大幅に減らすことでUXのポイントを稼いでいます。
Azure Functionsはプレビュー期間内は無料で、Microsoftは計算量と百万リクエストごとにチャージする予定だ。UXエクスペリエンスはオープンソースとしてGitHubにあり、WebJobs SDKが公開されている。今後Microsoftは言語サポートの追加、ローカル開発オプションとAzure Service Busのような他のMicrosoftサービスとの統合 に取り組んでいるという。
Rate this Article
- Editor Review
- Chief Editor Action