无服务器 - 区域、内存大小、超时
我们在上一章中了解了如何使用无服务器部署第一个功能。在本章中,我们将了解可以对该函数执行的一些配置。我们将主要关注区域、内存大小和超时。
地区
默认情况下,使用无服务器部署的所有 lambda 函数都在 us-east-1 区域中创建。如果您希望在不同区域创建 lambda 函数,您可以在提供程序中指定。
provider: name: aws runtime: python3.6 region: us-east-2 profile: yash-sanghvi
无法在同一 serverless.yml 文件中为不同功能指定不同区域。您应该仅在特定的 serverless.yml 文件中包含属于单个区域的函数。属于单独区域的功能可以使用单独的 serverless.yml 文件进行部署。
内存大小
AWS Lambda 根据所选内存的比例分配 CPU。根据最近宣布的更改,您可以为 lambda 函数选择高达 10GB 的 RAM(之前约为 3GB)。
选择的 RAM 越高,分配的 CPU 就越高,函数执行的速度就越快,执行时间就越短。AWS Lambda 按消耗的 GB 数向您收费。因此,如果一个函数在 1 GB RAM 上执行需要 10 秒,而在 2 GB RAM 上执行需要 5 秒,则两次调用将收取相同的费用。将内存加倍所需的时间是否减半很大程度上取决于函数的性质,并且您可能会也可能不会通过增加内存而受益。关键要点是分配的内存量对于每个 lambda 函数以及您想要控制的函数来说都是一项重要设置。
使用无服务器,可以很容易地为 serverless.yml 文件中定义的函数设置内存大小的默认值。还可以为不同的功能定义不同的内存大小。让我们看看如何。
为所有函数设置默认内存大小
默认值始终在提供程序中提及。该值将由该 serverless.yml 中的所有函数继承。memorySize键用于设置该值。该值以MB表示。
provider: name: aws runtime: python3.6 region: us-east-2 profile: yash-sanghvi memorySize: 512 #will be inherited by all functions
如果您未在提供程序或单个函数中指定内存大小,则将考虑默认值 1024。
为某些功能设置自定义内存大小
如果您希望某些函数具有与默认内存不同的值,则可以在 serverless.yml 的函数部分中指定它。
functions: custom_memory_func: #will override the default memorySize handler: handler.custom_memory memorySize: 2048 default_memory_func: #will inherit the default memorySize from provider handler: handler.default_memory
暂停
就像内存大小一样,可以在提供程序中设置超时的默认值(以秒为单位),并且可以在函数部分中指定各个函数的自定义超时。
如果您未指定全局或自定义超时,则默认值为 6 秒。
provider: name: aws runtime: python3.6 region: us-east-2 profile: yash-sanghvi memorySize: 512 #will be inherited by all functions timeout: 50 #will be inherited by all functions functions: custom_timeout: #will override the default timeout handler: handler.custom_memory timeout: 30 default_timeout_func: #will inherit the default timeout from provider handler: handler.default_memory
确保将超时保持在保守值。它不应该太小,以至于您的函数经常超时,也不应该太大,以免您的函数中的错误导致您需要支付巨额费用。