大家好,有人成功断点了一个lambda函数,并在本地运行了Visual Studio代码和nodejs8.10吗?我想知道是否是因为我的项目是打字稿。 我没有遵循https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-using-debugging-nodejs.html。
如果我执行stopOnEntry: true
,则vscode将在某些文件上停止运行,但不会在实际函数的断点上运行。
输出:
$ sam local invoke ConsumeSQSFunction --no-event --region us-west-2 -d 5858
2019-04-30 11:19:16 Found credentials in shared credentials file: ~/.aws/credentials
2019-04-30 11:19:16 Invoking index.processPublisherServicesQueue (nodejs8.10)
Fetching lambci/lambda:nodejs8.10 Docker container image......
2019-04-30 11:19:17 Mounting /home/dev/Documents/xxxx/main-dir/dist/lambda-section/consume-sqs as /var/task:ro,delegated inside runtime container
Debugger listening on ws://0.0.0.0:5858/74f34edb-cdcd-4da0-82c0-950f5d809fd9
For help see https://nodejs.org/en/docs/inspector
Debugger attached.
START RequestId: 1a4198ca-cceb-1b38-f251-386a239dad19 Version: $LATEST
2019-04-30T18:19:19.800Z 1a4198ca-cceb-1b38-f251-386a239dad19 Hello World!
2019-04-30T18:19:19.800Z 1a4198ca-cceb-1b38-f251-386a239dad19 Processing queue {} [] undefined
END RequestId: 1a4198ca-cceb-1b38-f251-386a239dad19
REPORT RequestId: 1a4198ca-cceb-1b38-f251-386a239dad19 Duration: 199.46 ms Billed Duration: 200 ms Memory Size: 128 MB Max Memory Used: 45 MB
{"statusCode":200,"body":"{\"message\":\"hello world\"}"}
Waiting for the debugger to disconnect...
项目结构:
launch.json
/main-dir
/app
/lambda-section (where I did sam init)
/ConsumeSQS
index.ts
template.yaml
event.json
/etc
/dist
/lambda-section
/ConsumeSQS
index.js
index.js.map
template.yaml中的相关部分
Resources:
ConsumeSQSFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
FunctionName: ConsumeSQS
Description: 'Consumes messages from SQS queue'
CodeUri: ../../dist/lambda-section/consume-sqs/
Handler: index.processPublisherServicesQueue
Runtime: nodejs8.10
launch.json:
,
{
"name": "Attach to SAM CLI",
"type": "node",
"request": "attach",
"address": "localhost",
"port": 5858,
// From the sam init example, it would be "${workspaceRoot}/hello_world"
"localRoot": "${workspaceRoot}/main-dir/app/lambda-section",
"remoteRoot": "/var/task",
"protocol": "inspector",
"stopOnEntry": false
}
答案 0 :(得分:1)
我认为问题在于您尚未配置源地图。
运行SAM时,实际调用的代码是dist/lambda-section/ConsumeSQS/index.js
,甚至通过包装程序也是必需的(这是您stopOnEntry
看到的内容。)
我建议您将"sourceMaps": true
添加到launch.json
中。如果这样行之有效,那么您可能还需要使用sourceMapPathOverrides
键。
如果您检出dist/.../index.js
和匹配映射的内容,则应该能够看到这些文件中引用的源映射路径与实际打字稿文件的路径之间的差异。然后,您可以相应地将替代项作为地图提供,例如:
"sourceMapPathOverrides": {
"file:///lambda-section/ConsumeSQS/*": "${workspaceRoot}/main-dir/app/lambda-section/*"
}
(n.b。有关这些属性的更多信息,请参见VSCode documentation)