38

I have a go application, structured like this:

cmd
|
reports
|
main.go

main.go imports internal/reports package and has a single function, main(), which delegates call to aws-lambda-go/lambda.Start() function.

Code is build running the commands (snippet):

cd internal/reports && go build handler.go
cd ../..
go build -o reports ../cmd/reports/main.go && chmod +x reports && zip reports.zip reports

reports.zip is uploaded to AWS Lambda, which in turns throws an error when Test button is pressed:

{
  "errorMessage": "fork/exec /var/task/reports: exec format error",
  "errorType": "PathError"
}

reports is set as Lambda's Handler.

Also, code is build on Ubuntu 14.04 machine, as a part of aws/codebuild/ubuntu-base:14.04 Docker Image, on AWS CodeBuild. There should be no environment issues here, even though the error suggests a cross-platform problem.

Any ideas?

John Rotenstein
  • 241,921
  • 22
  • 380
  • 470
Ivan
  • 867
  • 1
  • 8
  • 15

2 Answers2

80

You have to build with GOARCH=amd64 GOOS=linux. Wherever you build your binary, the binary for Lambda is run on Amazon Linux.

So , try this build command.

GOARCH=amd64 GOOS=linux go build handler.go

Toshinori Sugita
  • 1,674
  • 1
  • 13
  • 12
  • hmm build in Windows 10 only works for me when "GOOS=", and then I have to set "GOARCH=amd64 GOOS=linux" to get build-lambda-zip.exe to work – influent Feb 11 '19 at 22:25
  • running "go get -u golang.org/x/crypto/md4" fixed the issue for me, not sure why I had to do that – influent Feb 11 '19 at 22:50
  • https://docs.aws.amazon.com/lambda/latest/dg/golang-package.html#golang-package-windows gave the details I needed on Windows, but this answer pointed me there – Eric D. Johnson May 15 '21 at 19:25
  • 7
    A lot of the Amazon documentation and online walkthroughs skip/ignore the `GOARCH=amd64` piece. If you're on one of the new Mac M1 chips this is required. – Dominic O'Connor Dec 16 '21 at 15:49
35

The issue is that main() function is not declared in main package, which is mandatory by Golang language spec

Ivan
  • 867
  • 1
  • 8
  • 15