aws / aws/aws-toolkit-vscode

M1 Mac (Apple Silicon): AWS SAM Golang lambda debugging does not work

Open
#2,020 12 comments 7 reactions 0 assignees View on GitHub
blocked guidance lambda-arm language:go platform:macos
Dominant language
TypeScript
Stars
2k
Forks
807
Avg merge
10h 12m
Merged PRs (30d)
7

Description

**Desktop (please complete the following information):**

- OS: macOS BigSur 11.5.2 (M1)
- VS Code version: 1.16
- AWS Toolkit extension version: 1.29.0
- AWS SAM cli version: 1.31.0
- Go version: 1.16.8 (also tried this with the latest 1.17.1, but has the same issue)
- vscode-go version: 0.27.2

### How to get my AWS SAM initiated local debugging of lambda's written in Go working?

**Summary of the problem**
After creating a plain vanilla AWS SAM application with `sam init` for `golang`, and then using the code lens to create an AWS SAM template file based debug configuration, I get the following error when trying to debug the lambda code. Running the code without debugging works.
```
2021-09-11 10:55:02 [INFO]: The Delve repo was not found in your GOPATH. Downloading in a temporary directory...
2021-09-11 10:55:03 [INFO]: Preparing to debug locally: Lambda "hello-world"
2021-09-11 10:55:03 [INFO]: Building SAM application...
2021-09-11 10:55:03 [INFO]: Running command: (not started) [/opt/homebrew/bin/sam build --build-dir /tmp/aws-toolkit-vscode/vsctkeYZ6BB/output --template /Users/user1/dev/godev/aws/lambdas/hello-world/hello-world/app___vsctk___template.yaml --base-dir /Users/user1/dev/godev/aws/lambdas/hello-world/hello-world]
2021-09-11 10:55:03 [INFO]: Building codeuri: /Users/user1/dev/godev/aws/lambdas/hello-world/hello-world runtime: go1.x metadata: {} functions: ['helloworld']

2021-09-11 10:55:03 [INFO]: Running GoModulesBuilder:Build

2021-09-11 10:55:03 [INFO]:
Build Succeeded

2021-09-11 10:55:03 [INFO]:
Built Artifacts : ../../../../../../../private/tmp/aws-toolkit-vscode/vsctkeYZ6BB/output
Built Template : ../../../../../../../private/tmp/aws-toolkit-vscode/vsctkeYZ6BB/output/template.yaml

Commands you can use next
=========================
[*] Invoke Function: sam local invoke -t ../../../../../../../private/tmp/aws-toolkit-vscode/vsctkeYZ6BB/output/template.yaml
[*] Deploy: sam deploy --guided --template-file ../../../../../../../private/tmp/aws-toolkit-vscode/vsctkeYZ6BB/output/template.yaml

2021-09-11 10:55:04 [INFO]: Build complete.
2021-09-11 10:55:04 [INFO]: Starting SAM application locally
2021-09-11 10:55:05 [INFO]: AWS.running.command
Invoking hello-world (go1.x)
Requested to skip pulling images ...

Mounting /tmp/aws-toolkit-vscode/vsctkeYZ6BB/output/helloworld as /var/task:ro,delegated inside runtime container
START RequestId: 7c546e9e-8558-4fde-8dd6-fc6946034850 Version: $LATEST
API server listening at: [::]:5858
2021-09-11T00:55:07Z info layer=debugger launching process with args: [/var/task/hello-world]
2021-09-11 10:55:07 [INFO]: Waiting for SAM application to start...
could not launch process: fork/exec /var/task/hello-world: function not implemented
2021/09/11 00:55:07 exit status 1
time="2021-09-11T00:55:07.765" level=error msg="Init failed" InvokeID= error="Runtime exited with error: exit status 1"
time="2021-09-11T00:55:07.773" level=error msg="INIT DONE failed: Runtime.ExitError"
2021-09-11 10:55:08 [INFO]: Attaching debugger to SAM application...

Command stopped: "sam local invoke"
```
From the output listed above, it seems to me that when using the debugger, it thinks that the function is not implemented.
2021-09-11 10:55:07 [INFO]: Waiting for SAM application to start...
**could not launch process**: fork/exec /var/task/hello-world: **function not implemented**

Running the above lambda from command line with `sam build && sam local invoke` works.

**Other considerations**

- Go debugging works for vanilla go apps (non lambdas)
- Go lambdas run successfully with `sam local invoke`.

**Steps to reproduce**

1. Create a new AWS SAM application using Go with `sam init`.
2. Select the `Hello world` template.
3. In the main.go file, create a debug configuration from the code lens provided by the AWS Toolkit and associated with the handler.
4. Set a breakpoint and start debugging.

Contributor guide

Open the contributing guide

Research direction

Start with the generated debug configuration from main.go and the AWS SAM template, then compare the Toolkit's debug launch path with the working `sam build && sam local invoke` flow. Investigate the Delve startup output and the `/var/task/hello-world` launch failure on M1. Done means the generated configuration can debug the Go Lambda successfully while ordinary local invocation continues to work.

Written by the indexing model from the issue text.

Assessment

Tech stack
aws, go, vscode
Domain
backend, cloud, devtools
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.