猿问

尝试调用 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"

}


手掌心
浏览 130回答 3
3回答

呼如林

您正在尝试运行 go 源代码文件。您需要运行二进制文件:# Build the binary for your moduleGOOS=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此外,您还需要在 zip 文件中设置可执行位。有很多方法可以做到这一点,如果你想在 Windows 上做到这一点,你需要运行一个像这样的 python 脚本:import zipfileimport timedef make_info(filename):    info = zipfile.ZipInfo(filename)    info.date_time = time.localtime()    info.external_attr = 0x81ed0000    info.create_system = 3    return infozip_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,但为所有文件设置了可执行位。

一只甜甜圈

我遇到了同样的问题,您必须确保二进制文件的名称与处理程序的名称相似。这应该已经是你的情况了:$ unzip -l main.zip Archive:  main.zip  Length      Date    Time    Name---------  ---------- -----   ---- 21477357  11-13-2020 00:02   main更棘手的是,您应该确保二进制文件具有正确的权限,正如 Anon Coward 在评论中强调的那样:$ ls -l bin/main -rwxrwxr-x 1 root root 19325838 nov.  12 03:23 bin/main这应该使您的二进制文件可执行。就我而言,我无法生成chmod 755二进制文件,因为我在 Ubuntu VM 中工作,位于 VM 中安装的共享文件夹下,所以我最终得到了这些权限,但无法更改它们:$ ls -l bin/main -rwxrwx--- 1 root vboxsf 19325838 Nov 12 02:23 bin/main如果有人有答案,我很想知道为什么我无法更改虚拟机内文件的组和权限。

qq_笑_17

当我尝试在本地调用无服务器函数时,我遇到了同样的问题,我暂时禁用了 selinux,然后调用了该函数,并且它成功运行。
随时随地看视频慕课网APP

相关分类

Go
我要回答