amazon-web-services - 如何从 AWS lambda 执行 exe 文件
问题描述
我编写了一个 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
}
更新:
试验一:
我将 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()
解决方案
你确定你甚至可以执行外部二进制文件吗?这对我来说似乎违反直觉,就像它违反了 Lambda 的观点
完全可以接受。在 AWS 计算博客上查看在 AWS Lambda 中运行任意可执行文件。
我不知道把我的“abc.exe”放在哪里
要在 Lambda 上运行可执行文件,请将它们打包到您上传的 ZIP 文件中。然后做类似的事情
exec.Command(path.Join(os.GetEnv("LAMBDA_TASK_ROOT"), "abc.exe"))
.exe 文件是什么类型的文件?它是 Windows 应用程序吗?
您将无法在 Lambda 上运行 Windows 应用程序。链接的博客文章说:如果您编译自己的二进制文件,请确保它们是静态链接的或为匹配的 Amazon Linux 版本构建的
推荐阅读
- php - 我想按列对表格进行排序包含标签(HTML标签)
- angular - 有没有办法在 Zeppelin 中获取 Angular 到 Spark 的变量形式
- android - 更新房间数据库中的数据并更新视图后 BLE 连接突然失败
- android - Firebase FCM 使用 Ionic3 Cordova 推送通知
- powershell - office 365通过powershell批量添加共享邮箱成员
- jquery - 用 jquery 填充 html 表数据失败 Uncaught ReferenceError
- javascript - 如何使用引导程序 4 警报?
- elasticsearch - 如何将 ElasticSearch 命令翻译成 NEST 并使其具有幂等性
- stata - 面板数据中的返回计算不正确
- http - Jira 资源因 net::ERR_CONNECTION_ABORTED 而失败