【问题标题】:Serverless Framework with custom packaging带有自定义打包的无服务器框架
【发布时间】:2017-07-13 22:20:17
【问题描述】:

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

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

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

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

例如,我想压缩 function1 文件夹中的所有内容,但所有内容都应位于 zip 文件的根级别。现在所有生成的文件都在 zip 文件中名为 function1 的文件夹中。

【问题讨论】:

    标签: amazon-web-services aws-lambda serverless-framework


    【解决方案1】:

    包装不能以这种方式工作 (docs)。您不能指定将保存在 zip 中的文件树。您只能指定您将在此 zip 中包含排除的内容。

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

    为什么要将文件夹“function1”的内容移动到根目录?也许您真正的问题是:“我如何引用位于另一个文件夹中的 Lambda 函数?”。如果是这种情况,您可以在 serverless.yml 文件中使用以下内容:

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

    语法是folder/filename.function

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

    【讨论】:

    • 我想如果是nodejs函数就好了,但是python函数呢?我发现的解决方案更像是一个 hack,而不是官方的解决方案。 forum.serverless.com/t/aws-python-function-dependencies-load/…
    • @LingxiaoXia,在你的链接中,el0ck 说你不需要手动压缩包。推荐的方法是安装 64 位库(因为它将在 64 位机器上运行)并修改 Python 函数的 os.path。
    • 是的,我认为这是一个 hack,因为它需要更改代码。配置更改没问题,但代码更改似乎不可持续。
    • 好的,您唯一的选择是创建一个构建过程来压缩文件并使用 artifact 属性。目前,无服务器框架无法帮助您选择文件在 zip 中的分发方式。
    猜你喜欢
    • 2021-09-21
    • 2018-09-13
    • 1970-01-01
    • 2016-06-28
    • 2019-05-01
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多