如何在无服务器应用程序中通过 YAML 添加自定义文件夹和文件
How to add a custom folder and file via YAML in Serverless app
我正在使用 SAM 编写无服务器应用程序。我创建了一个配置文件夹来保存一些 table 信息和一些其他信息。然后我将它加载到我的 app.js 中。
当我使用 SAM 部署在本地部署 app.js 时,我发现配置文件夹将不包含。你介意告诉我如何在 .aws-sam\build 文件夹中的最终构建文件夹中添加配置文件夹吗?
我的 Yaml 文件
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: Sample SAM Template for test
Globals:
Function:
Timeout: 120
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: hello-world/
Handler: app.lambdaHandler
Runtime: nodejs10.x
Events:
HelloWorld:
Type: Api
Properties:
Path: /hello
Method: get
另外,当我 运行 项目处于调试模式时,我收到此错误:
{
"errorType": "Runtime.ImportModuleError",
"errorMessage": "Error: Cannot find module '../config/config.js'"
}
我加载的js文件如下:
"use strict";
let response;
const AWS = require('aws-sdk');
const config = require('../config/config.js');
要包含您需要在多个函数中重复使用的自定义文件,例如您案例中的配置文件。然后你可以使用lambda层。
在您的 template.yml 中,您将包含一个图层,如下所示:
ConfigLayer:
Type: "AWS::Serverless::LayerVersion"
Properties:
CompatibleRuntimes:
- nodejs10.x
ContentUri: ./config/
然后将其添加到您的 lambda 函数定义中:
Type: AWS::Serverless::Function
Properties:
Handler: cmd/lambdas/hello-world/app.lambdaHandler
CodeUri: src/
Runtime: nodejs10.x
Layers:
- Ref: ConfigLayer
Events:
CatchAll:
Type: Api
Properties:
Path: /hello-world
Method: GET
config/
目录的内容将在 /opt/
路径中可用。
这意味着 config.js
的完整路径将是 /opt/config.js
,您可以从使用该层的任何 lambda 访问它。
我正在使用 SAM 编写无服务器应用程序。我创建了一个配置文件夹来保存一些 table 信息和一些其他信息。然后我将它加载到我的 app.js 中。
当我使用 SAM 部署在本地部署 app.js 时,我发现配置文件夹将不包含。你介意告诉我如何在 .aws-sam\build 文件夹中的最终构建文件夹中添加配置文件夹吗?
我的 Yaml 文件
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: Sample SAM Template for test
Globals:
Function:
Timeout: 120
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: hello-world/
Handler: app.lambdaHandler
Runtime: nodejs10.x
Events:
HelloWorld:
Type: Api
Properties:
Path: /hello
Method: get
另外,当我 运行 项目处于调试模式时,我收到此错误:
{
"errorType": "Runtime.ImportModuleError",
"errorMessage": "Error: Cannot find module '../config/config.js'"
}
我加载的js文件如下:
"use strict";
let response;
const AWS = require('aws-sdk');
const config = require('../config/config.js');
要包含您需要在多个函数中重复使用的自定义文件,例如您案例中的配置文件。然后你可以使用lambda层。
在您的 template.yml 中,您将包含一个图层,如下所示:
ConfigLayer:
Type: "AWS::Serverless::LayerVersion"
Properties:
CompatibleRuntimes:
- nodejs10.x
ContentUri: ./config/
然后将其添加到您的 lambda 函数定义中:
Type: AWS::Serverless::Function
Properties:
Handler: cmd/lambdas/hello-world/app.lambdaHandler
CodeUri: src/
Runtime: nodejs10.x
Layers:
- Ref: ConfigLayer
Events:
CatchAll:
Type: Api
Properties:
Path: /hello-world
Method: GET
config/
目录的内容将在 /opt/
路径中可用。
这意味着 config.js
的完整路径将是 /opt/config.js
,您可以从使用该层的任何 lambda 访问它。