はじめに
こんにちは、Algomatic ネオセールスカンパニーCTOのきくち (@_pochi) です。今回は生成AIとは全く関係ない記事です。
皆さんAzure Functionsはご存知でしょうか。使ったことはないけど名前は知ってるし概要もわかっている、という方は多いと思います。たいていの場合、「ああ、Lambdaみたいなやつでしょ」 という理解だと思うのですが、これが結構違うのです。
いざAzure Functionsを利用しようとすると、このような大量の選択肢が立ちはだかり、「Azure Functions何もわからん」となるのです。これは、そんな1年前のわたしに向けた記事です。本稿では、Azure Functionsの大切な前提を理解した上で5 つのホスティングプランの特徴やユースケースを整理します。
先に結論をいってしまうと、 「大体のユースケースにおいてホスティングプランはFlex Consumptionが一番よさそう」、加えて補足をするならば、「Flex Consumption、 はやく日本リージョンに来てください&デプロイメントスロットをつかえるようにしてください」 です。
(記事公開に改めて確認してみたところ、Flex Consumptionが日本リージョンで使えるようになっていました。お詫びして訂正します。)
それでは以下に解説していきます。
前提: Azure Functions は「関数」をデプロイするわけではない
Azure Functionsがどういうものかと想像した時、AWS LambdaやCloud Functionのように “1 つの関数をクラウドにデプロイする” イメージをお持ちの方も多いのではないでしょうか。
しかしそれは大きな間違いで、実態は Web サーバをホストするサービスであり、1つのWebサーバに、複数の Function(エンドポイント)がぶら下がる構成になります。また、Functionのトリガーは様々な種類があり、一定時間ごとに起動するTimerTriggerや、CosmosDBへの書き込みを検知して起動する CosmosDB Triggerなど様々な便利なトリガーが存在します。
つまり、「様々なトリガーで起動するエンドポイントを持つWebアプリをカンタンにクラウド上にデプロイできるもの」がAzure Functionsです。
なので、AppServiceやContainer Appのような 常時起動のWebアプリをホストするサービスの上でAzure Functionsを起動するという構成が存在できるのです。(これが理解できなくて最初はひどく悩みました。)
ホスティングプラン比較
それでは、各ホスティングプランの比較をしていきましょう。
プラン | 課金モデル | コールドスタート | VNet 統合 | デプロイ スロット | スケーリング |
---|---|---|---|---|---|
Consumption | 実行 + リクエスト従量 | あり | NG | +1 | 0–200* |
Flex Consumption | 実行従量 + Always Ready | ほぼなし | OK | なし (GA 時点) | 0–1,000 |
Premium | インスタンス常駐 + 実行 | なし (Pre‑Warmed) | OK | +2 | 1–100 |
App Service | AppService側で課金 | なし (Always On ) |
OK | 5–20* | 手動/AutoScale |
Container Apps | AppService側で課金 | ほぼなし (min‑replicas) | OK | Revision で管理 | 0–N (KEDA) |
* リージョン/プランサイズで変動。金額などは変更も多いので、詳細は公式ドキュメントを参照してください。
それぞれのプランについて個別に解説します。
1. Consumption
無料枠付き従量課金。一番安いし手軽なので、まず使うならこれ。スケーリングもある程度可能なので、使い勝手は悪くない。ただし、コールドスタートを避けられない、VNet統合がつかない点がネック。Dockerイメージも使えないので注意。
2. Flex Consumption
最新のプランであり、Consumptionの上位互換という印象です。Always Ready で常時待機可能なので、コールドスタートを回避できます。待機時間のコストも割安でありがたい。VNet統合可で、スケーリングもConsumptionより柔軟。最大の問題として、日本リージョンでまだ利用できず、デプロイスロットに現時点で未対応という点が痛いです。(ただしロードマップ記載あり)もうしばし待つ必要がありますね。
(2025/05/14現在、日本リージョン使えました)
3. Premium
コールドスタートなし&VNet統合付きの上位プラン。最低 1 台の Always Ready で即応しつつ、ピーク時の追加インスタンスは秒単位課金なのでアイドルが多い API/イベント処理で割安。60 分実行、大メモリ(~14 GB)、Docker 対応で重量ワークロードも OK。常時フル稼働なら App Service とコストはほぼ同等なので要比較。
4. App Service (Dedicated)
AppService上で常時起動できるため、コールドスタートを回避できます。個人的には、単一のAppServiceプラン上で複数 Function Appsを同居可能なところがお気に入りです。デプロイスロットも対応していますが、スケーリング設定が柔軟性に欠けるのが難点。(AppService準拠であり、手動や限定的なメトリクス連動)
5. Container Apps
安価に、Dockerイメージを利用したAzure Functionsが建てられるのがこれ。Azure Functionsの皮をかぶったContainer Appです。Container App準拠のローリングデプロイ、KEDAスケーリングなど柔軟に設定可能。Container App自体の使い勝手がいいので、これも利用検討する価値はありそうです。ただし、ドキュメントが少なかったり terraform が現時点で未対応だったりするなど、罠が多めなので注意が必要。玄人向けです。
まとめ
以上、Azure Functionsのプランまとめでした。
Premiumはなんでもできる優等生プランですが、最低でも数万円かかってしまう点がネックで手軽には使いづらい。
一方でFlex Consumptionが非常に機能とコストのバランスがよく、日本リージョンで利用できるようになれば「とりあえずこれ使っておけ」と言えるので非常に使いやすくなりそうです。それまでは Consumptionか、常時起動が必要ならAppServiceを安いプランで利用する、という選択が手堅いのではないかと思います。
ちなみにアポドリでは現状 App Service を使っているのですが、Flex Consumption が 日本リージョンや デプロイスロット対応を果たしたタイミングで切り替えを検討しようと思っています。
積極採用中です!
ここまで読んでいただきありがとうございました。「面白そうだな〜」と思っていただけたエンジニアの方、「こいつは何もわかっちゃいない、俺がもっといい感じにしてやる」と感じたアーキテクトの方などなど、ぜひお話ししましょう!一緒にインフラを支えてくれる方も大募集中です!