В приложении SAM Node.js hello world отсутствует модуль axios
Я новичок в 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/
Но не в лямбде
Я видел этот другой SO-ответ, но он не помогает, потому что я думал, что SAM должен упаковать все свои зависимости.
Кто-нибудь знает что не так?
2 ответа
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.
В дополнение к этому проблема заключается в том, что сгенерированная документация для Node.js содержит опечатку, которая определяет sam package
Команда, которую я использовал, как видно из этой ревизии исходного кода AWS SAM CLI.
Я поднял запрос на удаление, чтобы исправить это здесь.