如何使 Lambda 函數具有冪等性?

1 分的閱讀內容
0

我想要使 AWS Lambda 函數程式碼具有冪等性,以防止我的應用程式出現不一致性和資料遺失。

簡短描述

在程式設計中,冪等性是指應用程式或元件識別重複的事件,並防止資料重複、不一致或遺失的能力。若要使 AWS Lambda 函數具有冪等性,需要設計函數邏輯,以正確處理重複的事件。

冪等性函數邏輯有助於減少以下問題:

  • 不必要的 API 呼叫
  • 程式碼處理時間
  • 資料不一致
  • 限流
  • 延遲

解決方法

為了使函數具有冪等性,函數的程式碼必須正確驗證輸入事件,並識別是否在之前處理過事件。應用程式功能決定了撰寫程式碼的最佳方式。

請使用下列範例函數邏輯和最佳實務作為指引。

具有冪等性的 Lambda 函數邏輯範例

**注意:**下列範例 Lambda 函數邏輯適用於大多數使用案例。

1.    擷取輸入事件的唯一屬性值。(例如,交易或購買 ID。)

2.    檢查屬性值是否存在於控制資料庫中。(例如,Amazon DynamoDB 資料表。)

3.    根據結果,完成下列步驟:
如果存在唯一值,請結束動作而不產生錯誤。

-或-

如果唯一值不存在,請繼續進行最初設計的動作。

**注意:**將 AWS 服務新增至您的架構可能會產生額外費用。如需詳細資訊,請參閱 Amazon DynamoDB 定價AWS 定價

4.    如果函數工作完成後不存在唯一值,請將記錄包含在控制資料庫中。

5.    完成動作。
**注意:**如果您將 Java 或 Python 執行時期用於函數,請檢閱 AWS Lambda Powertools GitHub 頁面上的 PythonJava 冪等性模組。

Lambda 函數冪等性最佳實務

  • 在開發應用程式之前,請規劃您的冪等性功能。
  • 您的 Lambda 程式碼處理重複的事件時,請確保它結束時不會產生錯誤。
    **注意:**擲出錯誤會導致 Lambda 或另一個叫用函數的服務進一步重試。
  • 變更 Lambda 函數逾時設定,以便正確處理完整的執行時期。
    **注意:**使用個別的服務保留資料和控制重複的事件,可能需要 API 呼叫 HTTPS 端點。API 呼叫 HTTPS 端點可能需要比預設 3 秒更長的執行時期。
  • 盡可能地測試並最佳化您的函數。模擬真實案例和請求率。
    **注意:**測試和最佳化冪等性函數邏輯對於協助預防潛在副作用 (例如逾時、過度延遲或瓶頸) 而言相當重要。
  • 使用易於擴充並提供高輸送量的服務 (如 DynamoDB) 來儲存工作階段資料。

**注意:**進行 API 呼叫 Amazon Elastic Compute Cloud (Amazon EC2) 時,服務會提供參數 clientToken。此參數確保轉換 API 請求只會成功完成其工作流程一次,即使您使用相同的 clientToken 啟動多次重試。


相關資訊

Lambda 程式設計模型

使用主控台建立 Lambda 函數

使用冪等性 API 安全地進行重試

AWS 官方
AWS 官方已更新 2 年前