В приложении SAM Node.js hello world отсутствует модуль axios - PullRequest
0 голосов
/ 07 января 2019

Я новичок в Node.js и SAM.

Я следую онлайн-руководству по AWS здесь , за исключением того, что я использую Node.js. В частности, я выполнил следующие команды:

Версия:

▶ sam --version 
SAM CLI, version 0.10.0
▶ node --version                                                               
v8.15.0

Сложение:

▶ sam init --runtime nodejs
▶ cd sam-app/
▶ sam build
▶ sam package \
  --template-file template.yaml \
  --output-template-file packaged.yaml \
  --s3-bucket $s3_bucket
▶ sam deploy \
  --template-file packaged.yaml \
  --stack-name sam-app \
  --capabilities CAPABILITY_IAM

Это все развертывает стек и функцию в порядке, но затем я ломаюсь, когда я проверяю его, потому что модуль axios отсутствует:

{
  "errorMessage": "Cannot find module 'axios'",
  "errorType": "Error",
  "stackTrace": [
    "Function.Module._load (module.js:474:25)",
    "Module.require (module.js:596:17)",
    "require (internal/module.js:11:18)",
    "Object.<anonymous> (/var/task/app.js:2:15)",
    "Module._compile (module.js:652:30)",
    "Object.Module._extensions..js (module.js:663:10)",
    "Module.load (module.js:565:32)",
    "tryModuleLoad (module.js:505:12)",
    "Function.Module._load (module.js:497:3)"
  ]
}

Модуль Axios, похоже, находится в каталоге сборки:

▶ ls -1 sam-app/.aws-sam/build/HelloWorldFunction/node_modules 
axios/
debug/
follow-redirects/
is-buffer/
ms/

Но не в лямбде:

AWS Console

Я видел этот другой ответ SO, но это не помогает, потому что я думал, что SAM должен упаковать все свои зависимости.

Кто-нибудь знает, что не так?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

В дополнение к этому проблема заключается в том, что сгенерированная документация для Node.js содержит опечатку, в которой указана команда sam package, которую я использовал, как можно увидеть в этой ревизии AWS SAM Исходный код CLI.

Я поднял запрос на удаление, чтобы исправить это здесь .

0 голосов
/ 07 января 2019

sam build создаст артефакт sam-app с node_modules. Но когда вы делаете sam package с --template-file template.yaml, артефакт, загруженный в s3, не будет включать зависимости приложения, поскольку он упаковывает ваше приложение в соответствии с определенным файлом шаблона, а не артефактом, который вы создали из sam build.

Вы должны удалить аргумент --template-file для команды sam package. Просто сделайте следующее:

sam build
sam package --s3-bucket <your-bucket> --output-template-file packaged.yaml
sam deploy \
  --template-file packaged.yaml \
  --stack-name sam-app \
  --capabilities CAPABILITY_IAM

Теперь лямбда должна быть создана с зависимостями, определенными в package.json.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...