我创建了一个简单的程序来尝试上传到 AWS Lambda。这是 main.go 文件的片段:
package main
import (
"context"
"fmt"
"time"
"github.com/aws/aws-lambda-go/lambda"
)
type Input struct {
Message string `json:"message"`
Id string `json:"id"`
}
func testLambdaFunc(ctx context.Context, input Input) (int64, error) {
ts := time.Now().UnixMilli()
fmt.Printf("Timestamp: %d\n\tInput ID: %s\n", ts, input.Id, input.Message)
return ts, nil
}
func main() {
lambda.Start(testLambdaFunc)
}
我已按照 https://docs.aws.amazon.com/lambda/latest/dg/golang-package.html#golang-package-windows 上的说明使用 zip 文件将函数部署到 AWS Lambda 上。
无需任何 CLI 手动创建的 Lambda 函数的设置为: 运行时:Amazon Linux 2023 架构:x86_64
用于生成zip文件的命令行是:
set GOOS=linux
set GOARCH=amd64
set CGO_ENABLED=0
go build -o bootstrap main.go
C:\Users\Test\go\bin\build-lambda-zip.exe -o myFunction.zip bootstrap
生成 zip 文件后,我已在 AWS 控制台中手动上传了 zip 文件。这是通过在“代码”选项卡的“代码源”下选择从“.zip 文件”上传来完成的。
上传 zip 文件后,我单击“测试”选项卡中的“测试”按钮,但返回了错误:
{
"errorType": "Runtime.InvalidEntrypoint",
"errorMessage": "RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Error: fork/exec /var/task/bootstrap: exec format error"
}
我尝试在 macOS 上构建一个 zip 文件,它可以工作,所以我无法弄清楚为什么它不能在 Windows 笔记本电脑上工作。
不要使用
set GOOS=linux
这样做:
$env:GOOS = "linux"
对 GOARCH 做同样的事情,它应该可以工作!