Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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 で中断されるはずです。

amay077
ランチの時は呼ぶといい!
https://blog.amay077.net/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away