SAM Node.js hello world应用程序缺少axios模块

时间:2019-01-07 12:25:19

标签: node.js amazon-web-services aws-lambda serverless-application-model

我对Node.js和SAM都是陌生的。

除我正在使用Node.js之外,我正在关注在线here上的AWS快速入门指南。具体来说,我运行了以下命令:

版本:

▶ 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/

但不在Lambda中:

AWS Console

我还看到了this个其他答案,但这没有帮助,因为我认为SAM应该打包所有依赖项。

有人知道哪里出了问题吗?

2 个答案:

答案 0 :(得分:1)

sam build将使用node_modules创建sam-app伪像。但是,当您对sam package执行--template-file template.yaml时,上传到s3的工件将不包含应用程序依赖项,因为它会根据定义的模板文件打包您的应用程序,而不是您从{生成的工件{1}}。

您应该删除sam build命令的--template-file参数。只需执行以下操作:

sam package

现在应使用package.json中定义的依赖项创建Lambda。

答案 1 :(得分:0)

此外,这里的问题是为Node.js生成的文档包含一个错字,该错字指定了我使用的sam package命令,如AWS SAM的this修订版中所示CLI源代码。

我提出了一个拉动请求以对其进行修复here