AWS SAM CLI で立ち上げた Lambda をリモートデバッグする
AWS SAM CLI で開発中の AWS Lambda のリモートデバッグ
Python の場合
https://dev.classmethod.jp/server-side/serverless/python-remote-debug/
Node.js でどうするか調べてみる
https://nodejs.org/en/docs/guides/debugging-getting-started/#enabling-remote-debugging-scenarios
sam local invoke および sam local start-api は、いずれも関数のローカルデバッグをサポートします。デバッグサポートを有効にして SAM CLI を実行するには、コマンドラインで --debug-port または -d を指定します。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/test-sam-cli.html
おk
以下のようなテスト用コードを書く
code:javascript
'use strict'
const aws = require('aws-sdk');
var lambda = new aws.Lambda({
region: "ap-northeast-1",
endpoint: 'http://127.0.0.1:3001',
sslEnabled: false,
});
var params = {
FunctionName: 'LambdaForRDS',
Payload: '{ "resolve": "query.collection", "context": { "arguments": { "id": 8 } } }'
}
const invokePromise = lambda.invoke(params).promise();
invokePromise
.then((data) => {
console.log(data);
})
.catch((error) => {
console.error(error, error.stack);
});
aws sam cli で lambda を立ち上げる
code:shell
$ sam local start-lambda --debug-port 5858 --template ./lambda/template.yaml
テストを実行
code:shell
$ node test.js
lambda を invoke した時点で、リモートデバッグの受付が開始される。
VSCode を使用してデバッグする。
構成は以下のような感じ
code:json
{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "attach",
"name": "AWS SAM CLI のリモートデバッグ",
"address": "127.0.0.1",
"port": 5858,
"localRoot": "${workspaceFolder}",
"remoteRoot": "/var/task"
},
{
"type": "node",
"request": "launch",
"name": "プログラムの起動",
"program": "${workspaceFolder}/index.js"
}
]
}
ひとまずはこれでブレークポイントデバッグはできた。
しかし VSCode のデバッグモードの利用方法がよくわからない
Indium + Emacs でもできそうなので試したい
Indium + Emacs
#Emacs