amazon-web-services - 尝试调用 Go AWS Lambda 函数时权限被拒绝
问题描述
我创建了一个 AWS Lambda 函数,我正在使用 Webhook 调用API 网关下面是我构建的代码,go build -o main.go
因为我一直在阅读您必须指定扩展名。
package main
import (
"context"
"fmt"
"github.com/aws/aws-lambda-go/lambda"
)
func HandleRequest(ctx context.Context) (string, error) {
return fmt.Sprintf("Hello!"), nil
}
func main() {
lambda.Start(HandleRequest)
}
问题是即使我对上传的S3 函数 .zip具有公共权限以及角色权限,我仍然遇到权限错误。
{
"errorMessage": "fork/exec /var/task/main: permission denied",
"errorType": "PathError"
}
解决方案
您正在尝试运行 go 源代码文件。您需要运行二进制文件:
# Build the binary for your module
GOOS=linux go build main.go
# Package the binary, note we're packaging "main", not "main.go" here:
zip function.zip main
# And upload "function.zip" this package to Lambda
有关更多详细信息,包括在其他平台上运行此过程的说明,请参阅AWS Lambda 部署文档
此外,您需要在 zipfile 中设置可执行位。有很多方法可以做到这一点,如果你想在 Windows 上做到这一点,你需要像这样运行一个 python 脚本:
import zipfile
import time
def make_info(filename):
info = zipfile.ZipInfo(filename)
info.date_time = time.localtime()
info.external_attr = 0x81ed0000
info.create_system = 3
return info
zip_source = zipfile.ZipFile("source_file.zip")
zip_file = zipfile.ZipFile("dest_file.zip", "w", zipfile.ZIP_DEFLATED)
for cur in zip_source.infolist():
zip_file.writestr(make_info(cur.filename), zip_source.open(cur.filename).read(), zipfile.ZIP_DEFLATED)
zip_file.close()
这将使用相同的内容将其source_file.zip
重新打包dest_file.zip
,但为所有文件设置可执行位。
推荐阅读
- reactjs - 为什么反应钩子 setState 总是执行两次
- http - 向 Gmail 发送电子邮件时如何处理打开的跟踪问题
- google-apps-script - 在 Google 表格中,是否可以通过下拉菜单更改其他下拉菜单
- javascript - 街机物理碰撞不会与墙壁水平碰撞?
- django - 如何反向序列化程序,如 ForeignKey 中的模型?
- scala - 如何使用 spark jdbc 连接截断 teradata 中的表
- c++ - 如何让这个程序运行得更快?
- java - 我的程序运行但没有输出
- java - 如何根据 WSDL 验证soap请求
- java - 我想检查我的用户输入是否包含一个子字符串,它是我的 firestore 数据库中的一个文档,这在 Java 中是否可行?(安卓工作室)