15

I'm working through an automated deployment of a Go-based AWS Lambda, and having issues.

My AWS Serverless template is:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
  HelloLambda:
    Type: AWS::Serverless::Function
    Properties:
      Handler: hello
      Runtime: go1.x
      CodeUri: ./deploy/hello.zip
      Environment:
        Variables: 
          S3_BUCKET: hello_lambda

I deploy this via:

GOOS=linux GOARCH=amd64 go build -o ./deploy/hello
zip ./deploy/hello.zip ./deploy/hello
aws cloudformation package \
   --template-file hello.yaml \
   --output-template-file serverless-deploy_hello.yaml \
   --s3-bucket hello_deploy
aws cloudformation deploy\
 --template-file serverless-deploy_hello.yaml\
  --stack-name hello-lambda\
  --capabilities CAPABILITY_IAM

When Cloudformation does its thing, serverless-deploy_hello.yaml has CodeUri: s3://hello_deploy/17ab86653aab79eee51fc6f77d7a152e and that s3 bucket contains the zip file (when I download it locally & use cmp it's bit-identical).

BUT when I test the resulting Lambda, it gives me:

{
  "errorMessage": "fork/exec /var/task/hello: no such file or directory",
  "errorType": "PathError"
}

Not quite sure what I'm doing wrong here....

==== RESOLVED ====

The zip command above zips the directory path as well, so the executable unzips to deploy/hello rather than ./hello.

Accordingly, the Lambda runtime can't connect to the process.

Arien Malec
  • 903
  • 7
  • 9
  • 2
    Can you please check while extracting the zip, if it creates an additional folder? something like var/task/hello/hello". This can be possible cause. But you said that while downloading it locally, it creates the same exact path. Just a hunch maybe. – Sudip Feb 27 '18 at 04:56
  • well, that was an issue with one of the zip files, but the one I'm uploading now only contains the `hello` executable. Weird. – Arien Malec Feb 27 '18 at 06:21
  • Nope, that was exactly the issue - was looking at the wrong zip – Arien Malec Feb 27 '18 at 06:30
  • been there.. :P – Sudip Feb 27 '18 at 07:45

1 Answers1

15
{
  "errorMessage": "fork/exec /var/task/hello: no such file or directory",
  "errorType": "PathError"
}

This will look for the hello function in your zipfile as an starting point of the Application. If you want to continue with the main function or some other function

func main() {
    lambda.Start(HandleLambdaEvent)
}

You need to change the handler Name on AWS Lambda function template (By default it is hello). enter image description here

GraphicalDot
  • 2,644
  • 2
  • 28
  • 43