1

嘿伙计们,这里的任何人都成功地断点了使用 Visual Studio 代码和 nodejs8.10 在本地运行的 lambda 函数?我想知道是不是因为我的项目是打字稿。我已经按照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

启动.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
        }
4

1 回答 1

1

我认为问题在于您尚未配置源映射。

当您运行 SAM 时,实际调用的代码是dist/lambda-section/ConsumeSQS/index.js, ad 甚至是通过包装器所必需的(这是您在 时看到的stopOnEntry。)

我建议你添加"sourceMaps": true到你的launch.json. 如果这很好用,但是您可能还需要使用sourceMapPathOverrides密钥。

如果您检查您的dist/.../index.js和匹配的地图的内容,您应该能够看到这些文件中引用的源地图路径与实际打字稿文件的路径之间的差异。然后,您可以相应地提供覆盖作为地图,例如:

"sourceMapPathOverrides": {
  "file:///lambda-section/ConsumeSQS/*": "${workspaceRoot}/main-dir/app/lambda-section/*"
}

(关于这些属性的更多信息可以在VSCode 文档中找到)

于 2019-05-01T09:30:08.073 回答