无服务器 - 包含/排除
我们已经在“部署函数”一章中看到,要将函数从现有项目部署到 AWS lambda,您需要修改函数以将事件和上下文作为参数,并且需要在项目文件夹,其中定义了函数。然后点击无服务器部署即可完成工作。
通常,特别是当您被要求将某些函数从庞大的现有项目迁移到 AWS Lambda 时,您会面临大小挑战。如果您的项目足够大,您很可能会超出 AWS 对 Lambda 函数施加的大小限制(250 MB,包括应用程序代码及其依赖项)。
一些依赖项(例如 NumPy)本身占用了大量空间。例如,NumPy 大约有 80 MB 大,SciPy 也差不多,等等。在这种情况下,留给应用程序代码的空间非常有限,需要一种从 lambda 部署包中排除不必要文件的方法。幸运的是,无服务器使这变得非常容易。
包含和排除字段
正如您所猜测的,您可以使用“排除”标签指定要从部署构建中排除的文件和文件夹。默认情况下,包含排除部分中未指定的所有文件/文件夹。那么“include”标签有什么用呢?那么,如果您希望一般排除某个文件夹,但只想包含该文件夹中的几个文件或子文件夹,则可以在“include”标记中指定这些文件/子文件夹。这样,该文件夹中的所有其他文件都将被排除,并且仅保留“include”部分中指定的文件。下面的例子将更好地解释这一点。
service: influx-archive-pipeline provider: name: aws runtime: python3.6 stage: prod region: us-east-2 profile: yash-sanghvi timeout: 900 memorySize: 1024 # you can add packaging information here package: include: - src/models/config.py - src/models/lambda_apis/** - src/models/scheduled_lambdas/** exclude: - docs/** - models/** - notebooks/** - references/** - reports/** - src/data/** - src/visualization/** - src/models/** - utils/** functions: user_details_api: handler: src/models/lambda_apis/user_details_api.sync_user_details events: - http: path: details/{user_id} method: get integration: lambda cors: true monitoring_lambda: handler: src/models/scheduled_lambdas/monitoring_lambda.periodic_monitoring events: - schedule: cron(15 16 * * ? *)
正如您可以从上面的 severless.yml 文件中看到的那样,我们排除了包含 serverless.yml 的根文件夹中的大多数文件夹。我们甚至排除了 src/models 文件夹。但是,我们希望在 src/models 中包含 2 个子文件夹和 1 个文件。因此,这些内容已被专门添加到“包含”部分中。请注意,默认情况下将包含不属于排除部分的任何文件/文件夹。
请注意两个 lambda 函数的路径。它们都位于 src/models 中。虽然默认情况下排除 src/models,但这些函数具体位于include部分中提到的子文件夹中。因此他们将毫无问题地执行。如果我添加一个位于 src/data 中的函数,这是不允许的,因为 src/data 的所有内容都已被排除。
请注意,指定/**表示覆盖该文件夹中的所有内容(文件/子文件夹)。因此,如果 docs 文件夹包含 10 个子文件夹和 12 个文件(所有这些都需要排除),则-docs/**可以完成这项工作。我们不需要单独提及每个文件/文件夹。