如何从AWS Lambda执行exe文件

时间:2019-03-16 07:48:49

标签: amazon-web-services go aws-lambda aws-sdk

我编写了一个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()

1 个答案:

答案 0 :(得分:1)

  

您确定甚至可以执行外部二进制文件吗?这对我来说似乎违反直觉,就像它违反了Lambda的观点

完全可以接受。在AWS Compute Blog上查看Running Arbitrary Executables in AWS Lambda

  

我不确定将“ abc.exe”放在哪里

要在Lambda上运行可执行文件,请将可执行文件打包在您上传的ZIP文件中。然后做类似的事情

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

.exe文件是哪种文件?它是Windows应用吗?

您将无法在Lambda上运行Windows应用。链接的博客文章说:如果您编译自己的二进制文件,请确保它们是静态链接的或针对匹配版本的Amazon Linux构建的