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.