本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 AWS Lambda 函數的最佳做法
以下是使用 AWS Lambda的推薦最佳實務:
函數程式碼
-
請利用執行環境重新使用來改看函式的效能。初始化函數處理常式之外的SDK用戶端和資料庫連線,並在
/tmp
目錄本機快取靜態資產。由您函式的相同執行個體處理的後續叫用可以重複使用這些資源。這可藉由減少函數執行時間來節省成本。若要避免叫用間洩漏潛在資料,請不要使用執行環境來儲存使用者資料、事件,或其他牽涉安全性的資訊。如果您的函式依賴無法存放在處理常式內記憶體中的可變狀態,請考慮為每個使用者建立個別函式或個別函式版本。
-
使用 Keep-Alive 指令維持持續連線的狀態。Lambda 會隨著時間的推移清除閒置連線。叫用函數時嘗試重複使用閒置連線將導致連線錯誤。若要維護持續連線,請使用與執行階段相關聯的 keep-alive (保持啟用) 指令。如需範例,請參閱在 Node.js 中重複使用 Keep-Alive 的連線。
-
使用環境變數將操作參數傳遞給您的函數。例如,如果您正在寫入到 Amazon S3 儲存貯體,而非對您正在寫入的儲存貯體名稱進行硬式編碼,請將儲存貯體名稱設定為環境變數。
-
避免在 Lambda 函數中使用遞迴叫用,函數會自行叫用或啟動可能再次叫用函數的程序。這會導致意外的函式呼叫量與升高的成本。如果您看到非預期的叫用量,請在更新程式碼時
0
立即將保留並行的函數設定為限制函數的所有叫用。 -
請勿在 Lambda 函數程式碼中使用非公開APIs的非公開文件。對於 AWS Lambda 受管執行階段,Lambda 會定期將安全性和功能更新套用至 Lambda 的內部APIs。這些內部API更新可能向後不兼容,導致意外後果,例如,如果您的函數依賴於這些非公共功能,則會導致調用失敗。APIs如需公開可用的清單,請API參閱參考資料APIs。
-
撰寫等冪程式碼。為函數撰寫等冪程式碼可確保採用相同方式來處理重複事件。程式碼應正確驗證事件並正常處理重複的事件。如需詳細資訊,請參閱 How do I make my Lambda function idempotent?
(如何讓 Lambda 函數等冪?)。
如需特定語言的程式碼最佳作法,請參閱下列章節:
函數組態
-
啟動您的 Lambda 函式的效能測試是確保您挑選最佳記憶體大小組態非常重要的一環。任何內存大小的增加都會觸發功能CPU可用的相當增加。函數的記憶體使用量是根據每次叫用來決定的,並且可以在 Amazon CloudWatch 中檢視。每一次呼叫會產生
REPORT:
項目,如下所示:REPORT RequestId: 3604209a-e9a3-11e6-939a-754dd98c7be3 Duration: 12.34 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 18 MB
藉由分析
Max Memory Used:
欄位,您可以判斷您的函式是否需要更多記憶體,或是否過度佈建函式記憶體大小。若要尋找適合您功能的記憶體配置,我們建議您使用開放原始碼 AWS Lambda 電源調整專案。如需詳細資訊,請參閱開啟AWS Lambda 電源調整
GitHub。 若要最佳化函數效能,我們也建議您部署可利用進階向量延伸功能 2 (AVX2) 的程式庫。這可讓您處理嚴苛的工作負載,包括機器學習推論、媒體處理、高效能運算 (HPC)、科學模擬和財務建模。如需詳細資訊,請參閱使用建立更快速的 AWS Lambda 函數AVX2
。 -
對您的 Lambda 函數進行負載測試以判斷最佳的逾時值。分析您的函式執行多久時間是很重要的,如此您更能判斷任何相依服務的問題,這可能會增加超出預期的函式並行。當您的 Lambda 函數對可能無法處理 Lambda 擴展的資源發出網路呼叫時,這尤其重要。
-
設IAM定原則時,請使用限制最嚴格的權限。了解您的 Lambda 函數需要的資源與操作,並限制這些許可的執行角色。如需詳細資訊,請參閱管理權限 AWS Lambda。
-
熟悉 Lambda 配額。承載大小、檔案描述項與 /tmp 空間,是在判斷執行時間資源限制時經常忽略的。
-
刪除您不再使用的 Lambda 函數。透過上述方法,未使用的函式不會對您的部署套件大小限制做不必要的計算。
-
如果您使用 Amazon Simple Queue Service 作為事件來源,請確保函數的預期叫用時間值不會超過佇列上的可見性逾時值。這同時適用於CreateFunction和UpdateFunctionConfiguration。
-
在的情況下 CreateFunction,函數建立程序 AWS Lambda 將會失敗。
-
在的情況下 UpdateFunctionConfiguration,它可能會導致函數的重複調用。
-
功能擴充性
-
熟悉您的上游和下游輸送量限制。雖然 Lambda 函數可隨負載進行無縫擴展,但上游和下游相依性可能不具有相同的輸送量能力。如果您需要限制函數可擴展的高度,則可以在函數上配置保留並發性。
-
內置油門公差。如果您的同步函數因流量超過 Lambda 的擴展速率而遇到節流,您可以使用下列策略來改善節流容忍度:
指標與警示
-
使用檢視 Lambda 函數的指標和 CloudWatch 警示,而不是從 Lambda 函數程式碼中建立或更新指標。這是追蹤 Lambda 函數運作狀態的更有效率方式,可讓您盡快在開發階段找出問題。例如,您可以根據預期的 Lambda 函數叫用持續時間來設定警示,以解決任何由函數程式碼導致的瓶頸或延遲。
-
利用您的日誌庫以及AWS Lambda 指標和維度來 catch 應用程序錯誤(例如 ERR ERRORWARNING,等等)
-
使用 AWS 成本異常偵測來偵測帳戶中的異常活動。成本異常偵測會使用機器學習來持續監控您的成本和使用量,同時盡可能減少誤報警示。「成本異常偵測」會使用來自的資料 AWS Cost Explorer,延遲時間長達 24 小時。因此,使用後最多可能需要 24 小時才能偵測到異常。若要開始使用成本異常偵測,您必須先使用註冊 Cost Explorer。然後,存取成本異常偵測。
使用串流
-
使用不同的批次與記錄大小測試讓每個事件來源的輪詢頻率調整為函式可以多快完成作業。該CreateEventSourceMapping BatchSize 參數控制每次調用可以發送到函數的最大記錄數。更大的批次大小通常會更有效吸收更大集合的記錄的呼叫成本,增加您的傳輸量。
Lambda 預設會在記錄可用時立即叫用函數。如果 Lambda 從事件來源中讀取的批次只有一筆記錄,Lambda 只會傳送一筆記錄至函數。為避免調用具有少量記錄的函數,您可設定批次間隔,請求事件來源緩衝記錄最長達五分鐘。調用函數之前,Lambda 會繼續從事件來源中讀取記錄,直到收集到完整批次、批次間隔到期或者批次達到 6 MB 的承載限制。如需詳細資訊,請參閱批次處理行為。
警告
Lambda 事件來源對應至少處理每個事件一次,並且可能會重複處理記錄。為了避免與重複事件相關的潛在問題,我們強烈建議您將函數代碼設為冪等。若要深入了解,請參閱 AWS 知識中心如何讓 Lambda 函數具有冪等性
。 -
新增碎片以增加 Kinesis 串流處理輸送量。Kinesis 串流由一個或多個碎片組成。Lambda 可從 Kinesis 讀取資料的速率隨碎片數量線性擴展。增加碎片的數量會直接增加最大並行 Lambda 函數叫用的數量,還會增加 Kinesis 串流處理輸送量。如需碎片與函數呼叫之間關係的詳細資訊,請參閱。 輪詢和批次處理串流如果您正在增加 Kinesis 串流中碎片的數量,請確保為您的資料挑選良好的分割區索引鍵 (請參閱分割區索引鍵),如此一來,相關的記錄會位於相同的碎片上,您的資料也會獲得妥善的分配。
-
使用 Amazon CloudWatch on IteratorAge 來判斷您的 Kinesis 串流是否正在處理中。例如,將 CloudWatch 鬧鐘的上限設定為 30000 (30 秒)。
安全最佳實務
-
監視您的使用, AWS Lambda 因為它與安全性最佳做法相關的使用方式使用 AWS Security Hub。Security Hub 會透過安全控制來評估資源組態和安全標準,協助您遵守各種合規架構。如需有關使用 Security Hub 評估 Lambda 資源的詳細資訊,請參閱使用 AWS Security Hub 者指南中的AWS Lambda 控制項。
-
使用 Amazon Lambda 保護監控 GuardDuty Lambda 網路活動日誌 GuardDuty Lambda 保護可協助您識別潛在的安全威脅,當您的 AWS 帳戶. 例如,如果您的其中一個函數查詢與加密貨幣相關活動相關聯的 IP 地址。 GuardDuty 監控叫用 Lambda 函數時產生的網路活動記錄。若要進一步了解,請參閱 Amazon GuardDuty 使用者指南中的 Lambda 保護。