为了账号安全,请及时绑定邮箱和手机立即绑定

尝试调用 Go AWS Lambda 函数时权限被拒绝

尝试调用 Go AWS Lambda 函数时权限被拒绝

Go
手掌心 2023-07-26 13:28:16
我创建了一个 AWS Lambda 函数,我使用 Webhook 来调用API 网关go build -o main.go。下面是我自从读到必须指定扩展名以来所使用的代码。package mainimport (    "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"}
查看完整描述

3 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

您正在尝试运行 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

此外,您还需要在 zip 文件中设置可执行位。有很多方法可以做到这一点,如果你想在 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,但为所有文件设置了可执行位。


查看完整回答
反对 回复 2023-07-26
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

我遇到了同样的问题,您必须确保二进制文件的名称与处理程序的名称相似。这应该已经是你的情况了:


$ 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

如果有人有答案,我很想知道为什么我无法更改虚拟机内文件的组和权限。


查看完整回答
反对 回复 2023-07-26
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

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



查看完整回答
反对 回复 2023-07-26
  • 3 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信