无服务器 - 区域、内存大小、超时


我们在上一章中了解了如何使用无服务器部署第一个功能。在本章中,我们将了解可以对该函数执行的一些配置。我们将主要关注区域、内存大小和超时。

地区

默认情况下,使用无服务器部署的所有 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

确保将超时保持在保守值。它不应该太小,以至于您的函数经常超时,也不应该太大,以免您的函数中的错误导致您需要支付巨额费用。