

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 了解 Lambda 程式設計模型
<a name="foundation-progmodel"></a>

Lambda 提供兩種程式設計模型：執行最多 15 分鐘的標準函數，以及執行最多一年的耐久函數。雖然兩者都共用核心概念，但耐用函數為長時間執行且具狀態的工作流程新增了功能。

Lambda 提供的程式設計模型對於所有執行時間通用。程式設計模型會定義程式碼與 Lambda 系統之間的介面。透過在函數組態中定義一個*處理常式*，將函數的進入點告知 Lambda。執行時間會將包含呼叫*事件*和*內容*的物件傳入至處理常式，例如函數名稱和請求 ID。

**對於耐用函數，處理常式也會收到 DurableContext 物件，提供：**
+ 透過 step() 的檢查點功能
+ 透過 wait() 和 waitForCallback() 等待狀態管理
+ 叫用之間的自動狀態持續性

當處理常式完成處理第一個事件時，執行時間就會傳送至另一個。對於耐用函數，處理常式可以暫停步驟之間的執行，而且 Lambda 將在函數恢復時自動儲存和還原狀態。函數的類別會保留在記憶體中，因此可以重複使用在*初始化程式碼*的處理常式方法外宣告的用戶端和變數。為了節省後續事件的處理時間，請建立可重複使用的資源，例如初始化期間的 AWS SDK 用戶端。初始化後，函式的每個執行個體都可以處理數千個請求。

您的函數也可以存取 `/tmp` 目錄中的本機儲存體，此暫時性快取可用於多個調用。如需詳細資訊，請參閱[執行環境](lambda-runtime-environment.md)。

啟用[AWS X-Ray 追蹤](services-xray.md)時，執行時間會記錄初始化和執行的個別子區段。

執行時間會從您的函數擷取記錄輸出，並將其傳送至 Amazon CloudWatch Logs。除了記錄函式的輸出之外，執行階段也會記錄函式叫用開始和結束的項目。這包含有要求 ID、帳單期、初始化持續時間和其他詳細資料的記錄。如果函數拋出錯誤，執行時間會將該錯誤傳回給叫用者。

**注意**  
記錄受 [CloudWatch Logs 配額](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html)限制。日誌資料可能會因節流而遺失，或在某些情況下，因函數的執行個體停止而遺失。

**持久性函數的主要差異：**
+ 狀態會在步驟之間自動保留
+ 函數可以暫停執行而不耗用資源
+ 步驟會在失敗時自動重試
+ 透過檢查點追蹤進度

Lambda 會隨著需求增加執行額外的執行個體，以及隨需求降低停止執行個體，藉以擴展您的函數。此模型會導致應用程式結構的變化，例如：
+ 除非另有說明，否則可能會不按順序或同時處理傳入的請求。
+ 不依賴函數長期存留的執行個體，而是將應用程式的狀態存放在其他服務中。
+ 使用本機儲存和類別層級物件來提高效能，但將部署套裝服務的大小和傳輸至執行環境的資料量降至最低。

如需使用慣用程式設計語言的程式設計模型實作簡介，請參閱以下章節。
+ [使用 Node.js 建置 Lambda 函數](lambda-nodejs.md)
+ [使用 Python 建置 Lambda 函數](lambda-python.md)
+ [使用 Ruby 建置 Lambda 函數](lambda-ruby.md)
+ [使用 Java 建置 Lambda 函數](lambda-java.md)
+ [使用 Go 建置 Lambda 函數](lambda-golang.md)
+ [使用 C\$1 建置 Lambda 函數](lambda-csharp.md)
+ [使用 PowerShell 建置 Lambda 函數](lambda-powershell.md)