[英]How to include static files on Serverless Framework?
我正在使用無服務器框架創建一個 NodeJS 服務來驗證提要,因此我向該服務添加了一個模式文件 (.json),但我無法使其工作。 它似乎不包含在包裝中。 Lambda 沒有找到該文件。
首先,我只運行 sls 包並檢查 zip 內容,但該文件不存在。 我還嘗試將文件包含在:
package:
include:
- libs/schemas/schema.json
但仍然無法正常工作。
如何確保靜態文件包含在包中並且可以在 lambda 函數中讀取?
這取決於您實際嘗試加載文件的方式。
您是使用fs.readFile
還是fs.readFileSync
加載它? 在這種情況下,Serverless 不知道您將需要它。 如果您為無服務器添加提示以將該文件包含在包中,請確保您知道它相對於當前工作目錄或__dirname
的位置。
你用require()
加載它嗎? (你知道你可以使用require()
來加載 JSON 文件嗎?)在這種情況下,Serverless 應該知道你需要它,但你仍然需要確保你得到了正確的路徑。
如果一切都失敗了,那么你總是可以使用骯臟的黑客。 例如,如果您有一個文件“x.json”,其中包含:
{
"a": 1,
"b": 2
}
然后您可以將其更改為包含以下內容的x.js
文件:
module.exports = {
"a": 1,
"b": 2
};
您可以像任何其他 .js 文件一樣加載,但這是一個 hack。
根據我的發現,您可以通過多種方式做到這一點:
正如另一個答案中所述:如果您使用的是 webpack,則需要使用 webpack 插件將文件包含在 lambda zip 文件中
如果你不使用 webpack,你可以使用serverless package commnad (include/exclude) 。
您可以創建一個層並從 lambda 引用它(該文件將在/opt/<layer_name>
中。考慮到今天(11 月 20 日)如果您使用serverless.ts
,我還沒有找到這樣做的方法無需先發布圖層( lambda 的圖層屬性是 ARN 字符串,需要圖層版本)。
如果您擔心安全性,您可以使用本答案中所述的 AWS Secrets 。
您可以按照@rsp 所說的去做並將其包含在您的代碼中。
對於那些在 2022 年努力尋找解決方案的人:使用 package.patterns 參數。 例子:
package:
patterns:
- libs/schemas/schema.json
- !libs/schemas/schema-prod.json
( !
前面的文件路徑不包括指定的模式)
文檔: https ://www.serverless.com/framework/docs/providers/aws/guide/packaging
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.