「Azure Functionsってどんなサービスだろう」
当記事をお読みのあなたは、このような疑問をお持ちではないでしょうか。Azure Functionsはサーバーのデプロイや実行環境用のランタイムが不要となる、いわゆるサーバーレスなプログラム実行環境です。
当記事ではAzure Functionsの特徴や用途、Azure以外のクラウドのサーバーレス環境について解説します。
★Azureの概要やメリットについてはこちら
Microsoft Azureとは|何ができる?入門内容からわかりやすく解説
Azure Functionsとは
Azure Functionsとは、サーバーレスのプログラム実行環境を提供するFaaS(Function as a Service)です。
サーバーレスとは、「サーバーの管理が不要」である実行環境を指します。OSの管理が必要な仮想サーバーと違い、自身でサーバーをデプロイする必要がなく、プログラム実行に必要なランタイムもAzure Functions基盤であらかじめ用意されています。開発者は、プログラムを記述し、デプロイするだけで実行が可能です。
Azure Functionsでは、以下のプログラミング言語を利用できます。
- C#
- Java
- JavaScript
- PowerShell
- Python
上記以外の言語もカスタム ハンドラーを使用すれば実行可能なため、 実質的にはすべての言語を扱うことが可能です。
Azure Functionsは、他のAzureの機能と連携して利用できます。例えば、監視ツールであるAzure Monitor Application Insightsと連携することで、パフォーマンスの異常検知や分析を容易に行うことが可能です。
言語 |
対応バージョン |
C#(.NET) |
.NET Framework 4.8 |
JavaScript |
Node.js 14 |
Java |
Java8 |
Python |
Python 3.8 |
PowerShell |
PowerShell 7.2 |
Azure Functionsでは、利用できるプログラミング言語のバージョンが指定されています。
Functionsのランタイムが、プログラミング言語の新しいバージョンに対応するまで時間がかかるため、最新のバージョンのプログラミング言語が使えない場合があります。一方で、セキュリティの観点から古いバージョンのプログラミング言語が利用できなくなる場合もあるので注意が必要です。
古いバージョンでしか動かないプログラムの場合、動作しなくなるのは突然です。プログラミング言語に新しいバージョンが発表された場合、そのバージョンでも正しく動作することを確認し続けるようにしましょう。
Azure Functionsの特徴・メリット
以下では、Azure Functionsの特徴を6つ紹介します。
- サーバーレスなプログラム実行環境である
- 自動でスケーリング
- イベントをトリガーとしてプログラムを実行する
- ステートフルでプログラムを実行できる
- マイクロサービスを作りやすい
- 実行時間や実行回数に応じた課金が発生する
サーバーレスなプログラム実行環境である
Azure Functionsの特徴は、サーバーレスなプログラム実行環境であることです。先述の通り、サーバーレスはサーバーの管理が不要であり、プログラムを実行するランタイムが用意されているため、プログラムを作成するだけでプログラム実行が可能となります。
サーバーレスのサービスが普及した要因は、大きく分けて以下の2つです。
- アクセス数が大きく変動するタイミングを予想しにくい
- 開発者がプログラムの作成に注力できる
オンプレミスやクラウドの仮想サーバーを利用する場合、アクセス数に応じてサーバーの台数やスペックを増減させてリソースの需要に対応します。しかし、増減させるタイミングを誤ったり、対応が遅れてしまったりするとアクセスが集中してサーバーの負荷が高くなります。その結果、ユーザーにストレスを与え、最悪の場合サービスが停止してしまうこともあります。
そのため、需要を最大限に見積もってサーバーの台数を用意する必要がありましたが、サーバーレスであれば、サービス側での自動調整によりサーバーの台数を意識することなくアクセス数の増減に対応できます。
また、サーバーの管理が不要のため、OSやランタイムのセキュリティ対策やバージョンアップ対応などの作業が一切不要です。プログラム以外はAzure Functionsのサービスで管理してくれるため、開発者は動作するプログラムの開発にのみ集中できます。
自動でスケーリング
Azure Functionsは、リソースのスペックを自動でスケーリングできる特徴があります。スケーリングとは処理能力の調節のことです。
自動スケーリングで得られるメリットとして以下の2つがあります。
- 需要が増加してもサーバーがダウンしにくい
- コストの最適化につながる
Azure Functionsはリソースの需要に応じて自動でスケーリングを行うため、急な需要の増加にも対応可能です。需要が増加して処理能力が追いつかないと、サーバーがダウンしてしまい、企業は機会損失になります。自動スケーリングによってサーバーのダウンを予防し、結果的に売上増加につながるでしょう。
また、コストの最適化にも貢献します。自動スケーリングなしの場合は、サーバーや需要の監視が必要になります。サーバーのダウンを避けるためにも、ある程度需要よりも多いリソースを積んでおくことが必要です。自動スケーリングによって、リソースを最適化することが可能なため、余分なリソース費用がかからずにすみます。
イベントをトリガーとしてプログラムを実行する
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 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としての機能を実現できます。カスタムハンドラーを利用することで、実質的に全てのプログラミング言語に対応可能であるため、自身が得意な言語でWeb APIを作成・実行することが可能です。
HTTP通信をトリガーにデータベースに内容を更新したり、他のサービスを受け取るなど、さまざまな用途に活用できます。
タスクのスケジュール処理
Azure Functionsではタイマーをトリガーとして、決まった時刻に処理を走らせることが可能です。毎日、毎週、毎月など定期的に行いたいタスクを、決まった時刻に実施させることができます。
日々のメンテナンスやバックアップなどのルーティーンワークを、Azure Functionsに自動化させましょう。ルーティーンワークに時間を割くことなく、ユーザーが日々の開発業務に集中することにつながります。Azure Functionsの費用は回数と実行時間で決まるため、タスク用のサーバー費用が不要となることも嬉しい点です。
サーバーレス ワークフローを作成する
Azure Functionsは拡張機能であるDurable Functionsを用いることで、ステートフルなプログラムを実行可能です。ステートフルなプログラムを実行可能なため、多くのパターンのサーバーレスワークフローを作成できます。
例としては以下の通りです。
- 複数の関数とキューを用意しておき、各関数間でキューを用いる
- 複数の関数を並列実行させ、並列した全ての関数が実行完了してから次の処理に進むキューは並列の前後に用意する
- 1つの関数が行う長時間の処理の一部を、もう1つの関数がトリガーとして処理させる
- 1つの関数の処理を終え、人間による処理が必要な場面で人間が制限時間内に対応しない場合に処理を走らせる
AIの推論サービス構築
AzureではAIに関するさまざまなサービスを展開しており、それらのサービスとAzure Functionsを組み合わせることで、業務にAIを導入することも容易です。
例えば、Custom Visonと組み合わせることで、アップロードした画像を分析して画像認識ができます。Azure OpenAI Serviceと組み合わせればChatGPTのようなアシスタントAIを独自に開発することも可能です。
Azure Functionsの料金体系
Azure Functionsには以下の通り、3種類の料金プランがあります。
プラン |
|
---|---|
従量課金プラン |
実行時間:$0.000016/GB 秒 総実行回数:100万実行回数あたり $0.20 |
Premiumプラン |
vCPU使用時間:$0.17 vCPU/時間 メモリ使用時間: $0.0122GB/時間 |
App Serviceプラン |
App Serviceの料金に準拠 B1:$0.019/時間 B2:$0.037/時間 B3:0.073/時間 ※日本(東日本リージョン)でLinuxを利用する場合 |
従量課金プランは、Azure Functionsによるプログラム実行時間によるリソース使用量と総実行回数に比例します。
Premiumプランは実行時間や実行回数ではなく、vCPUやメモリの使用時間で料金が決まります。
App ServiceプランはApp Serviceの料金に基づいた料金設定で提供されるため、実行環境のメモリやCPUのスペックに応じた料金が発生します。
実行するプログラム内容にもよりますが、料金を単純に比較すると下記のようになります。
従量課金プラン < App Serviceプラン < Premiumプラン
特に、アクセス数や実行回数、必要なスペックによってどのプランが最適かが変わりますので、本運用を開始する前には、ある程度の利用料を想定した上で適切なプランを選択しましょう。
従量課金プラン(無料枠あり)
Azure Functionsの従量課金プランは先述の通り、プログラム実行時間によるリソース使用量と総実行回数に比例します。総実行回数とはトリガーされたプログラム実行の回数です。サーバーレスのサービスのため、仮想マシンの料金はかかりません。
しかし、それゆえのデメリットとして従量課金プランには、以下の特徴があります。
- タイムアウト時間が短い→長時間の処理は実施できない
- コールドスタートとなる可能性がある→起動時間が長くなる
従量課金プランの場合、一定時間アクセスがないとプログラムが自動で完全停止します。完全停止状態でトリガーが発生すると、ランタイムが起動しプログラムが実行されます。この仕組みがコールドスタートです。コールドスタートの場合、停止時は完全に料金がかからないというメリットを持つ一方で、起動に時間がかかるという点がデメリットとなります。
従量課金プランは、月ごとに以下の無料枠が用意されています。
- 実行時間:400,000GB 秒
- 総実行回数:100万実行回数
従量課金プランは上記の無料枠を上回って実行されると、料金が発生するプランです。
ギガバイト秒(GB 秒)単位とは1GBのメモリを1秒間利用する単位を表しています。秒はミリ秒単位でカウント、メモリは128MBで切り上げです。1つの関数実行の最小実行時間は100ミリ秒、最小メモリは128MBとなります。
Premiumプラン
Premiumプランは、従量課金プランよりもパフォーマンスが向上しているプランです。従量課金プランのデメリットとなっていたタイムアウト時間の短さやコールドスタートが解消されています。ただし、事前に仮想マシンを1台以上割り当てておく必要があります。サーバーレスとは仮想マシンが存在しないわけではなく、仮想マシンが存在するが気にしなくても使えるようになっているサービスだからです。
Premiumプランではプログラムの実行時間や実行回数に比例した料金ではなく、割り当てた仮想マシンのvCPUとメモリに比例します。Premiumプランで割り当てるインスタンスには3つのプランが用意されています。
節約プランとは、長期で固定の利用量を割り当てておくことで、料金の割引がされるプランです。
- 従量課金制
- 1年節約プラン
- 3年節約プラン
長期的に利用する想定であれば、最大で17%程度の節約効果が見込めます。利用期間に応じて最適なプランを選択するとよいでしょう。
App Serviceプラン
App Serviceプランとは、Azure FunctionsをAzure App Serviceと連携させて利用し、App Serviceの料金に含めるプランです。
App ServiceはAzureの提供するPaaS(Platform as a Service)で、アプリケーションをデプロイすることで常時起動するアプリを構築できるサービスです。
App Serviceプランを利用する場合には、、App Serviceの環境を構築する必要があります。
App Serviceプランは動作するサーバーインスタンスのサイズを指定できるため、開発者が柔軟に設定できることが特徴です。App Serviceプランの利用には相応のインフラに関する知識が必要になるため、細かい設定が必要な場合にはApp Serviceプランを選択するとよいでしょう。
ローカルコンピューターでAzure Functionsを開発する際の注意点
Azure Functionsはプログラムのみを記述しデプロイすることで実行できますが、ローカルコンピュータでも開発とデバッグが可能です。
Azure Functionsの開発には、Visual StudioまたはVisual Studio Codeが必要です。Visual Studio Codeは商用・非商用問わず無料で利用できますので、Azure Functionsの開発にはVisual Studio Codeの利用をおすすめします。
Visual Studio CodeでAzure Functionsの開発を始めるためには、Azure Toolsの拡張機能のインストールが必要です。拡張機能をインストールしたら、AzureのアカウントにリンクするだけでAzure Functionsの開発を開始できます。
Azure Toolsをインストールすることで、以下のような作業が可能になります。
- 新しいFunctionsを作成する
- コードを記述する
- 記述したコードをローカルで動作しデバッグする
- コードをAzure Functionsへデプロイする
- 環境変数を設定する
- Azure Functionsの実行ログを確認する
このように、ほとんどのことがVisual Studio Code上で実施できるので、開発者はコーディングに集中できます。
他社クラウドのサーバーレスサービスとの違い
Azure FunctionsはAzureのサーバーレスサービスです。同様に他社クラウドにもあるサーバーレスサービスを紹介します。紹介するサービスは以下の2つです。
- AWS Lambda
- GCP Cloud Functions
先に結論を述べると、上記2つはAzure Functionsとの違いはほとんどありません。そのため、クラウド選定などを考える際にサーバーレスサービスの違いが決定打となることはないでしょう。
|
Azure Functions |
AWS Lambda |
GCP Cloud Functions |
クラウドベンダー |
Azure |
AWS |
GCP |
対応言語
|
C#(.NET) |
JavaScript |
Node.js |
プラン |
従量課金 |
従量課金 |
従量課金 |
実行環境 |
サーバーレス |
サーバーレス |
サーバーレス |
マシンスペックの選択 |
App Serviceプランのみ選択可能 |
選択可能 |
選択可能 |
ステートフルサポート |
〇(Premiumプランのみ) |
〇 |
× |
タイムアウト時間 |
10分(従量課金) |
3秒(最大15分) |
9分(最大60分) |
無料枠 |
100万実行回数 |
100万実行回数 |
200万回リクエスト |
ただし、プランの考え方やタイムアウト時間など、細かい点で違いがあります。同じコードを違うクラウドベンダーに載せ替えたりした場合、制限などによりうまく動作しない可能性もあります。そのため、複数のクラウドベンダーを利用する想定がある場合には違いを正しく理解しておきましょう。
AWS Lambda
Azure App ServiceとAWS Lambdaには、実行環境の違いが挙げられます。AWS Lambdaはサーバーレス環境の実行のみであることに対し、Azure Functionsはサーバーレス環境とAzure App Service(PaaS)の環境で実行可能です。
また、両者のタイムアウト時間にも違いがあります。AWS Lambdaは最大タイムアウト時間が15分に設定されています。一方で、Azure FunctionsはPremiumプランを利用すると最大タイムアウト時間を無制限にできます。
ただし、AWS Lambdaは実行するサーバースペックを選択できます。処理したい内容に応じて最適なスペックを選択することで、実行時間を最小限に抑えるようにする必要があります。AWS Lambdaは長時間の実行に向かないため、即時のレスポンスが必要なWebサービスなど、限定した用途で利用できると考えましょう。
GCP Cloud Functions
Google Cloud Functionsも、AWS Lmabdaと同様に従量課金のプランしか提供していません。ただし、従量課金プランであっても実行するマシンのスペックを選択できます。
Azure Functionsの場合、従量課金プランではマシンスペックが選択できないため、負荷の高い処理が必要な場合にはPremiumプランを選択する必要があります。
また、GCP Cloud Platformは最大60分のタイムアウトが設定できるため、ほとんどの利用用途において、タイムアウトが原因で困ることはありません。
Azure Functionsはプランによってさまざまな選択肢が提示されているのに対し、GCP Cloud Functionsは従量課金プランの中で柔軟に実行環境を選択できるという違いがある、と理解するとよいでしょう。
まとめ
Azure Functionsの概要、特徴、ユースケース、料金、他社クラウドとの違いについて解説しました。Azure Functionsはサーバーレスのサービスであり、それゆえの多くのメリットを享受したプログラム実行環境として用いられています。Azure Functionsは料金プランが3種類あることも、他社クラウドのサーバーレスサービスとの違いです。
柔軟性に富んだ選択肢から、ベストな環境を構築できるようにAzure Functionsのご利用をぜひご検討ください。