node.js - AWS SAM:无法从函数安装,因为它不包含 package.json 文件
问题描述
我在 Visual Studio Code 中使用 AWS SAM 来设置一些 Node.js lambda 函数。我正在使用 Windows 10。我只是从 AWS SAM 开始,我已经使用命令面板生成了示例 Hello World 应用程序,它可以工作。我开始通过添加第二个功能来扩展应用程序,并重新构建目录结构以开始添加更多功能。我的目录结构现在如下所示:
|--my-app
| |--event-handlers
| | |--hello-world
| | | |--app.js
| | |--hello-world-2
| | | |--app.js
| |--package.json
| |--template.yml
当我运行时,sam build
我收到错误Could not install from ..\my-app\event-handlers\hello-world 因为它不包含 package.json 文件。如果我将 package.json 文件复制到每个子目录hello-world和hello-world-2 中,则sam build
可以正常工作。但是我需要为每个函数指定一个单独的 package.json 文件似乎不正确,因为它违反了 DRY 原则。如果我像这样构造它,我期待它应该使用根目录中的 package.json 来处理我的所有 lambda 函数。
我真的需要为每个 lambda 函数复制 package.json 文件吗?就定义多个 lambda 函数的 SAM 应用程序的目录结构而言,最佳实践是什么?为什么它没有从我的根目录中获取我的 package.json 文件?
作为参考,我也包含了我的 template.yaml 文件的一部分
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: event-handlers/hello-world/
Handler: app.lambdaHandler
Runtime: nodejs12.x
Events:
HelloWorld:
Type: Api
Properties:
Path: /hello
Method: get
HelloWorldFunction2:
Type: AWS::Serverless::Function
Properties:
CodeUri: event-handlers/hello-world-2/
Handler: app.lambdaHandler
Runtime: nodejs12.x
Events:
MyScheduledEvent:
Type: Schedule
Properties:
Schedule: rate(2 minutes)
Name: app.lambdaHandler
Description: Interval at which node function should be called
Enabled: True
解决方案
每个 lambda 都部署有自己的依赖堆栈。在我遇到的大多数情况下,这是一件好事。具有完全相同依赖关系的两个 lambda 表示其中一个函数中存在重复的功能或未使用的依赖关系。
我遇到了和你一样的错误,但是因为我在根文件夹中没有。package.json
生成的hello-world
示例项目sam init
在根文件夹中也没有,但不知何故sam build
构建它没有问题。
推荐阅读
- java - Spring Webflux - 基于 TLSv1.2 的 WebClient
- javascript - 使用 NodeJS 服务器时,哪里更适合渲染 HTML?
- python - 在python中浮动的字母数字组合
- webpack - 将自定义尾风配置文件传递给 postcss 加载器
- google-apps-script - 为什么这个 GAS 脚本需要这么长时间才能加载数据验证选项?
- java - 二进制到十进制数组
- ios - 服务器-服务器收据验证与从设备到苹果订阅的在线验证
- discord - 如何发出静音命令?不和谐.py
- javascript - 谷歌地图使搜索标记打开信息窗口
- swift - 如何快速使用现有的领域数据库文件?