(仮) ブログ

主にWeb Apps や、Azure PaaS サービス を使う際に役立ちそうなことを書こうと思っています。

Function App の従量課金プランの制限の話

Azure Functions 人気ですよね。いわゆるサーバーレス アーキテクチャと呼ばれていて、小さな関数コードを書くだけで簡単に実行でき、インフラストラクチャのことを考える必要がありません。

また、Azure Functions では、従量課金プランと呼ばれる実行した分だけ課金されるプランがあるので、とても安価に利用することができます。

実はそんな従量課金プランの Azure Functions ですが、安価な分制限があります。

今日はその Function App に関して簡単に制限を紹介しようと思います。

接続数や、プロセスの数に制限がある

下記のドキュメントは、Azure Web Apps のデプロイエンジンである Kudu の Wiki になりますが、こちらには Azure Web Apps の制限が書かれています。 資料内の表に Consumption と書かれた列があると思いますが、こちらが従量課金プランの制限になります。

例えば、アウトバウンドの接続数は、300 が制限値となりますが、制限はそれぞれのインスタンス上で動作する Function App ごとに適用されるので、インスタンスが動的にスケールアウトされると、増えたインスタンスの台数分だけ接続できる数が増えます。

github.com

インスタンスの割り当ては 10 秒に 1 台

従量課金プランの場合インスタンスは 200 台までスケールすることができますが、10 秒に 1 台ずつしか新たに割り当てられません。 このため、いきなり Function へのリクエストが増加すると、インスタンスの割り当てが間に合わない場合があります。

docs.microsoft.com

Function が実行されないとインスタンスの割り当ては解除される

従量課金プランの場合しばらく Function が実行されないと、インスタンスの割り当てが解除されます。(下記の記事だと大体 20 分程度実行されないと割り当てを解除すると記載されています。)

急激なリクエストの増加が予想される場合には、App Service Plan の利用を検討する方が良さそうです。

blogs.msdn.microsoft.com

もしくは、下記のブログ記事のように頑張って工夫することで、従量課金プランでも大量のイベントを処理することができそうです。

Azure Functions で秒間 10 万のイベントを処理する – Japan Azure PaaS Support Blog

まとめ

  • 従量課金プランの場合は、通常の App Service Plan に加えて別の制限がある
  • インスタンスは急激には増えないので、リクエストの急増には注意が必要
  • しばらく Function が実行されないとインスタンスの割り当ては解除される