无服务器 – 区域、内存大小、超时
无服务器 – 区域、内存大小、超时
我们在上一章中看到了如何使用无服务器部署我们的第一个函数。在本章中,我们将查看可以对函数执行的一些配置。我们将主要查看区域、内存大小和超时。
地区
默认情况下,所有使用无服务器部署的 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
如果您没有在提供程序中指定 memorySize,也没有在单个函数中指定 memorySize,则将考虑默认值 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
超时
就像 memorySize 一样,可以在提供程序中设置超时的默认值(以秒为单位),并且可以在函数部分中指定各个函数的自定义超时。
如果您未指定全局或自定义超时,则默认值为 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
确保将超时保持在一个保守的值。它不应该小到你的函数经常超时,也不应该大到你的函数中的一个错误让你付出巨大的代价。