Cloud Functionsの実行回数がしきい値を超えたら検知するCloud Monitoringアラートを作成してみた
クラスメソッド株式会社データアナリティクス事業本部所属のニューシロです。
今回はGoogle CloudのサービスであるCloud Functionsの実行回数がしきい値を超えたら検知するCloud Monitoringアラートを作成してみました。
前提
Cloud Functionsとは
Google Cloud Functions は、クラウド サービスの構築と接続に使用するサーバーレスのランタイム環境です。Cloud Functions を使用すると、クラウドのインフラストラクチャやサービスで生じたイベントに関連する、シンプルで一義的な関数を作成できます。対象のイベントが発生すると、Cloud Functions がトリガーされ、コードがフルマネージドの環境で実行されます。
Cloud Functionsを用いると簡単にGoogle Cloud上でコードの実行が行えます。手軽に使用できるFaaSです。
なぜやるのか
Cloud Functionsが想定以上の回数実行されると、高額な料金が発生することが考えられます。
例えば可能性のある構成として、再帰処理が考えられます。
このような構成だと、想定しない挙動が起こった際に、無限に再帰処理が行われる可能があります。
想定以上の回数が実行された際に検知するアラートをあらかじめ設定しておくことで、早期に対応を取ることが可能となります。
本題
環境について
検証環境を準備します。
検証とはいえ、実際に再帰処理を実行して回数を増やす手法は避けたいため、以下のようにCloud SchedulerでCloud Functionsを起動する構成で検証します。
Cloud Schedulerによって短時間に想定以上の回数Cloud Functionsを実行させ、それによりCloud Monitoringアラートを検知させられるか検証します。
Cloud Functions作成
今回はCloud Functionsのコードは特に気にする必要はありません。適当に用意します。
import functions_framework @functions_framework.cloud_event def hello_pubsub(cloud_event): print("Hello Pub/Sub!")
functions-framework==3.*
このコードを使用して、Pub/SubトリガーでCloud Functionsをデプロイします。
あわせて、トリガー対象となるPub/Subトピックも作成しておきます。
Cloud Scheduler作成
Cloud Schedulerを作成します。
CRON式は*/10 * * * *
と指定することで、まずは10分ごとに1回だけ通知する設定にしておきます。
作成したPub/Subトピックを通知先に指定しておきます(プロジェクト名は伏せています)。
これでCloud Schedulerの作成は完了です。
Cloud Monitoringアラート作成
Cloud Monitoringアラートを作成します。+ CREATE POLICY
を押下します。
Select a metricではCloud Function
のExecutions
を選択することで、Cloud Functionsの実行回数をカウントすることができます。
フィルタの追加で対象のCloud Functionsの名前を指定しておきます。
今回は、10分間のCloud Functions実行回数の合計をモニタリングしようと思いますので、Transform dataではローリング ウィンドウは10分
、ローリング ウィンドウ関数はsum
を指定します。
これにより、10分間の関数実行回数の合計が検知対象になります。
下記のようにしきい値の位置をしきい値より上
、しきい値を5
に指定することで、10分間で5回より多くCloud Functionsが実行されたらアラートが検知されるようにします。他の欄も下記のように設定します。
しきい値を超えたら即時通知してくれるよう、Advansed Optionsの再テストウィンドウは0秒
に設定します。
通知チャンネルはメールを指定しました(名前は伏せてあります)。他の欄も下記のように設定しました(細かい説明は割愛します)。
これでCloud Monitoringアラートの設定は完了です。
アラート検知
現在、Cloud SchedulerでCloud Functionsを10分おきに1回のみ起動させているため、今回設定したCloud Monitoringアラートの「10分間で5回より多く起動」はしておりません。
よってCloud Schedulerを実行しても、アラートが発報することはありません。
ではCloud SchedulerのCRON式を変更し、Cloud Monitoringアラートで検知できるか検証してみます。
「10分おきに1回」から「1分おきに1回」へ変更します。
1分ごとの実行へ変更することで、10分間に10回はCloud Functionsが起動します。
10分間で5回を超えるため、これでアラートを検出するはずです。
想定通り、アラート通知のメールが届きました!上記はメール通知の画面です。
Cloud Monitoringアラートの指標でも、しきい値を超えていることがわかります。
最後にまとめ
Cloud MonitoringアラートでCloud Functionsの実行回数について検知することができました。 他にも色々な指標で設定できますので、今後も試していこうと思います。