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.
{
"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).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With