無伺服器 - 區域、記憶體大小、超時



在上一章中,我們學習瞭如何使用無伺服器部署我們的第一個函式。本章我們將探討可以對函式執行的一些配置。我們將主要關注區域、記憶體大小和超時。

區域

預設情況下,使用無伺服器部署的所有 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

確保將超時保持在保守的值。它不應太小以至於您的函式頻繁超時,也不應太大以至於函式中的錯誤導致您支付過高的賬單。

廣告
© . All rights reserved.