使用 .NET 5 web api 和 Lambda RIE 在本地测试 AWS Lambda 容器
Locally test AWS Lambda container with .NET 5 web api and Lambda RIE
我按照说明在本地测试 lambda 容器 https://docs.aws.amazon.com/lambda/latest/dg/images-test.html
但是我做不到。
我创建了一个示例项目来重现它https://gitlab.com/sunnyatticsoftware/sandbox/lambda-dotnet5-webapi(请参阅 README 了解其生成的步骤)
基本上我使用的是 Amazon dotnet 模板,它使用容器生成 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 运行time Interface Emulator (RIE) 在本地测试它,这些是我遵循的步骤:
- 使用
dotnet build -c Release
构建项目
- 使用
dotnet publish -c Release
发布工件
- 使用
docker build -t lambda-dotnet .
构建 docker 图像
- 下载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
- 运行 模拟器传递 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
文件中,我可以为要发送到 lambda 的事件设置 json。
我按照说明在本地测试 lambda 容器 https://docs.aws.amazon.com/lambda/latest/dg/images-test.html
但是我做不到。
我创建了一个示例项目来重现它https://gitlab.com/sunnyatticsoftware/sandbox/lambda-dotnet5-webapi(请参阅 README 了解其生成的步骤)
基本上我使用的是 Amazon dotnet 模板,它使用容器生成 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 运行time Interface Emulator (RIE) 在本地测试它,这些是我遵循的步骤:
- 使用
dotnet build -c Release
构建项目
- 使用
dotnet publish -c Release
发布工件
- 使用
docker build -t lambda-dotnet .
构建 docker 图像
- 下载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
- 运行 模拟器传递 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
文件中,我可以为要发送到 lambda 的事件设置 json。