我正在使用无服务器框架创建NodeJS服务来验证提要,因此我向服务添加了一个模式文件(.json),但我无法使其工作。 它似乎没有包含在包中。 Lambda找不到该文件。
首先我只是运行sls包并检查zip内容但文件不存在。 我还尝试将文件包含在:
中package:
include:
- libs/schemas/schema.json
但仍无效。
如何确保包中包含静态文件,并且可以在lambda函数中读取?
答案 0 :(得分:3)
这取决于您实际尝试加载文件的方式。
您是使用fs.readFile
还是fs.readFileSync
加载的?
在这种情况下,无服务器并不知道您将需要它。如果您为无服务器添加提示以将该文件包含在捆绑包中,请确保您知道它相对于当前工作目录或__dirname
的位置。
您是否使用require()
加载? (您知道可以使用require()
加载JSON文件吗?)在这种情况下,Serverless应该知道您需要它,但是您仍然需要确保路径正确。
如果所有其他方法都失败了,那么你总是可以使用肮脏的黑客攻击。 例如,如果您有一个文件' x.json'包含:
{
"a": 1,
"b": 2
}
然后您可以将其更改为包含以下内容的x.js
文件:
module.exports = {
"a": 1,
"b": 2
};
你可以像任何其他.js文件一样加载,但它是一个黑客。
答案 1 :(得分:0)
根据我发现的内容,您可以通过多种方式执行此操作:
如另一个答案中所述:if you are using webpack you need to use a webpack plugin to include files in the lambda zip file
如果您不使用webpack,则可以使用serverless package commnad (include/exclude)。
您可以create a layer and reference it from the lambda(文件位于/opt/<layer_name>
中。请考虑到今天(11月20日)I haven't found a way of doing this if you are using serverless.ts
,而无需先发布图层( lambda的图层属性是ARN字符串,并且需要图层版本)。
如果您担心安全you can use AWS Secrets as it is stated in this answer。
您可以执行@rsp所说的内容并将其包含在代码中。