登录
首页 >  Golang >  Go问答

AWS Lambda 函数调用权限被拒绝问题的解决方法

来源:stackoverflow

时间:2024-03-01 13:45:26 270浏览 收藏

Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《AWS Lambda 函数调用权限被拒绝问题的解决方法》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!


问题内容

我创建了一个 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 Deployment documentations

此外,您还需要在 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 ,内容相同,但为所有文件设置了可执行位。

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

今天关于《AWS Lambda 函数调用权限被拒绝问题的解决方法》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>