Dat*_*ray 6 amazon-web-services aws-lambda aws-api-gateway aws-sam
我在 Golang 中开发了一组 Lambda 函数,并尝试使用 SAM 部署这些函数和 API 网关。
我正在本地创建可执行文件,为每个 lambda 函数创建 zip 文件,并将这些 zip 文件上传到 s3 存储桶。
我在 SAM 模板文件中给出了这个 S3 存储桶的参考。
我的 SAM 模板文件如下所示
myfunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: s3://<<my-bucket>>/bin/handlers/myfunction.zip
Handler: myfunction
Role: !GetAtt CFLambdaExecutionRole.Arn
Events:
Getcfdemoapi:
Type: Api
Properties:
Path: /myfunction
Method: get
CreateCustomer:
Type: Api
Properties:
Path: /myfunction
Method: post
UpdateCustomer:
Type: Api
Properties:
Path: /customer
Method: put
DeleteCustomer:
Type: Api
Properties:
Path: /myfunction
Method: delete
Run Code Online (Sandbox Code Playgroud)
部署成功。
我通过 API 网关调用了 lambda 函数。
我检查了 Cloud watch 日志并看到以下错误 -
错误 fork/exec /var/task/myfunction :没有这样的文件或目录:PathError
SAM 模板中是否有与 CodeUri 和处理程序相关的错误?
我正在 MacOS 上创建构建并使用以下命令进行构建 -
GOOS=linux GOARCH=amd64 go build
Run Code Online (Sandbox Code Playgroud)
此特定错误可能是由许多问题引起的。我想到的三个是:
myfunction(您使用 setHandler: myfunction因此,必须命名该二进制文件myfunction)要解决此问题,您可以在包含 Lambda 函数代码的目录中运行以下命令。
第 1 步:构建二进制文件并明确将名称设置为myfunction
GOOS=linux GOARCH=amd64 go build -o myfunction
Run Code Online (Sandbox Code Playgroud)
如果您不使用该-o选项,则二进制文件将以您正在构建的目录命名。因此,如果该目录本身没有命名myfunction,则生成的二进制文件将具有错误的名称(请参阅上面可能的问题#1)。
第 2 步:创建 ZIP 存档
zip --junk-paths myfunction.zip myfunction
Run Code Online (Sandbox Code Playgroud)
该--junk-paths选项将删除路径并将二进制文件放入 ZIP 存档的“根”中。手册页说:
仅存储已保存文件的名称(丢弃路径),而不存储目录名称。默认情况下,zip 将存储完整路径(相对于当前目录)。
这是为了避免我上面列出的问题 #3。
要检查这是否按预期工作,您可以运行以下命令:
unzip -l myfunction.zip
Run Code Online (Sandbox Code Playgroud)
这应该显示如下内容:
Archive: myfunction.zip
Length Date Time Name
--------- ---------- ----- ----
2142872 12-01-2020 19:19 myfunction
--------- -------
2142872 1 file
Run Code Online (Sandbox Code Playgroud)
第 3 步:将 ZIP 存档上传到 S3
要将 ZIP 存档上传到 S3,我建议您使用 AWS CLI。AWS 控制台也可以工作。
使用 AWS CLI,您可以运行以下命令:
aws s3 cp myfunction.zip s3://<<my-bucket>>/bin/handlers/myfunction.zip
Run Code Online (Sandbox Code Playgroud)
cp可以在此处找到此命令的文档: cp 文档。
| 归档时间: |
|
| 查看次数: |
517 次 |
| 最近记录: |