根据 AWS 文档,我将像这样启动 SAM 本地:
$ sam local start-api -d 5858
我的 launch.json 中有以下内容
{
"version": "0.2.0",
"configurations": [
{
"name": "Attach to SAM Local",
"type": "node",
"request": "attach",
"address": "localhost",
"port": 5858,
"localRoot": "${workspaceRoot}",
"remoteRoot": "/var/task"
}
]
}
但是当我启动 Visual Studio 调试器时,它说“无法连接到运行时,请确保运行时处于‘旧版’调试模式”
看起来很多人都在使用 Node.js 6 和 Visual Studio Code 时遇到这个问题,但我似乎找不到答案......我正在使用 Visual Studio Code 1.18.1 版本
我尝试将“protocol”:“Legacy”添加到launch.json配置中。我还尝试使用 --debug-port 而不是 -d 。 我使用的是 Windows 10。不确定问题是否特定于 Windows。
通过终端或 Visual Studio Code 的终端运行 sam local 时,设置断点并在调试下拉列表中选择
launch.json
的名称,如文档中所示。
https://github.com/awslabs/aws-sam-local#debugging-applications
之后,启动 sam local start-api。然后,当您点击 API 上的端点时,您应该会看到类似这样的终端状态:
2018/01/12 07:17:29 调用index.handler(nodejs6.10)
2018/01/12 07:17:29 安装 /Users/24g/1725_ecpo_lambda 为 /var/task:ro 在运行时容器内调试器侦听 [::]:8000
一旦您看到调试器正在监听。单击调试器上的播放按钮。我注意到这通常不会自行出现,除非有我认为的例外情况。
我使用的是 Visual Studio Code 1.19.1 版本。
您是否尝试过使用不同的端口?这是我当前的配置:
{
"version": "0.2.0",
"configurations": [
{
"name": "Attach to SAM Local",
"type": "node",
"request": "attach",
"address": "localhost",
"port": 8000,
"localRoot": "${workspaceRoot}",
"remoteRoot": "/var/task"
}
]
}
要解决此问题并调试 Node SAM 本地 Lambda 函数,我必须阅读 Node.js 调试文档 (https://code.visualstudio.com/docs/nodejs/nodejs-debugging#_supported-nodelike-runtimes)。
具体来说,我这边解决这个问题的部分与“Legacy”与“Inspector”调试协议相关。 对于 Node >8.0 Legacy 需要使用调试协议。
由于 Lambda 运行时依赖于 Node 6.10 “旧版”协议必须在我这边使用。
起初我认为这可能不是问题,因为 SAM 本地节点 VS Code 配置实际上不正确(至少对我来说)在其文档中引用了“Inspector”协议,同时正确引用了“Legacy”协议在这些相同文档内的 Gif(见下文)中。
对于那些想尝试的人,这是我的 WORKING launch.json 需要的样子。
{
"version": "0.2.0",
"configurations": [
{
"name": "Attach to SAM Local",
"type": "node",
"request": "attach",
"address": "127.0.0.1",
"port": 8000,
"localRoot": "${workspaceRoot}/dist",
"remoteRoot": "/var/task",
"protocol": "legacy"
}
]
}
其中最重要的部分是:“协议”:“遗留”
我假设您可以将 127.0.0.1 交换回 localhost,并端口回 5858(而不是 8000),因为这些都是我寻找解决方案的各种尝试的片段,但我还没有尝试过。
我会尽快向 github 上的 AWS SAM Local README.md 提交拉取请求(可在此处找到:https://github.com/awslabs/aws-sam-local#debugging-applications) 。 希望这可以帮助其他人!
将上述内容与文档进行比较,截至本文发布时,文档仍然列出以下 JSON 作为 VS Code launch.json 文件的正确设置:
不正确的 JSON 不起作用,但在文档中引用了(不要使用这个):
{
"version": "0.2.0",
"configurations": [
{
"name": "Attach to SAM Local",
"type": "node",
"request": "attach",
"address": "localhost",
"port": 5858,
"localRoot": "${workspaceRoot}",
"remoteRoot": "/var/task",
"protocol": "inspector"
}
]
}
不确定谁会看到这个,但我在使用
sam local invoke
测试时遇到了这个问题,但是,我的问题更简单。
我只是忘记将端口
-d 5860
添加到 sam local invoke
命令