使用.net 5 web api和Lambda RIE本地测试AWS Lambda容器



我按照指示在本地测试lambda容器https://docs.aws.amazon.com/lambda/latest/dg/images-test.html

但是我不能这样做。

我已经创建了一个示例项目来复制它https://gitlab.com/sunnyatticsoftware/sandbox/lambda-dotnet5-webapi(参见README一步一步地生成它)

基本上,我正在使用一个Amazon。net模板,它使用容器生成一个AWS Lambda函数作为。net 5 web api。

这个项目很好。Dockerfile被描述为

FROM public.ecr.aws/lambda/dotnet:5.0
WORKDIR /var/task
COPY "bin/Release/net5.0/publish"  .

现在我想使用Amazon Lambda Runtime Interface Emulator在本地测试它(RIE),以下是我遵循的步骤:

  1. 使用dotnet build -c Release构建项目
  2. 使用dotnet publish -c Release发布工件
  3. 使用docker build -t lambda-dotnet .构建docker镜像
  4. 下载RIE
    mkdir -p ~/.aws-lambda-rie && curl -Lo ~/.aws-lambda-rie/aws-lambda-rie https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie && chmod +x ~/.aws-lambda-rie/aws-lambda-rie
    
    我可以看到模拟器下载正确
    ls -la ~/.aws-lambda-rie/aws-lambda-rie
    -rw-r--r-- 1 diego.martin 1049089 8155136 Feb 22 14:32 /c/Users/diego.martin/.aws-lambda-rie/aws-lambda-rie
    
  5. 运行模拟器,传递lambda图像
    docker run -d -v ~/.aws-lambda-rie:/aws-lambda -p 9000:8080 --entrypoint /aws-lambda/aws-lambda-rie lambda-dotnet:latest
    

这是我得到错误

的时候
12997dddc6e50aca3020527be30a1479eee9ceef412ab5009b99e9eb8cf1fa67
docker: Error response from daemon: OCI runtime create failed: container_linux.go:370: starting container process caused: exec: "C:/Users/diego.martin/AppData/Local/Programs/Git/aws-lambda/aws-lambda-rie": stat C:/Users/diego.martin/AppData/Local/Programs/Git/aws-lambda/aws-lambda-rie: no such file or directory: unknown.

我错过了什么?我没有指定任何入口点,因为我没有。

PS:最后一步是发送一些lambda事件到我的容器的函数与
curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

dotnet的lambda docker映像已经包含了RIE,所以使用以下内容就足够了(更多细节请参阅repo):

创建图像

docker build -t lambda-dotnet:latest .

运行

docker run -p 9000:8080 lambda-dotnet "LambdaDotNet5::LambdaDotNet5.LambdaEntryPoint::FunctionHandlerAsync"

然后测试它,我可以在另一个终端使用CURL

curl -vX POST http://localhost:9000/2015-03-31/functions/function/invocations -d @test_request.json --header "Content-Type: application/json"

和在test_request.json文件中,我可以有json的事件,我想发送到lambda。

最新更新