Тривиальная лямбда GO в IMAGE завершается с ошибкой /bin/sh: ./lambda-handler: разрешение отклонено
Я использую предоставленный aws файл Docker для создания шаблона SAM. Сама сборка и развертывание работают должным образом, однако при вызове конечной точки я получаю внутреннюю ошибку сервера с/bin/sh: ./lambda-handler: Permission denied
Файл, на который ссылается, является основной точкой входа изображения:
FROM public.ecr.aws/docker/library/golang:1.19 as build-image
WORKDIR /src
COPY go.mod go.sum main.go ./
RUN go build -o lambda-handler
FROM public.ecr.aws/lambda/provided:al2
COPY --from=build-image /src/lambda-handler .
RUN chmod -R o+rX ./lambda-handler
ENTRYPOINT ./lambda-handler
Событие, разбивающее его до минимальной функциональности, не удается. Вот код
package bye
import (
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)
func handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
return events.APIGatewayProxyResponse{
Body: "Bye",
StatusCode: 200,
}, nil
}
func main() {
lambda.Start(handler)
}
Не удается выполнить сборку и развертывание Сэма, а также локальный запуск API Сэма.
Дальнейшие журналы:
Invoking Container created from byeworldfunction:provided.al2-v1
Reuse the created warm container for Lambda function 'ByeWorldFunction'
Lambda function 'ByeWorldFunction' is already running
START RequestId: 15e2e7cc-c7e8-4c4a-b0ee-18e0669172f8 Version: $LATEST
/bin/sh: ./lambda-handler: Permission denied
07 Jun 2023 05:53:43,903 [ERROR] (rapid) Init failed error=Runtime exited with error: exit status 126 InvokeID=
/bin/sh: ./lambda-handler: Permission denied
END RequestId: e3fceeba-f052-4439-908c-b3f84164c9a4
REPORT RequestId: e3fceeba-f052-4439-908c-b3f84164c9a4 Init Duration: 0.36 ms Duration: 5.16 ms Billed Duration: 6 ms Memory Size: 128 MB Max Memory Used: 128 MB
Invalid lambda response received: Lambda response must be valid json
Я попытался настроить разрешения для каталога с помощью chmod согласно руководству по устранению неполадок aws:chmod -R o+rX ./lambda-handler
https://docs.aws.amazon.com/lambda/latest/dg/troubleshooting-deployment.html
но безрезультатно,
Я ожидаю, что смогу достичь конечной точки и получить действительный ответ.
1 ответ
Как упоминалось в комментарии, это проблема с именем пакета. Потому что среда выполнения AWS Lambda ищет основной пакет с основной функцией в качестве точки входа.
package main : в Go пакет, содержащий func main(), всегда должен называться main.