LoginSignup
7
7

More than 3 years have passed since last update.

AWS Lambda のローカル開発環境を serverless-offline で構築して VSCode でデバッグできるようにする

Posted at

AWS Lambda の node.js による API 開発のために SAM Local を使っていたのだけど、リクエストの度に docker コンテナを起動しなおすその仕組みは、FaaS のコンテナ実行を模している点はよいのですけど、レスポンスが遅くて、開発を加速させるには足かせになっていました。

そこで Serverless Framework の serverless-offline を使用して、 docker を使わずに Lambda を模することにしました。

Serverless Framework の導入

その導入方法は、

を参考にしました。

同じことを書けば、

テンプレで作成された serverless.yml を下のように修正。

  1. plugins に serverless-offline を追加
  2. handler を、 tsc の出力先に変更 (tsconfig で sourcemap も有効にしておくとデバッグできる)
  3. path にワイルドカードを指定できるよ(この場合 http://localhost:3000/api/hogehoge に反応する)
service: myservice

provider:
  name: aws
  runtime: nodejs10.x

plugins:
  - serverless-offline

functions:
  my-api:
    handler: build/my-api/src/app.handler
    events:
      - http:
          method: ANY
          path: 'api/{proxy+}'
          cors: true

VSCode でデバッグできるようにする

.vscode/launch.json に以下のように記述。

  1. preLaunchTask: tsc で実行前にビルド
  2. node_modules の serverless を起動、引数は offline start で。
  3. protocol: inspector でデバッグ監視しまーす
{
  "version": "0.2.0",
  "configurations": [
  {
    "name": "Debug",
    "type": "node",
    "request": "launch",
    "preLaunchTask": "tsc",
    "protocol": "inspector",
    "cwd": "${workspaceRoot}",
    "program": "${workspaceRoot}/node_modules/.bin/serverless",
    "args": [
      "offline",
      "start"
    ]
   }
  ]
}

これで F5 でデバッグ実行。ハンドラーにブレークポイントを仕掛けて、 curl http://localhost:3000/api/hello でも呼び出せば、VSCode で中断されるはずです。

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7