具有自定义包装的无服务器框架

Serverless Framework with custom packaging

我正在使用 Serverless Framework,但似乎无法按照我想要的方式打包我的函数。

我当前的文件夹目录如下所示:

service/
  serverless.yml
  function1/
    package.json
    handler.js
    node_modules/
      ...
  function2/
    handler.py
    requirements.txt
    venv/
      ...

是否可以挑选我想要包含在 zip 文件中的文件夹,并在 zip 文件中指定相应的目标路径?

例如,我想将所有内容压缩到 function1 文件夹中,但它们都应该位于 zip 文件的根目录下。现在所有生成的文件都在 zip 文件中名为 function1 的文件夹中。

打包不是这样的 (docs)。您无法指定将保存在 zip 中的文件树。您只能在此 zip 中指定要 includeexclude 的内容。

docs link 中,您可以看到一个使用 Artifact 的选项。在这种情况下,您可以开发自己的代码以完全使用您想要的规则进行压缩,并输出一个 zip 文件以供无服务器框架使用。这是可能的,但我希望你不需要这个。

为什么要将文件夹 "function1" 的内容移动到根级别?也许你真正的问题是:"How can I reference my Lambda function that is located at another folder?"。如果是这种情况,您可以在 serverless.yml 文件中使用以下内容:

service: test

functions:
  func1:
    handler: function1/handler.func1
  func2:
    handler: function1/handler.func2

语法为folder/filename.function.

另一种解决方案是为每个文件夹创建一个 serverless.yml 文件。这种方法的问题是您将无法从 function1 访问 function2。