AWS Lambda GO PathError (Windows 10)

Я сделал следующее в PowerShell в VSCode:

       PS D:\Project Resume> set GOOS=linux
PS D:\Project Resume> set GOARCH=amd64
PS D:\Project Resume> set CGO_ENABLED=0
PS D:\Project Resume> cd .\dist\events\
PS D:\Project Resume\dist\events> go build -o main main.go
PS D:\Project Resume\dist\events> ~\Go\Bin\build-lambda-zip.exe -o main.zip main
2020/11/14 14:05:13 wrote main.zip

Кажется, это нормально заархивирует файл, и я также изменил обработчик на "main" в консоли Lambda. Однако я все еще получаю это:

       START RequestId: 42d5f7d6-3c9d-457d-ab2f-5030b39a5bce Version: $LATEST
fork/exec /var/task/main: exec format error: PathError
null
END RequestId: 42d5f7d6-3c9d-457d-ab2f-5030b39a5bce
REPORT RequestId: 42d5f7d6-3c9d-457d-ab2f-5030b39a5bce  Duration: 0.43 ms   Billed Duration: 100 ms Memory Size: 512 MB Max Memory Used: 24 MB  Init Duration: 2.84 ms  

Если это важно, вот код, который у меня есть (я следил за учебником на YouTube, используя "main.go" в качестве имени файла):

       //Lambda Function Go Code
package main

import (
    "errors"

    "github.com/aws/aws-lambda-go/events"
    "github.com/aws/aws-lambda-go/lambda"
)

func main() {
    lambda.Start(HandleRequest)
}

//HandleRequest the request handler for our lambda stuff
func HandleRequest(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
    if request.HTTPMethod == "POST" {
        var stringResponse string = "Success :)"
        APIResponse := events.APIGatewayProxyResponse{Body: stringResponse, StatusCode: 200}
        return APIResponse, nil
    }
    err := errors.New("Method Not Allowed")
    APIResponse := events.APIGatewayProxyResponse{Body: "Method Not OK", StatusCode: 502}
    return APIResponse, err

}

Из любопытства я решил также проверить права доступа к zip-файлу. Может быть, это как-то связано с этим???

2 ответа

Решение

В моем случае я следил за документацией, думая, что КОМАНДА для установки переменной env GOOS выглядит примерно так:

set GOOS=linux

Однако согласно следующей документации:

https://mcpmag.com/articles/2019/03/28/environment-variables-in-powershell.aspx?m=1

Поскольку я работал в PowerShell, СЛЕДУЕТ использовать ЭТУ команду:

$env:GOOS = "linux"

Как говорится во многих документах в другом месте, вы будете знать, что правильно установили переменную env, если будете использовать следующее в PowerShell, будь то из VSCode или вне этой IDE:

go env

Я надеюсь, что это поможет кому-то компилировать в Windows в будущем.

Согласно документации Параметр обработчика должен соответствовать имени исполняемого файла, содержащего ваш обработчик.

вы обновили имя обработчика в конфигурации лямбда на main

по умолчанию он установлен на hello

Обновите его до main

Другие вопросы по тегам