【问题标题】:SAM Node.js hello world app has axios module missingSAM Node.js hello world 应用缺少 axios 模块
【发布时间】:2019-01-07 12:25:19
【问题描述】:

我是 Node.js 和 SAM 的新手。

我正在遵循在线 AWS 快速入门指南 here,但我使用的是 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/

但不是在 Lambda 中:

我看过 this 其他 SO 的回答,但没有帮助,因为我认为 SAM 应该打包它的所有依赖项。

有谁知道怎么回事?

【问题讨论】:

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


    【解决方案1】:

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

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

    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 中定义的依赖项创建 Lambda。

    【讨论】:

    • 这是在某处记录还是 sam build 损坏了?
    • 对不起,我可能没有正确解释。我现在已经更新了我原来的答案。
    【解决方案2】:

    除此之外,这里的问题是生成的 Node.js 文档包含指定我使用的 sam package 命令的错字,这可以在 AWS SAM CLI 源代码的 this 修订版中看到。

    我提出了一个拉取请求来修复它here

    【讨论】:

      猜你喜欢
      • 2023-04-11
      • 2022-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      • 1970-01-01
      • 2020-07-14
      • 2013-12-06
      相关资源
      最近更新 更多