はじめに
こんにちは、パナソニックコネクト株式会社の山本です。
弊社ではここ最近Azure活用の機会が増えており、アーキテクチャ検討時に迷った部分について備忘録も兼ねて残していこうと思います。
今回のテーマ : Azure Functionsのプラン選択、迷いませんか?
AWS Lambdaに相当するAzureのサービスとして、Azure Functionsがあります。
しかし、いざ使おうとすると、プランの種類が多くて戸惑ったことはありませんか?
(筆者は混乱しました
)
ここが分からない
-
AWS Lambdaは使ってきたけど、Azure Functionsはプラン(従量課金、Premiumなど)が多くてどれを選べばいいかわからない。 - 各プランの料金体系、パフォーマンス(コールドスタート)、
VNet(AWSのVPCに相当)接続の可否など、違いが複雑で理解しづらい。
この記事を通してお伝えすること
この記事では、私のようなAWS経験者がAzure Functionsをスムーズに理解できるよう、主要なホスティングプラン(従量課金、Flex従量課金、Premium、App Serviceプラン)の特性や制約を比較し、それぞれの選択基準を考えてみます。
ポイント
- 各ホスティングプランの機能、パフォーマンス、スケーラビリティの違い
- プランごとの課金モデルと考え方
- VNet統合のサポート可否
- パフォーマンス(コールドスタート)の扱い
全体像:Azure Functions ホスティングプランの比較
Azure Functionsは、関数コードを実行するためのコンピューティングリソースを提供するホスティングプラン上で動作します。このプラン選択が、料金、パフォーマンス、利用できる機能を大きく左右します。
まずは全体像を掴むために、主要な4つのプランを比較表で見てみましょう。
| 項目 | 従量課金 (Consumption) | Flex 従量課金 (Flex Consumption) | Premium | App Service プラン |
|---|---|---|---|---|
| 課金モデル | 実行回数・リソース消費量 | インスタンス実行時間 | インスタンスのコア・メモリ/時間 | インスタンスのコア・メモリ/時間 |
| コールドスタート | あり | あり(影響小) | なし(設定時) | なし(常時実行) |
| 最大実行時間 | 10分 | 制限なし(推奨60分) | 制限なし(推奨60分) | 制限なし(推奨60分) |
| VNet統合 | 不可 | 可 | 可 | 可 |
| スケールアウト | 高速(イベントドリブン) | 高速(HTTP/イベント) | 高速(常時ウォーム) | 手動/自動(比較的遅い) |
| 主なユースケース | 短時間、断続的な処理 | HTTP中心、バースト耐性 | 高負荷、長時間、VNet必須 | 既存リソースの活用 |
それでは、各プランの詳細を見ていきます。
各プランの詳細解説と設計のポイント
1. 従量課金プラン (Consumption Plan) - 手軽に始めるサーバレス
特徴: AWS Lambdaに最も近い感覚で使えるプランです。イベントが発生した時にだけコードが実行され、実行時間と回数に応じて課金されます。何も実行されなければ、料金は発生しません。
設計のポイント(トレードオフ)
メリット:
- 低コスト: トラフィックが少ない、または予測不能なワークロードに最適です。アイドル時のコストはゼロに近く、非常に経済的です。
- 自動スケール: リクエストの増加に応じてAzureが自動でインスタンスをスケールアウトしてくれます。
デメリット(落とし穴):
- コールドスタート: しばらくアクセスがない状態から最初のリクエストがあると、インスタンスの起動に時間がかかり、応答が遅れる「コールドスタート」が発生します。これがシステム性能に影響を与える可能性があります。
-
VNet統合不可: Azureの仮想ネットワーク(
VNet、AWSのVPCに相当)に接続できません。そのため、VNet内にあるプライベートなデータベースや他サービスへのアクセスが制限されます。
2. Flex 従量課金プラン (Flex Consumption Plan) - 新しい選択肢
特徴: 従量課金プランの手軽さと、Premiumプランのような柔軟性を併せ持つ、比較的新しいプランです。特にHTTPトリガーに強く、急なトラフィックの増加(バースト)にも耐えられるように設計されています。
設計のポイント(トレードオフ)
メリット:
- コールドスタートの緩和: インスタンスごとの同時実行制御により、従来の従量課金プランよりもコールドスタートの影響が軽減されます。
- VNet統合可能: 従量課金ベースのプランでありながら、VNet統合が可能です。これにより、コストを抑えつつプライベートなリソースへアクセスできます。
デメリット(落とし穴):
- Linuxのみサポート: WindowsコンテナやWindows固有のライブラリに依存するアプリケーションはサポートされていません。
- 設定と管理: インスタンスのサイズや常時稼働の設定が必要な点に加えて、課金体系もインスタンス単位の実行時間ベースとなり、従来の従量課金とは考え方が異なるため注意が必要です。
3. Premiumプラン (Premium Plan) - パフォーマンスと接続性重視
特徴: 高いパフォーマンスと高度な接続性を求めるワークロード向けのプランです。事前にインスタンスを「ウォーム状態」で待機させておくことで、コールドスタートを完全に排除できます。
設計のポイント(トレードオフ)
メリット:
- コールドスタートなし: 指定した数のインスタンスが常に起動・待機しているため、リクエストに対して即座に応答できます。ユーザー向けのAPIなど、応答性が重要なシステムに最適です。
- 長い実行時間: 最大実行時間の制限が実質的になく、重いバッチ処理なども実行できます。
デメリット(落とし穴):
- 高コスト: アイドル時でも最低1インスタンス分の料金(ベース料金)が発生します。トラフィックが少ないと、従量課金プランに比べてかなり割高になります。
4. App Serviceプラン (Dedicated/App Service Plan) - 既存資産の有効活用
特徴: WebアプリをホストするためのApp Serviceとコンピューティングリソースを共有するプランです。既にApp ServiceプランでWebサイトなどを運用している場合、その余剰リソースをFunctionsの実行に割り当てることができます。
設計のポイント(トレードオフ)
メリット:
-
リソースの有効活用: 既存の
App Serviceプランに「相乗り」させることで、追加コストなし、あるいは最小限のコストでFunctionsを動かせます。 - コールドスタート回避: プランの「Always On」設定を有効にすることで、インスタンスを常にアクティブに保ち、コールドスタートを防げます。
デメリット(落とし穴):
- スケーリングの限界: イベントに応じた動的なスケールアウトは、他のサーバーレスプランほど得意ではありません。
- 新規利用のメリットは少ない: Functionsのためだけにこのプランを新規契約する積極的な理由はあまりなく、あくまで既存リソースの活用が主目的となります。
ユースケース別プラン選択
代表的なユースケースと推奨プランとしては、以下の通りです。
| ユースケース | 推奨プラン | 理由 |
|---|---|---|
| シンプルなAPI、Webhook |
従量課金プラン or Flex従量課金プラン
|
トラフィックが少なく、コストを最優先したい場合に最適です。 |
| 定期的なバッチ処理 | 従量課金プラン |
実行時間が短く(10分以内)、決まった時間に動けばよい処理に向いています。 |
| 高い応答性が求められるAPI | Premiumプラン |
ユーザー体験を損なわないために、コールドスタートを絶対に避けたい場合に選択します。 |
| VNet内のリソースと連携する処理 |
Flex従量課金プラン or Premiumプラン
|
プライベートネットワークへの接続が必須要件となる場合に選択します。 |
| 既存のWebアプリとリソース共有 | App Serviceプラン |
既にApp Serviceを契約しているなら、最も手軽で経済的な選択肢になり得ます。 |
まとめ
今回は、Azure Functionsのホスティングプランをそれぞれ比較して調査してみました。
まとめると、
- 手軽さと低コストなら →
従量課金プラン - パフォーマンス重視のシステムなら →
Premiumプラン - その中間的な選択肢として →
Flex従量課金プラン - 既存資産の活用なら →
App Serviceプラン
という大きな指針はイメージできたかと思います。
各プランの得意分野や制約、トレードオフを理解し、構築するシステムの要件(コスト、パフォーマンス、セキュリティ)に合わせて最適なプランを選択することが重要になってきます。
注意事項
本ブログに掲載している内容は、私個人の見解であり、所属する組織の立場や戦略、意見を代表するものではありません。あくまでエンジニアとしての経験や考えを発信していますので、ご了承ください。