AWS Lambda(node.js)をローカルでデバッグする方法あれこれ

AWS Lambda(node.js)をローカルでデバッグする方法あれこれ

Lambda(node.js)をローカルでデバッグしたいので探してみました。

  • AWS Cloud9
  • AWS SAM
  • エントリポイント
  • テストフレームワーク

詳しく調べていませんがCloud9でLambdaがデバッグできるようです。

Cloud9もAWSのサービスですからLambdaデバッグ開発には一番向いている開発環境だと思われます。

がCloud9はAWSサービスである以上、料金が発生しますしCloud9自体の学習コストもかかります。なによりローカルでデバッグしたいです。

次にAWS SAMですが、こちらもデバッグができます。AWS SAMを使うにはDockerが必要です。そういったマシン環境でないケースがあるのでこちらは除外します。

という事でまず簡単なエントリポイントを作ってデバッグしてみます。

エントリポイントを作れば簡単にデバッグすることができます。

デバッグ用のエントリポイントdebug.jsを作成します。テストしたいのはindex.jsのhandlerメソッドとします。エディタはVSCodeです。

debug.js

index.js

launch.json

これでF5を押せばデバッグができてブレークポイントにも止まるようになります。

contextがエミュレート出来ない

Lambdaのcontextオブジェクトをエミュレートすることができません。

このオブジェクトにはLambda名などいろいろな情報があり、このオブジェクトを完全にエミュレートするのは無理だと思います。

テストフレームワークMochaを使う

エントリポイントを作成するのもありですが、純粋にMochaを使いましょう。

Mochaでテストを実行します。Mochaのテストコードはtestフォルダ配下の*.test.jsというファイル群にします。

index.test.js

index.js

VSCodeのlaunch.jsonを以下の通り変更します。

programをmochaにして、引数にワイルドカードのテストファイル名を渡します。これで複数ファイルのテストが実行可能となります。

launch.json

F5を押して実行してみます。

AWS Lambda(node.js)をローカルでデバッグする方法あれこれ

こんな感じで実行ができ、この時にブレークポイントをはっておけばデバッグが可能です。

Mochaのデフォルトタイムアウトは2000msなので、デバッグする場合はデフォルトタイムアウトを長い時間に変更しておくべきです。デフォルトタイムアウトはlaunch.jsonで変更可能です。100000msにした例です。

launch.json

ただMochaを使ってもcontextオブジェクトのエミュレートは不可能です。

スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA