【发布时间】:2020-06-25 13:50:10
【问题描述】:
我在 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 时,我收到错误无法从 ..\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
【问题讨论】:
-
这似乎是
sam build的一部分。它可以是一个空文件。或者如果你不需要它就避免使用sam build -
我尝试使用空文件,但它需要文件中的 json 格式。所以然后我将它设为空 {} 但随后它开始进行验证并给出错误“NPM 失败:npm ERR!package.json 需要一个“名称”字段”等。这意味着我必须从主要复制“必需”字段将根目录中的 json 文件添加到所有子功能......这让我回到了我原来的问题。复制文件感觉不是正确的方法,而是某种错误配置,即没有为所有子功能选择更高级别的文件。
标签: node.js aws-lambda aws-sam