このエントリはQiita Advent Calendar 2017 Microsoft Azureサービスいちから紹介 の17日目です。
ナレッジコミュニケーションの大柳です(@oyngtmhr)。
17日目はAzure Functionsです。今はやりのサーバレスアーキテクチャで、サーバを立てずにコードを実行できます
概要
Azure Functionsは、クラウド上でコード(関数)をサーバなしに手軽に実行できるサービスです。利用者はサーバの管理を気にする必要はなく、アプリケーションロジックに集中することができます。サーバ使用料は不要で、関数を実行した回数と時間に対して課金されます。。
機能
・利用できるプログラミング言語
試験段階、プレビューのものも含めるとC#、JavaScript、F#、Java、Python、PHP、TypeScript、バッチ(.cmd、.bat)、Bash、PowerShellが利用可能です。
1.xの試験段階の言語は、スケーリングが適切に行われず、パフォーマンスが出ないといった可能性があるので、運用時は注意が必要です。
https://docs.microsoft.com/ja-jp/azure/azure-functions/supported-languages から引用
・トリガー
Blob Storageにファイルが格納された時など、イベントをトリガーにしてFunctions関数を起動できます。サポートされるトリガーは、以下の通りです。
HTTPTrigger:HTTP要求をトリガーに、コードを起動します
TimerTrigger:時刻を指定してコードを起動します。cron相当のスケジュール管理ができます。
GitHub webhook:GitHubリポジトリで発生するイベントをトリガーにコードを起動します。
汎用webhook:外部Webサービスのwebhookをトリガーにコードを起動します。
CosmosDBTrigger:Azure Cosmos DBへのデータの追加および更新されたことをトリガーに、コードを起動します。
BlobTrigger:Azure Storage BLOBがコンテナーに追加されたことをトリガーに、コードを起動します。
QueueTrigger:Azure Storageキューにメッセージが配信されたことをトリガーに、コードを起動します。
EventHubTrigger:Azureイベント ハブに送信されたことをトリガーに、コードを起動します。IoTでも使いやすいシナリオです。
ServiceBusQueueTrigger:メッセージ・キューをリッスンし、コードを起動します。。
ServiceBusTopicTrigger:トピックをサブスクライブすることで、コードを起動します。
・スケール
コード実行時に必要なインスタンスが自動的に追加・削除されます。メモリも必要に応じて最大1536MBまで自動的に拡張されます
その他
・Azureのサーバレス系サービスは他にも、Microsoft Flow、Azure Logic Apps、Azure App Service WebJobsがある。
・メモリ使用量を明示的に設定する必要はない。
料金
・従量課金プランとApp Serviceプランがあります。
・従量課金プランの場合は、実行回数とリソース使用量(メモリ使用量×時間)に対して課金されます。
・従量課金プランの場合は、リソース使用量は、平均メモリサイズ(GB)に実行にかかった時間(ミリ秒)を乗じて計算されます。単位はギガバイト秒(GB秒)です。メモリ使用量は、128MB単位で切り上げて測定されます。
・従量課金プランの場合は、月間無料使用分として、月あたり100万回のリクエストと、400,000GB秒のリソース使用量が含まれます。
まとめ
試験段階のものもありますが、多くの種類の言語でコードを記述できます。.cmd、.batのようなレガシーなものがあるのも驚きです。コードの発火元となるトリガーの様々なものを選択でき、Azure Functionsだけで、いろいろな処理を手軽に実装、実行できそうです。