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

SAM Node.js hello world应用缺少axios模块,node.js,amazon-web-services,aws-lambda,serverless-application-model,Node.js,Amazon Web Services,Aws Lambda,Serverless Application Model,我对Node.js和SAM都是新手 除了使用Node.js之外,我正在遵循AWS在线快速入门指南。具体来说,我运行了以下命令: 版本: ▶ sam --version SAM CLI, version 0.10.0 ▶ node --version v8.15.0 建造: ▶ sam init --runtime nodejs ▶ cd sam-app/ ▶ sam

我对Node.js和SAM都是新手

除了使用Node.js之外,我正在遵循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)"
  ]
}
但不是在Lambda:

我已经看到了其他SO的答案,但它没有帮助,因为我认为SAM应该打包所有依赖项


有人知道怎么回事吗?

sam build
将使用
节点模块创建sam应用程序人工制品。但是,当您使用
--template file template.yaml
执行
sam package
时,上载到s3的人工制品将不包括应用程序依赖项,因为它根据定义的模板文件打包应用程序,而不是根据
sam build
生成的人工制品

您应该删除
sam包
命令的
--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
sam构建
sam包--s3 bucket--输出模板文件packaged.yaml
sam部署\
--模板文件packaged.yaml\
--堆栈名称sam应用程序\
--能力

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

sam build
将使用
node\u模块创建sam应用程序工件。但是,当您使用
--template file template.yaml
执行
sam package
时,上载到s3的人工制品将不包括应用程序依赖项,因为它根据定义的模板文件打包应用程序,而不是根据
sam build
生成的人工制品

您应该删除
sam包
命令的
--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
sam构建
sam包--s3 bucket--输出模板文件packaged.yaml
sam部署\
--模板文件packaged.yaml\
--堆栈名称sam应用程序\
--能力

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

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


我提出了一个pull请求来修复它。

除此之外,这里的问题是Node.js生成的文档包含一个输入错误,指定了我使用的
sam包
命令,如AWS sam CLI源代码修订版所示


我提出了一个请求来修复它。

这是在某处记录的还是sam build已损坏?很抱歉,我可能没有正确解释它。我现在已经更新了我的原始答案。这是记录在案的地方还是sam build被破坏了?很抱歉,我可能没有正确解释它。我现在已经更新了我的原始答案。