Serverless 包含/排除
我们已经在"部署函数"一章中看到,要将函数从现有项目部署到 AWS lambda,您需要修改函数以获取
event 和
context 作为参数,您需要在项目文件夹中添加一个 serverless.yml 文件,并定义函数。然后点击
serverless deploy 即可。
非常频繁,特别是如果您被要求将某些功能从广泛的现有项目迁移到 AWS Lambda,您将面临大小挑战。如果您的项目足够大,您很可能会超出 AWS 施加的大小限制Lambda 函数(250 MB,包括应用程序代码及其依赖项)。
还有一些像 NumPy 这样的依赖项本身就占据了很大的空间。例如,NumPy 大约有 80 MB 大,SciPy 也在同一范围内,等等。在这种情况下,您留给应用程序代码的空间非常有限,并且需要一种从 lambda 部署包中排除不必要文件的方法。幸运的是,Serverless让这一切变得很容易。
包括和排除字段
如您所料,您可以使用"排除"标签指定要从部署构建中排除的文件和文件夹。默认情况下包含排除部分中未指定的所有文件/文件夹。那么'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/** 就可以完成这项工作。我们不需要单独提及每个文件/文件夹。