Почему пример приложения AWS SAM Node.js не работает на Arch Linux LTS? - PullRequest
0 голосов
/ 01 мая 2019

Пример приложения AWS SAM Node.js не работает в моей среде Arch Linux LTS.

  • ОС: Arch Linux 4.19.37-1-lts
  • SAM версия: 0.15.0
  • Версия Docker: 18.09.5-ce, сборка e8ff056dbc

Ошибка может быть воспроизведена с помощью следующих шагов.

  1. Инициализировать пример приложения Node.js.
$ 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
  1. Запустите локальный API.
$ 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)
  1. Сделайте http запрос к http://127.0.0.1:3000/hello с curl в другом терминале. Ответ: « Внутренняя ошибка сервера ».
$ curl http://127.0.0.1:3000/hello
{"message":"Internal server error"}
  1. Ошибка 502 записывается в журнал сервера.
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 -

Кто-нибудь знает причину этой проблемы?

Дальнейшее расследование:

Я попытался запустить команду узла вручную в режиме взаимодействия с докером, затем я получил ошибку « Недопустимая инструкция », как показано ниже. Нужно больше расследований.

enter image description here

1 Ответ

0 голосов
/ 04 мая 2019

Мне удалось решить эту проблему, установив Node.js 8.10 через yum на этапе создания образа Docker и используя /usr/bin/node вместо исходного /var/lang/bin/node.

Изменения в Dockerfile lambci / lambda: nodejs8.10

https://github.com/y15e/docker-lambda/commit/3ec7f0fe8086b6fdcd15c92b9976b91072108f3f

enter image description here

Вы можете создать вышеуказанный модифицированный образ докера, выполнив следующие действия.

$ 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, в противном случае будет загружено исходное изображение док-станции, а вышеуказанные изменения будут отменены.

...