Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Deploying AWS Lambda with Go & Cloudformation

Tags:

go

aws-lambda

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.

like image 323
Arien Malec Avatar asked Feb 27 '18 04:02

Arien Malec


1 Answers

{
  "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

like image 163
GraphicalDot Avatar answered Sep 18 '22 15:09

GraphicalDot