【发布时间】:2018-08-06 15:30:06
【问题描述】:
我正在自动部署基于 Go 的 AWS Lambda,但遇到了问题。
我的 AWS Serverless 模板是:
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
我通过以下方式部署它:
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
当 Cloudformation 执行其操作时,serverless-deploy_hello.yaml 具有 CodeUri: s3://hello_deploy/17ab86653aab79eee51fc6f77d7a152e,并且该 s3 存储桶包含 zip 文件(当我在本地下载它并使用 cmp 时,它是位相同的)。
但是当我测试生成的 Lambda 时,它给了我:
{
"errorMessage": "fork/exec /var/task/hello: no such file or directory",
"errorType": "PathError"
}
不太清楚我在这里做错了什么......
==== 已解决 ====
上面的 zip 命令也会压缩目录路径,因此可执行文件解压缩到 deploy/hello 而不是 ./hello。
因此,Lambda 运行时无法连接到进程。
【问题讨论】:
-
您能否在解压缩 zip 时检查它是否会创建一个额外的文件夹?类似 var/task/hello/hello"。这可能是原因。但你说在本地下载它时,它会创建相同的确切路径。可能只是预感。
-
嗯,这是其中一个 zip 文件的问题,但我现在上传的文件只包含
hello可执行文件。很奇怪。 -
不,这正是问题所在 - 正在查看错误的 zip
-
去过那里.. :P
标签: go aws-lambda