登录
首页 >  Golang >  Go问答

如何从 AWS lambda 执行 exe 文件

来源:stackoverflow

时间:2024-04-12 18:54:33 113浏览 收藏

从现在开始,努力学习吧!本文《如何从 AWS lambda 执行 exe 文件》主要讲解了等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

问题内容

我编写了一个 lambda 函数,它执行另一个名为 abc.exe 的 exe 文件。

现在我已经创建了 lambda 函数的 zip 并将其上传到 aws。我不确定将“abc.exe”放在哪里

我尝试将其放在同一个 zip 中,但出现以下错误:

exec: "abc": 在 $path 中找不到可执行文件:

这是我的 lambda 函数代码:

func handlelambdaevent(request request) (response, error) {

    fmt.println("input", request.input)
    fmt.println("output", request.output)

    cmd := exec.command("abc", "-v", "--lambda", request.input, "--out", request.output)
    var out bytes.buffer
    var stderr bytes.buffer
    cmd.stdout = &out
    cmd.stderr = &stderr
    err := cmd.run()

    if err != nil {
        fmt.println(fmt.sprint(err) + ": " + stderr.string())
        return response{message: fmt.sprintf(stderr.string())}, nil
    }
    fmt.println("result: " + out.string())

    return response{message: fmt.sprintf(" %s and %s are input and output", request.input, request.output)}, nil
}

更新:

试验 1:

我将 abc.exe 上传到 s3,然后在我的 handlelambdaevent 函数中将其下载到 tmp/ 文件夹。接下来,当我在成功下载后尝试访问它时,它显示以下错误:

fork/exec /tmp/abc:没有这样的文件或目录:

下载 abc.exe 的代码:

file, err2 := os.Create("tmp/abc.exe")
    if err2 != nil {
        fmt.Println("Unable to create file %q, %v", err2)
    }

    defer file.Close()


    sess, _ := session.NewSession(&aws.Config{
        Region: aws.String(region)},
    )

    downloader := s3manager.NewDownloader(sess)

    numBytes, err2 := downloader.Download(file,
        &s3.GetObjectInput{
            Bucket: aws.String(bucket),
            Key:    aws.String("abc.exe"),
        })
    if err2 != nil {
        fmt.Println("Unable to download item %q, %v", fileName, err2)
    }

    fmt.Println("Downloaded", file.Name(), numBytes, "bytes")
    file.Close()

解决方案


完全可以接受。请查看 aws 计算博客上的 Running Arbitrary Executables in AWS Lambda

要在 lambda 上运行可执行文件,请将它们打包到您上传的 zip 文件中。然后做类似的事情

exec.Command(path.Join(os.GetEnv("LAMBDA_TASK_ROOT"), "abc.exe"))

您将无法在 lambda 上运行 windows 应用程序。链接的博客文章说:如果您编译自己的二进制文件,请确保它们是静态链接的或者是为匹配版本的 amazon linux 构建的

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

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