「Azure functionsってどんなサービスだろう」
当記事をお読みのあなたは、このような疑問をお持ちではないでしょうか。Azure functionsはサーバーのデプロイや実行環境用のランタイムが不要となる、いわゆるサーバーレスなプログラム実行環境です。
当記事ではAzure functionsの特徴や用途、Azure以外のクラウドのサーバーレス環境について解説します。
Azureの概要やメリットについては、下記の記事で解説しています。ぜひ本記事と併せてご覧ください。
Microsoft Azureとは|何ができる?入門内容からわかりやすく解説
Azure functionsとは
Azure functionsとは、サーバーレスのプログラム実行環境を提供するPaaS(Platform as a Service)です。
サーバーレスとは仮想サーバーと違い、サーバーのデプロイが不要です。また、プログラム実行に必要なランタイムもAzure functions基盤に搭載されています。よって利用者は、コーディングのみ行うことで、プログラム実行が可能です。
Azure functionsで利用できるプログラミング言語に以下があります。
- C#
- Java
- JavaScript
- PowerShell
- Python
上記以外の言語もカスタム ハンドラーを使用すれば実行可能なため、 実質的にはすべての言語を扱うことが可能です。
多くの機能と連携が可能ですが、監視ツールであるAzure Application Insightsとも連携できます。連携によって、パフォーマンスの異常検知や分析も容易に行うことが可能です。
Azure functionsの特徴
以下では、Azure functionsの特徴を6つ紹介します。
- サーバーレスなプログラム実行環境である
- 自動でスケーリング
- イベントをトリガーとしてプログラムを実行する
- ステートフルでプログラムを実行できる
- マイクロサービスを作りやすい
- 実行時間や実行回数に応じた課金が発生する
サーバーレスなプログラム実行環境である
Azure functionsの特徴に、サーバーレスなプログラム実行環境であることがあります。先述の通り、サーバーレスはサーバーのデプロイが不要です。また、プログラム実行用のランタイムが用意されているため、コード実装のみでプログラム実行が可能となります。
サーバーレスのサービスが普及した要因は、大きく分けて以下の2つです。
- 需要が大きく変動するタイミングを読みにくいこと
- APIで扱いやすいサービスが増えたこと
オンプレミスやクラウドの仮想サーバーは、サーバーの台数やスペックを増減させてリソースの需要に対応する必要があります。しかし、増減させるタイミングを誤ったり、遅れてしまったりすると需要についていけずサーバーがダウンしてしまう点が課題です。
そのため、需要を最大限に見積もってサーバーの台数を用意する必要がありました。サーバーレスであれば、サーバーの台数を意識することなく需要の増減に対応できます。
また、APIで扱いやすいサービスが増えたことも要因です。サーバーレスであっても他のサービスと組み合わせやすくなったことが、サーバーレス普及に貢献しています。
自動でスケーリング
Azure functionsは、リソースのスペックを自動でスケーリングできる特徴があります。スケーリングとは処理能力の調節のことです。
自動スケーリングで得られるメリットとして以下の2つがあります。
- 需要が増加してもサーバーがダウンしにくい
- コストの最適化につながる
Azure functionsはリソースの需要に応じて自動でスケーリングを行うため、急な需要の増加にも対応可能です。需要が増加して処理能力が追いつかないと、サーバーがダウンしてしまい、企業は機会損失になります。自動スケーリングによってサーバーのダウンを予防し、結果的に売上増加につながるでしょう。
また、コストの最適化にも貢献します。自動スケーリングなしの場合は、サーバーや需要の監視が必要になります。サーバーのダウンを避けるためにも、ある程度需要よりも多いリソースを積んでおくことが必要です。自動スケーリングによって、リソースを最適化することが可能なため、余分なリソース費用がかからずにすみます。
イベントをトリガーとしてプログラムを実行する
Azure functionsは、イベントをトリガーとしてプログラムを実行します。プログラムを実行するためには、何かしらの開始アクションが必要です。一般的にはスタートボタンによる実行開始をイメージするのではないでしょうか。
Azure functionsもスタートボタンによる実行が可能です。また、イベントの例は以下になります。
- ファイルの更新
- 設定した条件の通信を受信
- 時刻
イベントをトリガーとすることで「必要なときにだけプログラムを実行する」リソース最適化を実現可能です。後述する「実行時間分だけ課金が発生する」特徴の起因となっています。
ステートフルでプログラムを実行できる
Azure functionsは、ステートフルでプログラムを実行可能です。拡張機能であるDurable Functionsを用いることで、ステートフルなプログラム実行を実現しています。
ステートフルとは、前回までのセッション状態を維持し、次回以降の通信に活かす特徴を指しています。
詳しくは下記の記事で解説していますので参考にしてください。
サーバーレスではステートフルなプログラム実行が難しい、という問題がありました。前回までのセッション情報を維持することが難しかったためです。
しかし、Azure functionsのDurable Functionsは、セッション情報を維持する仕組みを整えたため、この課題を解消しています。よってAzure functionsはサーバーレス環境でありながら、ステートフルなプログラム実行が可能です。
マイクロサービスを作りやすい
Azure functionsはマイクロサービスを作りやすい特徴があります。マイクロサービスとは小さいサービスを作成しておき、後から組み合わせることで、本サービスを運用に利用できるというものです。
マイクロサービスの場合、該当部分のみを改修をすればすむため、改修作業によるサービス全体の運用への影響を小さくすることができます。
Azure functionsはトリガーにできるイベント、連携できる機能が多いといえるでしょう。そのため、多くの機能と組み合わせることで、マイクロサービスを実現しやすいです。
実行時間や実行回数に応じた課金が発生する
Azure functionsの従量課金プランは、実行時間や実行回数に応じた課金が発生します。プログラムの実行時間は、イベントがトリガーされてからコーディングしたプログラムの実行が完了するまでの時間です。実行回数は何度イベントがトリガーされたかで、カウントします。
Azure functionsはサーバーレスのため、サーバーやストレージの料金がかかりません。プログラムの実行のみが課金額に影響することが特徴といえます。
Azure functionsでできること
Azure functionsは連携できるサービスが多いため、組み合わせ次第で多くのサービスに利用可能です。例として以下を紹介します。
- Azure Blob Storageにリサイジングした画像をアップロード
- IoTデータをリアルタイムに構造化
- Web APIのビルド・デプロイ
- タスクのスケジュール処理
- サーバーレス ワークフローを作成する
Azure Blob Storageにリサイジングした画像をアップロード
Azure Blob Storageの画像アップロードをトリガーとしたAzure functionsの事例です。画像がAzure Blob Storageにアップロードされたら、Azure functionsが画像を後に利用したいサイズにリサイジングする処理を走らせることで実現できます。Azure Blob Storageのフォルダ単位(フォルダ内のファイル)の変更イベントをトリガーとするとよいでしょう。
Azure Blob Storageを例としていますが、Cosmos DBなどデータベースへの書き込みもトリガーとすることが可能です。また、Azure functionsとAzure Batchを組み合わせることでバッチ処理にも対応することができます。
IoTデータをリアルタイムに構造化
IoTデバイスから送られてくるデータをAzure functionsが処理して、リアルタイムにデータベース等に反映が可能です。IoTデバイスのデータはAzure IoT Hubに保存できます。
Azure IoT Hubにデータが送られたことをトリガーに、Azure functionsの処理を開始することでデータ分析に向けた処理の自動化を実現可能です。処理を終えたデータは、データベースやストレージにデータ転送するとよいでしょう。
なお、こちらの用途を実現するためにはIoTデバイス側にもAzure IoT Hubへデータを転送するように設定をしておく必要があります。
Web APIのビルド・デプロイ
HTTP通信をトリガーとして、Azure functionsの処理を走らせることが可能です。APIをAzure functionsで実装しておき、Webサーバーのように受け取ったHTTP通信に対する処理を走らせればWeb APIとしての機能を果たすことができます。実質的に全てのプログラミング言語に対応しているため、自身が得意な言語でAPIを作成することが可能です。
もちろん、受け取ったHTTP通信をトリガーにデータベースに内容を更新するなど、さまざまな用途に活用することもできます。
タスクのスケジュール処理
Azure functionsではタイマーをトリガーとして、決まった時刻に処理を走らせることが可能です。毎日、毎週、毎月など定期的に行いたいタスクを、決まった時刻に実施させることができます。
日々のメンテナンスやバックアップなどのルーティーンワークを、Azure functionsに自動化させましょう。ルーティーンワークに時間を割くことなく、ユーザーが日々の開発業務に集中することにつながります。Azure functionsの費用は回数と実行時間で決まるため、タスク用のサーバー費用が不要となることも嬉しい点です。
サーバーレス ワークフローを作成する
Azure functionsは拡張機能であるDurable Functionsを用いることで、ステートフルなプログラムを実行可能です。ステートフルなプログラムを実行可能なため、多くのパターンのサーバーレスワークフローを作成できます。
例としては以下の通りです。
- 複数の関数とキューを用意しておき、各関数間でキューを用いる
- 複数の関数を並列実行させ、並列した全ての関数が実行完了してから次の処理に進む
キューは並列の前後に用意する - 1つの関数が行う長時間の処理の一部を、もう1つの関数がトリガーとして処理させる
- 1つの関数の処理を終え、人間による処理が必要な場面で人間が制限時間内に対応しない場合に処理を走らせる
Azure functionsの料金体系
Azure functionsには以下の通り、3種類の料金プランがあります。
プラン | |
---|---|
従量課金プラン |
実行時間:$0.000016/GB 秒 総実行回数:100万実行回数あたり $0.20 |
Premiumプラン |
vCPU使用時間:$0.17 vCPU/時間 メモリ使用時間: $0.0122GB/時間 |
App Serviceプラン |
標準:$0.10/時間 Premium:$0.20/時間 |
従量課金プランは、Azure functionsによるプログラム実行時間によるリソース使用量と総実行回数に比例します。
Premiumプランは実行時間や実行回数ではなく、vCPUやメモリの使用時間で料金が決まります。
App ServiceプランはApp Serviceの料金に基づいた料金設定です。
実行するプログラム内容にもよりますが、料金を単純に比較すると下記のようになります。
従量課金プラン < App Serviceプラン < Premiumプラン
従量課金プラン(無料枠あり)
Azure functionsの従量課金プランは先述の通り、プログラム実行時間によるリソース使用量と総実行回数に比例します。総実行回数とはトリガーされたプログラム実行の回数です。サーバーレスのサービスのため、仮想マシンの料金はかかりません。
しかし、それゆえのデメリットとして従量課金プランには、以下の特徴があります。
- タイムアウト時間が短い→長時間の処理は実施できない
- コールドスタートとなる可能性がある→起動時間が長くなる
従量課金プランは毎月、以下の無料枠が用意されています。
- 実行時間:400,000GB 秒
- 総実行回数:100万実行回数
従量課金プランは上記の無料枠を上回って実行されると、料金が発生するプランです。
ギガバイト秒(GB 秒)単位とは1GBのメモリを1秒間利用する単位を表しています。秒はミリ秒単位でカウント、メモリは128MBで切り上げです。1つの関数実行の最小実行時間は100ミリ秒、最小メモリは128MBとなります。
Premiumプラン
Premiumプランは、従量課金プランよりもパフォーマンスが向上しているプランです。従量課金プランのデメリットとなっていたタイムアウト時間の短さやコールドスタートが解消されています。ただし、事前に仮想マシンを1台以上割り当てておく必要があります。サーバーレスとは仮想マシンが存在しないわけではなく、仮想マシンが存在するが気にしなくても使えるようになっているサービスだからです。
Premiumプランではプログラムの実行時間や実行回数に比例した料金ではなく、割り当てた仮想マシンのvCPUとメモリに比例します。Premiumプランで割り当てるインスタンスには3つのプランが用意されています。
節約プランとは、長期で固定の利用量を割り当てておくことで、料金の割引がされるプランです。
- 従量課金制
- 1年節約プラン
- 3年節約プラン
App Serviceプラン
App Serviceプランとは、Azure functionsをAzure App Serviceと連携させて利用し、App Serviceの料金に含めるプランです。App ServiceはPremiumプランと同様に、事前に仮想マシンを割り当てておく必要があります。
用途として、Durable Functionsを使用できない、かつ、実行時間の長いケースに利用しましょう。従量課金プランのデメリットである、長時間の実行に向かない点やコールドスタートである点に対応が可能だからです。
他社クラウドのサーバーレスサービスとの違い
Azure functionsはAzureのサーバーレスサービスです。同様に他社クラウドにもあるサーバーレスサービスを紹介します。紹介するサービスは以下の2つです。
- AWS lambda
- GCP Cloud Functions
先に結論を述べると、上記2つはAzure functionsとの違いはほとんどありません。そのため、クラウド選定などを考える際にサーバーレスサービスの違いが決定打となることはないでしょう。
AWS lambda
Azure functionsとAWS lambdaの主な違いは以下の通りです。
実行環境 | 最大タイムアウト時間 | |
---|---|---|
Azure functions | サーバーレス App Service |
最大で無制限(Premiumプラン) |
AWS lambda | サーバーレスのみ | 15分 |
両者の違いとして、実行環境の違いが挙げられます。AWS lambdaはサーバーレス環境の実行のみであることに対し、Azure functionsはサーバーレス環境とAzure App Service(PaaS)の環境で実行可能だからです。
また、両者のタイムアウト時間にも違いがあります。AWS lambdaは最大タイムアウト時間が15分に設定されています。一方で、Azure functionsはPremiumプランを利用すると最大タイムアウト時間を無制限にすることも可能です。
GCP cloud functions
Azure functionsとGCP cloud functionsの主な違いは以下の通りです。
実行環境 | 最大タイムアウト時間 | 料金 | |
---|---|---|---|
Azure functions |
サーバーレス |
最大で無制限(Premiumプラン) |
従量課金プラン 実行時間:$0.000016/GB 秒 総実行回数:100万実行回数あたり $0.20 |
GCP cloud functions | サーバーレスのみ | 9分 |
実行時間:$0.0000025/GB 秒 総実行回数(200万回を超えたら):100 万実行回数あたり $0.20 |
両者の違いとして、実行環境の違いが挙げられます。GCP cloud functionsはサーバーレス環境の実行のみだからです。
また、両者のタイムアウト時間にも違いがあり、GCP cloud functionsは最大タイムアウト時間が9分に設定されています。
料金にも違いが見られます。GCP cloud functionsはリージョンごとに料金がTier1,2に別れており、今回はTier1のみを取り上げました。実行時間や総実行回数あたりの料金はAzure functionsよりも安いです。なお、Tier2でもGCP cloud functionsの方がAzure functionsの従量課金プランより安くなります。
「実行環境の違い」「タイムアウト時間の違い」「料金の違い」の3点からAzure functionsの方が柔軟性に富んでいる一方で、GCP cloud functionsの料金設定の安さには魅力があるといえるでしょう。
まとめ
Azure functionsの概要、特徴、ユースケース、料金、他社クラウドとの違いについて解説しました。Azure functionsはサーバーレスのサービスであり、それゆえの多くのメリットを享受したプログラム実行環境として用いられています。Azure functionsは料金プランが3種類あることも、他社クラウドのサーバーレスサービスとの違いです。
柔軟性に富んだ選択肢から、ベストな環境を構築できるようにAzure functionsのご利用をぜひご検討ください。