无服务器 – 插件

无服务器 – 插件


随着无服务器越来越流行,对利基用户案例的更多功能的需求会增加,这是很自然的。这些需求由插件来满足。顾名思义,插件是可选的,您只需要安装您需要的插件。在本章中,我们将看到如何访问可用于 serverless 的几个插件,如何安装这些插件,以及如何在 serverless.yml 中引用它们。

浏览插件列表

所有可用于无服务器的插件都可以在www.serverless.com/plugins/上找到

您可以在此处搜索插件。例如,如果您搜索“Python”,您将看到几个专门为 Python 运行时开发的插件。它们是按受欢迎程度排列的。

插件

让我们看看最流行的 Python 插件(在撰写本文时):Python 要求。单击该插件。这将打开与此插件相关的详细文档。

无服务器 Python 要求

本文档涵盖了两个最重要的方面 – 安装插件并在 serverless.yml 中引用它。对于任何插件都是如此。您只需打开其文档即可了解该插件的安装和使用情况。回到 Python 需求插件,文档说明该插件会自动捆绑来自 requirements.txt 的依赖项,并使它们在您的 PYTHONPATH 中可用。

换句话说,如果您的 lambda 函数需要其他依赖项,如 pandas、numpy、matplotlib 等,您只需在 requirements.txt 文件中指定这些依赖项,该文件与 serverless.yml 文件位于同一文件夹中。然后这个插件将完成剩下的工作。您甚至可以在 requirements.txt 中指定库的版本号。例如,这是一个示例 requirements.txt 文件的样子 –

aws-psycopg2==1.2.1
boto
boto3==1.7.62
botocore==1.10.62
numpy==1.14.5
pandas==0.25.0
scipy==1.5.2
sqlalchemy==1.2.15

如您所见,您可以仅提及依赖项名称,也可以添加版本号(以 == 符号分隔)。当然,依赖项以及应用程序代码的大小不应超过 250 MB。因此,您必须仅包含您实际需要的那些依赖项。

现在,让我们回到我们的插件。我们已准备好requirements.txt 文件。下一步是安装插件。打开命令提示符并导航到包含 serverless.yml 文件的项目文件夹。然后,按照文档,运行以下命令来安装插件 –

sls plugin install -n serverless-python-requirements

事实上,如果您将serverless-python-requirements替换为任何其他插件名称,上述命令仍然适用于大多数插件。但是,无论何时安装新插件,都建议按照文档中给出的安装命令进行操作。当您运行上述命令时,您应该会看到类似于下图中的消息 –

SLS 插件安装

如您所见,在项目文件夹中创建了一个 packages.json 文件。如果您的项目文件夹中有一个 packages.json 文件,它将被编辑以包含上述插件。此外,serverless.yml 文件将自动进行编辑以包含已安装的插件。如果您现在打开 serverless.yml 文件,您应该看到添加了以下几行 –

plugins:
   - serverless-python-requirements

这意味着 serverless.yml 中插件的引用是自动完成的。有几个与此插件相关的设置,可以在文档中找到。我们将在下一章中介绍与“交叉编译”相关的设置。但现在,让我们看看使用这个插件的效果。我在我的 requirements.txt 中添加了 numpy。这是我的 handler.py 文件的样子 –

import time
import numpy

def hello(event, context):
   print("second update!")
   time.sleep(4)
   print(numpy.random.randint(100))
   return("hello")

现在让我将它部署到 lambda。您应该会看到类似于下图中的消息。关注包裹的大小。它现在 > 14 MB(这是压缩包的大小)而不是添加插件之前的 ~10 kB,因为 numpy 依赖项也被捆绑在一起。

部署

这证明依赖项现在与应用程序代码捆绑在一起。您可以使用sls invoke local -f function_name 进行本地测试。如果您是 Windows 或 Mac 用户,在 AWS Lambda 控制台上测试部署的 lambda 函数可能会引发错误,类似于下面给出的错误 –

Unable to import module 'handler': 

IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!

Importing the numpy C-extensions failed. This error can happen for
many reasons, often due to issues with your setup or how NumPy was
installed.

We have compiled some common reasons and troubleshooting tips at:

   https://numpy.org/devdocs/user/troubleshooting-importerror.html

Please note and check the following:

  * The Python version is: Python3.8 from "/var/lang/bin/python3.8"
  * The NumPy version is: "1.19.4"

and make sure that they are the versions you expect.
Please carefully study the documentation linked above for further help.

Original error was: No module named 'numpy.core._multiarray_umath'

继续阅读下一章,详细了解发生此错误的原因以及如何处理。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁