概要
本記事ではServerless Framework(AWS Lambda × TypeScript)のテンプレートを作成し、
VSCodeでデバッグするまでの手順を躓いた点を含めて書いていきます。
※serverless
のバージョン:2.16.1
AWS Lambda × TypeScriptのテンプレート作成
1. serverlessのインストール
npmでserverless
をグローバルインストールします。
npm i -g serverless
2. serverless templateの作成
aws-nodejs-typescript
のテンプレートを作成します。
今回は適当にプロジェクト名をsls-debug-test
とでもしておきます。
-t
: テンプレート形式の指定
-p
: プロジェクト名の指定(プロジェクト名でフォルダが作成されます)
sls create -t aws-nodejs-typescript -p sls-debug-test
cd sls-debug-test
し、作成されたテンプレートの中身を確認してみます。
.vscode
フォルダが生成されていますね。推奨エディタなのかな?
また、serverless.yml
ではなくserverless.ts
が作成されていますね。
serverlessフレームワークのバージョンが2.16.1
だと.ts
で出力されるのかしら?
serverlessの型定義を見ることができるのでymlより結構書きやすいかもしれないですね!
しかし、serverless.ts
を確認すると早速エラーが出ています。
型定義ファイルが無いっぽいのでとりあえず、npm install
します。が、まだエラーが消えないです。
どうやら、テンプレートの初期状態ではpackage.json
にserverlessの型定義ファイルが無いようですので、追加でインストールします。
npm i -D @types/serverless
これでエラーが消えて準備が整いました!
(sls deploy
すれば、デプロイできますが、今回はやりません)
VSCodeでServerless Frameworkをデバッグする手順
テンプレートが自動生成した.vscode
フォルダを確認してみます。
親切にlaunch.json
が生成されていますね!
どうやら実行するとserverless offlineが起動するようですね。
もしかして特に何もしなくてもこのままデバッグできるのでしょうか(淡い期待)?
{
"configurations": [
{
"name": "Lambda",
"type": "node",
"request": "launch",
"runtimeArgs": ["--inspect", "--debug-port=9229"],
"program": "${workspaceFolder}/node_modules/serverless/bin/serverless",
"args": ["offline"],
"port": 9229,
"console": "integratedTerminal"
}
]
}
handler.ts
にデバッグ用にconsole.log
を追加し、ブレイクポイントを張りました。
さっそくF5キーを押して実行してみます。
が、エラーが起きちゃいました。
どうやらserverless
をローカルインストールしていないので追加する必要があるっぽいですね。
(※launch.json
のprogram
のパスをnpm bin -g
以下のserverlessフォルダに書き換えるのでもよいですが、環境によってパスが変わっちゃうのが嫌なので今回はローカルインストールすることにします。)
npm i -D serverless
して、再度F5で実行してみます。
が、またもや失敗。offline
コマンドが無いと怒られています。
確認すると、package.jsonにserverless-offlineがありませんね。
どうやらserverless-offlineプラグインは自分で追加する必要があるようです。
ローカルインストールして、
npm i -D serverless-offline
plugins
に'serverless-offline'を追加します。
http://localhost:3000/dev/hello にアクセスしてみます。
デバッグができました!
まとめ
aws-nodejs-typescript
テンプレート作成後、VSCodeでserverlessをデバッグするまでの手順(※sls -v 2.16.1)
npm i -D serverless
npm i -D serverless-offline
-
serverless.ts
のplugins
の配列に'serverless-offline'
を追加
予想より簡単にデバッグすることができました!