Azure の価格はとてもわかりにくいです。
これは半分以上自分のためのメモです。
このメモはAzureでFunctionsを構築する際の費用のかかり方のメモです。
Functions は Web Apps と同じような機能を持っています。
ただし、Web Apps が HTTP Request に対して動作するだけなのに対して、Functions はTimer、Cosmos DB など 他の Azure サービスをトリガーに動作させることも可能です。
価格のパターンは、完全従量制の使用量プランと、リソースを予め確保できるPremiumプランの2つです。
と思わせておきながら、Web Appsのプランも実は使えます。
ただし、Web Appsのプランは共有のFやDは使えません。
利用してないときに領域が確保されるのでトリガーが発火する条件になっても動かないことがあります。
Premiumプランは最低構成でも月額16,000円程度となかなかのプレミアム感なので使わない。そんなお金はない。
使用量プランは実行時の使用CPU時間と使用メモリを乗算したGB秒と実行回数で課金されます。
ただし、無料枠があり、40万GB秒、100万回実行までは無料となります。
この無料枠は大変美味しいので Functions は使用量プラン1択ですね。
使用量プランで価格を抑えるためにはメモリの消費を抑えたプログラムにすることが肝心となります。
例えば、多量のデータをメモリーに一時格納して演算するとかすると、無料枠がゴリゴリ削れていきます。
使用量プランの難点は1実行の実行時間に限度があって、超えるとタイムアウトの例外が走ることです。
規定では5分で、設定で変更できますが、上限は10分です。
無制限に実行してクラウド死しても困るし、上限があるのはありがたいのですが、予め10分超えることがわかっている場合は困りものです。
この場合は、プログラムで処理を分割して1実行が10分超えないようにする必要があります。
Microsoft.Azure.WebJobs.Extensions.DurableTask.IDurableOrchestrationContext.CallSubOrchestratorAsync
などで実行を分割できます。実行回数は増えますが、100万実行回数を消化しきっても、次の100万実行回数は22円なので価格インパクトはないです。
Functions を使う上での注意はスレッドです。
実は作る関数に制約があって、注意してても例外がよく起こります。
特に他のサービスのAPIを利用するときにAPIライブラリの中でTaskが使われていてNonDeterministicOrchestrationExceptionが発生することがよくあります。
ハマります。これなんとかならないものか・・・
0 件のコメント:
コメントを投稿