我在Visual代码中使用AWS来设置许多Node.js lambda函数。我使用的是Windows 10,我只是从AWS SAM开始,我已经使用命令调色板生成了示例Hello应用程序,它可以工作。我开始通过添加第二个函数来扩展应用程序,并重新构造目录结构以开始添加更多的函数。我的目录结构现在看起来如下:
|--my-app
| |--event-handlers
| | |--hello-world
| | | |--app.js
| | |--hello-world-2
| | | |--app.js
| |--package.json
| |--template.yml
运行sam build
时,无法从..\my-app\事件处理程序\hello-world安装错误,因为它不包含package.json文件。如果我将我的package.json文件复制到每个子目录hello-world和hello-world-2中,那么sam build
可以正常工作。但是,我需要为每个函数指定一个单独的package.json文件似乎是不对的,因为它违背了枯燥的原则。我原以为如果我这样构造它的话,它应该使用根目录中的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
发布于 2020-03-25 13:00:11
每个lambda都有自己的依赖堆栈。在我遇到的大多数情况下,这是一件好事。两个具有完全相同依赖项的lambda表示其中一个函数中重复的功能或未使用的依赖项。
我得到的错误与您相同,但因为根文件夹中没有package.json
。用hello-world
生成的sam init
样例项目在根文件夹中也没有一个,但是sam build
构建它没有问题。
发布于 2021-03-07 22:42:42
我也面临着同样的问题。
是什么修正了它正在将package.json向下移动一层,即
简而言之,为了正确构建SAM项目,您应该始终坚持下面的图表
发布于 2021-06-09 07:48:13
在我的例子中,我只需要从我的无服务器函数中删除CodeUri属性。尽管路径看起来是正确的,sam命令在没有上述消息的情况下失败了。
https://stackoverflow.com/questions/60672275
复制