目的
lambdaでbugsnagを使いたい。
言語は node.js を使用する。
index.js
にのみ処理が記述されてる前提。
手順
npmでbugsnagをインストール
index.js
の階層で以下実施
npm install --save bugsnag
node_modules
ディレクトリが作成され、中にいろいろインストールされている。
git上は npm init
して作成された package.json
をコミットしておく。
デプロイ
index.js
の階層で以下実施
zip -r xxxx.zip index.js node_modules
※一つ上の階層でディレクトリ自体をzip化しないよう注意。
作成した xxxx.zip(ファイル名は任意でOK)
を、zipでAWSコンソールからアップロード。
※lambdaのデプロイ自体は、 apex を利用したほうが楽。
コーディング
定義
index.js
に以下を記述し、 bugsnag
をrequire
var bugsnag = require('bugsnag');
bugsnag.register(
`${process.env.BUGSNAG_API_KEY}`, { releaseStage: `${process.env.RELEASE_STAGE}` });
以下は環境変数に設定する。
変数名 | 説明 |
---|---|
BUGSNAG_API_KEY | bugsnagのAPIキー |
RELEASE_STAGE |
staging や production といった環境名 |
とりあえず連携できているかテスト
var bugsnag = require('bugsnag');
bugsnag.register(
`${process.env.BUGSNAG_API_KEY}`, { releaseStage: `${process.env.RELEASE_STAGE}` });
exports.handler = function(event, context, callback) {
bugsnag.notify(new Error("Non-fatal"));
return;
};
ローカルで編集したら忘れずデプロイ
→
こんな感じでエラーが通知された!
対象処理中で発生したエラーは全てbugsnagに通知する
var bugsnag = require('bugsnag');
bugsnag.register(
`${process.env.BUGSNAG_API_KEY}`, { releaseStage: `${process.env.RELEASE_STAGE}` });
// メイン処理
var main = function(event, context, callback) {
// 処理
throw new Error("Non-fatal");
};
exports.handler = function(event, context, callback) {
// エラー発生時は全てbugsnagに送信する
bugsnag.autoNotify(function() {
main(event, context, callback);
});
};
autoNotify
は 同期・非同期の全エラーを捕捉する はずだが、 context.fail()
は通知されなかった・・。なぜでしょう。
参考
bugsnag公式 - bugsnagとnode.jsの基本的な連携方法
https://docs.bugsnag.com/platforms/nodejs/
https://docs.bugsnag.com/platforms/nodejs/other/#basic-configuration
https://docs.bugsnag.com/platforms/nodejs/express/configuration-options/
Lambdaに標準で同梱されていないモジュールを使用したい場合の、環境構築方法
https://www.business-on-it.com/2003-aws-lambda-create-function/#section2
あるモジュールがlambdaに標準で入ってるかどうか
は公開されてないらしい・・
https://qiita.com/yoshidasts/items/2d7117ef0f31754a06ab