自訂 Lambda Java 函數的序列化 - AWS Lambda

自訂 Lambda Java 函數的序列化

Lambda Java 受管執行時期支援 JSON 事件的自訂序列化。自訂序列化可以簡化程式碼,並可能提高效能。

何時使用自訂序列化

調用 Lambda 函數時,輸入事件資料需要還原序列化為 Java 物件,函數的輸出需要序列化回可作為函數回應傳回的格式。Lambda Java 受管執行時期提供預設的序列化和還原序列化功能,非常適合處理來自 Amazon API Gateway、Amazon Simple Queue Service (Amazon SQS) 等各種 AWS 服務的事件承載。若要在函數中使用這些服務整合事件,請將 aws-java-lambda-events 相依項新增至您的專案。此 AWS 程式庫包含代表這些服務整合事件的 Java 物件。

您也可以使用自己的物件來代表傳遞至 Lambda 函數的事件 JSON。受管執行時期會嘗試以預設行為將 JSON 序列化至物件的新執行個體。如果預設序列化程式沒有您的使用案例所需的行為,請使用自訂序列化。

例如,假設您的函數處理程式需要 Vehicle 類別作為輸入,且其結構如下:

public class Vehicle { private String vehicleType; private long vehicleId; }

不過,JSON 事件承載如下所示:

{ "vehicle-type": "car", "vehicleID": 123 }

在這種情況下,受管執行時期的預設序列化期望 JSON 屬性名稱與駝峰式 Java 類別屬性名稱 (vehicleTypevehicleId) 相符。由於 JSON 事件中的屬性名稱不是駝峰式 (vehicle-typevehicleID),您必須使用自訂序列化。

實作自訂序列化

使用服務提供者介面載入您選擇的序列化程式,而不是受管執行時期的預設序列化邏輯。您可以使用標準 RequestHandler 介面,將 JSON 事件承載直接序列化至 Java 物件。

在 Lambda Java 函數中使用自訂序列化
  1. 新增 aws-lambda-java-core 程式庫做為相依項。此程式庫包含 CustomPojoSerializer 介面,以及在 Lambda 中使用 Java 的其他介面定義。

  2. 在專案的 src/main/META-INF/services/ 目錄中建立名為 com.amazonaws.services.lambda.runtime.CustomPojoSerializer 的檔案。

  3. 在此檔案中,指定自訂序列化工具實作的完全合格名稱,其必須實作 CustomPojoSerializer 介面。範例:

    com.mycompany.vehicles.CustomLambdaSerialzer
  4. 實作 CustomPojoSerializer 介面以提供您的自訂序列化邏輯。

  5. 在 Lambda 函數中使用標準 RequestHandler 介面。受管執行時期將使用自訂序列化程式。

如需如何使用常用程式庫 (例如 fastJson、Gson、Moshi 和 jackson-jr) 實作自訂序列化的更多範例,請參閱 AWS GitHub 儲存庫中的 custom-serialization 範例。

測試自訂序列化

測試您的函數以確定序列化和還原序列化邏輯如預期般運作。您可以使用 AWS Serverless Application Model 命令列介面 (AWS SAM CLI) 模擬 Lambda 承載的調用。這可協助您在引進自訂序列化程式時,快速測試並重複執行函數。

  1. 使用您想要用來調用函數的 JSON 事件承載建立一個檔案,然後呼叫 AWS SAM CLI。

  2. 執行 sam local invoke 命令以在本機調用您的函數。範例:

    sam local invoke -e src/test/resources/event.json

如需詳細資訊,請參閱 Locally invoke Lambda functions with AWS SAM