「Azure Functions」はイベント駆動型コード実行サービスだ。2016年11月に一般提供になった。

 基本的な機能は、オブジェクトストレージのBlob StorageやメッセージキューイングのQueue Storageにデータ/メッセージが投入されるといったイベントをトリガーにして、仮想マシンを自動起動しコードを実行するというものだ。

 RESTやWebhookといった汎用的なAPI(Application Programming Interface)を備えており、様々なサービスからの通知で起動できる。例えばオンラインストレージのOneDriveにExcelファイルが保存されたといったこともトリガーにできる。加えて、Functions自体がスケジューラー機能を備えており、設定した曜日や時刻によって、コードを自動実行することも可能だ(図1)。

図1 Azure Functionsの動作
図1 Azure Functionsの動作
[画像のクリックで拡大表示]

 実行するコードの言語として、Node.js、Python、PHP、C#、F#、Bash、PowerShell、Batchを利用できる。Functionsにおいて、それらの言語のコードを読み込んだ仮想マシンをFunctions Appと呼ぶ。

 Functionsでは、ユーザーは基本的に仮想マシンを意識する必要が無い。メモリー容量はコードに合わせて自動的に割り当てられる。さらに、CPU使用率などの条件に応じて、自動的に仮想マシンの台数が増減(スケールアウト/スケールイン)する。スケールアウトの条件については、検証3で考察する。

基盤はApp Serviceと共通

 Functionsは、アプリケーション実行のPaaS「Azure App Service」と同じ基盤で動作する(図2)。

図2 Azure Functionsの基盤はApp Service
図2 Azure Functionsの基盤はApp Service
[画像のクリックで拡大表示]

 実は、これが要因の一つとなって、Functionsといっても二つの料金プランが用意されており、それぞれでコード実行の制約や特性が異なる。二つのサービスがあるといえる。

 まず二つの料金プランを紹介しよう。従量課金プラン(ダイナミックプラン)と定額のApp Serviceプラン(クラシックプラン)だ。

 従量課金プランについては、実行時間と総実行回数に基づいて課金される。これら二つの指標に基づく課金額を合算したものが毎月の請求額になる。

 実行時間による課金では、割り当てられたメモリー容量1GB・実行時間1秒当たりで0.001632円(税別、2017年4月12日時点のオンライン価格)となる。月間で約400TB・秒の無料利用枠があり、それを超えた分について課金される(表1)。

表1 Azure Functions従量課金プランのオンライン価格(税別、2017年4月10日現在)
表1 Azure Functions従量課金プランのオンライン価格(税別、2017年4月10日現在)
[画像のクリックで拡大表示]

 実行回数については、100万実行回数当たり20.4円(同)である。これにも無料利用枠があり、100万実行回数までは無料だ。

 この従量課金プランとは別に、定額のApp Serviceプランがある。App Serviceプランは、正確にはFunctionsの料金プランではない。App Serviceを契約し、それによって確保したリソースを使ってFunction Appを稼働させるものだ。

 WebアプリケーションサーバーのApp Service Web Apps、API作成・管理のAPI Apps、処理フロー実行のLogic Appsなどのインスタンスとともに、契約したリソースを使う。