Как на самом деле пошаговая отладка в VSCode AWS Sam Локальные лямбда-функции - PullRequest
0 голосов
/ 30 апреля 2019

Эй, ребята, кто-нибудь здесь имел успех, остановив указание лямбда-функции, выполняемой локально с кодом 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
        }

1 Ответ

1 голос
/ 01 мая 2019

Я думаю, что проблема в том, что вы не настроили исходные карты.

Когда вы запускаете 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/*"
}

(еще больше информации об этих атрибутах можно найти в документации VSCode )

...