Azure Functionsって結局どこまで無料なんだっけ?
2019-11-19
azblob://2022/11/11/eyecatch/2019-11-18-azure-functions-bg-per-seconds-000.jpg

はじめに

Azure Functionsの見積もりをする際にいつも見るこの文言。

これ、私がFunctionsを開発で使う際は、いつも料金の見積もりが0円になるので、「なんかすごいたくさん無料で実行できるんだな~」程度で考えていました。しかしこのままでは流石にまずいので(実際聞かれてすぐに答えられなかったので)、いい加減ちゃんと把握しておこうと思い備忘録的な感じでまとめています。

どこまで無料で使えるのか

答えはAzure Functions の価格に載ってます。

Azure Functionsの料金形態は月々の リソース使用量(GB/秒)による料金実行回数(回)による料金加算した合計料金 を支払う仕組みになっています。そして、それぞれ 月ごと に無料分が割り振られる形になっています(40万GB/秒と100万回)。
これらをまとめて先に結論から書くと、Functionsの月額料金は以下のように計算できます。

月額料金[円] = { ( リソース使用量[GB/秒] - 400000[GB/秒] ) × 0.001792[円] } + { ( 実行回数[回] - 1000000[回] ) / 1000000 × 22.400[円] }

※更に詳しい計算式はまとめに記載しています。

そしてFunctionsが無料で使える条件は

  • 実行回数[回]が月100万回以下
  • 実行回数[回]と実行時間[秒]と平均メモリサイズ[GB]を乗じた結果が40万GB/秒以下

です。実行回数による料金とリソース使用量による料金のそれぞれについて説明していきます

実行回数による料金

まず、実行回数による料金計算では実行回数は 100万単位で切り上げ となり、料金設定も100万回単位で決まっています。(ちなみに2019年11月18日現在の料金設定は100万回実行あたり22.400円という価格設定になっています。 )

どういうことかというと、月に110万回実行すると料金計算では200万回で計算され、200万1回実行すると料金計算では300万回で計算されます。例を上げると月に436万回実行した場合、料金計算は

実行回数による月額料金[円] = ( 5000000[回] - 1000000[回] ) / 1000000 × 22.400[円]

で求められ、400万 ÷ 100万 × 22.4 = 4 × 22.4 = 89.6[円]となります。

リソース使用量による料金

「GB/秒」は GB÷秒ではない!

「GB/秒」ってなんだ? こちらも同じくAzure Functions の価格に載っています。以下の部分です。

要約すると、

  1. GB/秒 → 平均メモリサイズ(GB)×実行時間(ミリ秒)で計算するよ
  2. 平均メモリサイズは128MB単位、 実行時間は1ミリ秒単位で切り上げるよ
  3. 平均メモリサイズ、実行時間の最小値はそれぞれ128MB、100ミリ秒(0.100秒)だよ
  4. 無料提供分(40万GB/秒、100万回実行)は1ヶ月毎にリセットされるよ

となっています。そうなんです、この「GB/秒」という単位、実はGBと秒の掛け算なんですね。これがこんがらがってしまう原因になっていました。
3番については上で説明していますね。
2番に関しては例えば実行した際の平均メモリサイズが92MBだった場合、切り上げで料金計算は128MBで計算され、170MBだった場合は同様に切り上げで256MBで計算されるという意味です。実行時間も同様です。
1番の実行時間はミリ秒となっていますが、計算自体は秒、ミリ秒単位まで計測するという意味だと思われます。
ちなみに実行時間は1ヶ月の 総実行時間 です。

これらをまとめると、リソース使用量による月額料金の計算式は以下の様に置き換えられます。

リソース使用量による月額料金[円] = ( リソース使用量[GB/秒] - 400000[GB/秒] ) × 0.001792[円] 
                              = { ( 実行回数[回] × 実行時間[秒] × 128MB単位で切り上げられた平均メモリサイズ[MB]/1024[MB] ) - 400000[GB/秒] } × 0.001792[円]

平均メモリサイズはMBをGBに変換しています。 0.001792円というのは2019年11月18日現在での1[GB/秒]あたりの料金です。

こちらも例を上げてみましょう。平均メモリサイズ300MBを使用して、1回あたりの実行に1.520秒かかる処理を436万回実行したとすると、料金計算では平均メモリサイズは384MBで計算されます。ここでは実行回数は切り上げではありません。なので、この例でのリソース使用量による月額料金は

リソース使用量による月額料金[円] = { ( 4360000 × 1.520 × 384 / 1024 ) - 400000 } × 0.001792

で求められ、( 2485200 - 400000 ) × 0.001792 = 3736.70円となります

まとめ

Azure Functionsの料金は以下の式から求めることが出来る

月額料金[円] = { ( ( 実行回数[回] × 実行時間[秒] × 128MB単位で切り上げた平均メモリサイズ[MB]/1024[MB] ) - 400000[GB/秒] ) × 0.001792[円] } 
            + { ( 100万単位で切り上げた実行回数[回] - 1000000[回]) / 1000000 × 22.400[円]

Functionsが無料で使える条件は

  • 実行回数が月100万回以下である
  • 実行回数[回]と実行時間[秒]と平均メモリサイズ[GB]を乗じた結果が40万GB/秒以下である

実際の計算例もAzure Functions の価格の下の方に記載があるので、そちらも参考にしてみては如何でしょうか。