GAS のトリガーでエラー検知を工夫してみた
YAMAP エンジニア Advent Calendar 2021 の15日目になります。
YAMAP STOREのいろいろなエンジニアリングをやっています、 @issyxissy です。
一応、フロントエンドエンジニアのリーダーでもありますが、ほぼ、YAMAP STOREにコミットしています・・・(꒪⌓꒪;
Shopify と 倉庫システムとの間でやりとりを行っている、GAS版バックヤード。
今は、GAS版バックヤードを引退させるべく、所々でがんばっております。
とはいえ、稼働中のGAS版バックヤードですが、トリガー経由での処理が複雑なったりして、実行エラーを検知しにくくなったため、Slackに通知が届くようにしたいということで、少し工夫してみました。
前提
GASのトリガーは、毎日、時間指定して実行しています。
また、トリガーの設定は、実行処理の中で、トリガーを削除して次回トリガーを再設定しています。
なぜ、工夫しようとしているのか?
GASのトリガー経由エラー検知は、トリガー設定画面上で、設定できます。
しかし、GAS上で、下記のコードからエラー通知は設定できません。(なぜ?)
ScriptApp.newTrigger([function name]).timeBased().at([Date]).create();
そうなると、デフォルトのエラー通知設定の毎日通知を受け取る
に設定されてしまいます。
結果、1日1回のみエラー検知になってしまいます。
理想としては、エラーが出たら、すぐに検知したい!
どうやってエラー通知しようかと考えてみました。
調査
まず、エラー検知は、Cloud Logging のアラートで出来ないかなー、漠然と思っていました。
ログ出力ですが、Logger.log('') で出力していましたが、
console.log('') で出力できるようになっていたことを気づきました(知らなかった・・・)
以前、ごにょごにょしたときに、プロジェクトと紐付けた記憶が・・・。
紐付けることで、Cloud Logging に出力できます。ログ出力として、フロントエンドと同じように、下記で出力可能でした。
console.log() -> debug?
console.info() -> info
console.warn() -> Warning
console.error() -> Error
このログデータが、Cloud Loggingに出力されていることを確認できました。
こんなことが実現できた
こんな流れになります。
- GAS上のトリガー設定
- トリガー実行
- エラー発生
- Cloud Logging にログ出力
- アラートでメール送信
- Gmailで、Slack Eメールで転送
- Slackで投稿される
- 検知!
これらを設定するとできるよ
GASとGCPのプロジェクトとの紐付け
ご参考までに・・・(꒪⌓꒪)
Cloud Loggingでのアラート作成
GCPのコンソールで、ロギング -> ログエクスプローラーで、出力したログが閲覧できます。
アラートを作成をクリックして、↓を設定します・・・(꒪⌓꒪)
SlackのEメールを設定します。
Slackのヘルプをご参考に・・・(꒪⌓꒪)
GmailでSlackのEメールに転送します。
ググって、ご参考に・・・(꒪⌓꒪)
まとめ
- エラーは、Cloud Loggingを使うと、GASのトリガーに頼らず、すぐに検知できる
- ログは、Cloud Loggingに出力しておくと、後々便利
- もう少しきれいに出来ないものかなー(꒪⌓꒪)
Discussion