無伺服器 - 區域、記憶體大小、超時
在上一章中,我們學習瞭如何使用無伺服器部署我們的第一個函式。本章我們將探討可以對函式執行的一些配置。我們將主要關注區域、記憶體大小和超時。
區域
預設情況下,使用無伺服器部署的所有 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-秒收費。因此,如果 1GB RAM 上的函式執行需要 10 秒,而 2GB 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,則將考慮預設值 1024。
為某些函式設定自定義記憶體大小
如果希望某些函式的值不同於預設記憶體,則可以在 serverless.yml 的 functions 部分中指定。
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 一樣,超時(以秒為單位)的預設值可以在提供程式中設定,並且可以在 functions 部分中為各個函式指定自定義超時。
如果您沒有指定全域性或自定義超時,則預設值為 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
確保將超時保持在保守的值。它不應太小以至於您的函式頻繁超時,也不應太大以至於函式中的錯誤導致您支付過高的賬單。