AWS SAM示例Node.js应用程序无法在我的Arch Linux LTS环境中运行。
可以通过以下步骤重现该错误。
$ sam init --runtime nodejs
[+] Initializing project structure...
Project generated: ./sam-app
Steps you can take next within the project folder
===================================================
[*] Invoke Function: sam local invoke HelloWorldFunction --event event.json
[*] Start API Gateway locally: sam local start-api
Read sam-app/README.md for further instructions
[*] Project initialization is now complete
$ cd sam-app
$ sam local start-api
2019-04-30 17:58:36 Found credentials in shared credentials file: ~/.aws/credentials
2019-04-30 17:58:36 Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET]
2019-04-30 17:58:36 You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. You only need to restart SAM CLI if you update your AWS SAM template
2019-04-30 17:58:36 * Running on http://127.0.0.1:3000/ (Press CTRL+C to quit)
$ curl http://127.0.0.1:3000/hello
{"message":"Internal server error"}
2019-04-30 17:59:20 Invoking app.lambdaHandler (nodejs8.10)
Fetching lambci/lambda:nodejs8.10 Docker container image......
2019-04-30 17:59:22 Mounting /var/work/sam-app/hello-world as /var/task:ro,delegated inside runtime container
2019-04-30 17:59:30 Function returned an invalid response (must include one of: body, headers or statusCode in the response object). Response received:
2019-04-30 17:59:30 127.0.0.1 - - [30/Apr/2019 17:59:30] "GET /hello HTTP/1.1" 502 -
有人知道这个问题的原因吗?
进一步调查:
我尝试在docker interctive模式下手动运行node命令,然后出现“ 非法指令”错误,如下所示。需要更多调查。
答案 0 :(得分:0)
我能够通过在docker映像构建阶段通过yum安装Node.js 8.10并使用/usr/bin/node
而不是原始的/var/lang/bin/node
来解决此问题。
lambci / lambda:nodejs8.10的Dockerfile中的更改
https://github.com/y15e/docker-lambda/commit/3ec7f0fe8086b6fdcd15c92b9976b91072108f3f
您可以按照以下步骤在修改后的Docker映像之上构建。
$ git clone git@github.com:y15e/docker-lambda.git
$ cd docker-lambda/nodejs8.10/run
$ docker build --no-cache -t lambci/lambda:nodejs8.10 .
然后运行sam local start-api --skip-pull-image
。不要忘记--skip-pull-image
选项,否则原始docker镜像将被下载并且上述更改将被还原。