本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
叫用耐用的 Lambda 函數
耐用的 Lambda 函數支援與標準 Lambda 函數相同的調用方法。您可以同步、非同步或透過事件來源映射叫用耐久函數。叫用程序與標準 函數相同,但耐用的 函數為長時間執行和自動狀態管理提供額外的功能。
調用方法
同步叫用:叫用耐久的 函數並等待回應。同步調用受到 Lambda 限制為 15 分鐘 (或更少,取決於設定的函數和執行逾時)。當您需要立即結果或與預期回應APIs 和服務整合時,請使用同步調用。您可以使用等待操作進行有效率的運算,而不會中斷發起人 — 調用會等待整個耐久執行完成。對於等冪性執行啟動,請使用等冪性中所述的執行名稱參數。
aws lambda invoke \ --function-name my-durable-function:1 \ --cli-binary-format raw-in-base64-out \ --payload '{"orderId": "12345"}' \ response.json
非同步調用:將事件排入佇列以進行處理,而無需等待回應。Lambda 會將事件置於佇列中並立即傳回。非同步調用支援長達 1 年的執行持續時間。將非同步叫用用於fire-and-forget的情況,或在背景中可能發生處理時。對於等冪性執行開始,請使用等冪性中所述的執行名稱參數。
aws lambda invoke \ --function-name my-durable-function:1 \ --invocation-type Event \ --cli-binary-format raw-in-base64-out \ --payload '{"orderId": "12345"}' \ response.json
事件來源映射:將 Lambda 設定為在 Amazon SQS、Kinesis 或 DynamoDB 等串流或佇列型服務提供記錄時,自動叫用您的耐久函數。事件來源映射會輪詢事件來源,並使用批次記錄叫用函數。如需搭配耐久函數使用事件來源映射的詳細資訊,包括執行持續時間限制,請參閱搭配持久函數的事件來源映射。
如需每個調用方法的完整詳細資訊,請參閱同步調用和非同步調用。
注意
耐用的函數支援無效字母佇列 (DLQs) 來處理錯誤,但不支援 Lambda 目的地。設定 DLQ 以從失敗的調用中擷取記錄。
合格 ARNs需求
耐用的函數需要合格的識別符才能叫用。您必須使用版本編號、別名或 叫用耐久函數$LATEST。您可以搭配版本/別名尾碼使用完整的合格 ARN 或函數名稱。您無法使用不合格的識別符 (沒有版本或別名尾碼)。
有效的調用:
# Using full ARN with version number arn:aws:lambda:us-east-1:123456789012:function:my-durable-function:1 # Using full ARN with alias arn:aws:lambda:us-east-1:123456789012:function:my-durable-function:prod # Using full ARN with $LATEST arn:aws:lambda:us-east-1:123456789012:function:my-durable-function:$LATEST # Using function name with version number my-durable-function:1 # Using function name with alias my-durable-function:prod
無效的叫用:
# Unqualified ARN (not allowed) arn:aws:lambda:us-east-1:123456789012:function:my-durable-function # Unqualified function name (not allowed) my-durable-function
此要求可確保持久的執行在整個生命週期中保持一致。當持久性執行開始時,它會固定到特定的函數版本。如果您的函數暫停並在數小時或數天後恢復,Lambda 會叫用開始執行的相同版本,以確保整個工作流程的程式碼一致性。
最佳實務
將編號版本或別名用於生產耐久函數,而非 $LATEST。編號版本不可變,並確保確定性重播。或者,別名提供穩定的參考,您可以更新以指向新版本,而無需變更調用程式碼。當您更新別名時,新的執行會使用新版本,而進行中的執行會繼續其原始版本。您可以使用 $LATEST進行原型設計,或縮短開發期間的部署時間,了解如果基礎程式碼在執行期間變更,執行可能無法正確重播 (甚至失敗)。
了解執行生命週期
當您叫用耐久的函數時,Lambda 會建立持久的執行,可以跨越多個函數叫用:
-
初始調用:您的調用請求會建立新的耐久執行。Lambda 會指派唯一的執行 ID 並開始處理。
-
執行和檢查點:當函數執行持久性操作時,開發套件會建立檢查點來追蹤進度。
-
暫停 (如果需要):如果您的函數使用持久的等待,例如
wait或waitForCallback,或自動步驟重試,Lambda 會暫停執行,並在運算時間內停止收費。 -
恢復:當需要繼續時 (包括重試後),Lambda 會再次叫用您的函數。SDK 會重播檢查點日誌,並從執行暫停的位置繼續。
-
完成:當您的函數傳回最終結果或擲出未處理的錯誤時,持久性執行就會完成。
對於同步調用,發起人會等待整個耐久執行完成,包括任何等待操作。如果執行超過呼叫逾時 (15 分鐘或更短),則呼叫會逾時。對於非同步調用,Lambda 會立即傳回 ,且執行會獨立繼續。使用耐久APIs 來追蹤執行狀態並擷取最終結果。
從應用程式碼叫用
使用 AWS SDKs從您的應用程式程式碼叫用耐久的函數。叫用程序與標準函數相同:
鏈結調用
耐用的 函數可以使用 的 invoke操作叫用其他耐用和非耐用的 函數DurableContext。這會建立鏈結叫用,呼叫函數會等待 (暫停) 叫用函數完成:
鏈結調用會在呼叫函數中建立檢查點。如果呼叫函數中斷,它會使用調用函數的結果從檢查點繼續,而無需重新調用函數。
注意
不支援跨帳戶鏈結調用。調用函數必須與呼叫函數位於相同的 AWS 帳戶中。