Java 中的 AWS Lambda 內容物件 - AWS Lambda

Java 中的 AWS Lambda 內容物件

當 Lambda 執行您的函數時,它會將內容物件傳遞至處理常式。此物件提供的方法和各項屬性提供了有關調用、函式以及執行環境的資訊。

內容方法
  • getRemainingTimeInMillis() - 傳回執行逾時前剩餘的毫秒數。

  • getFunctionName() – 傳回 Lambda 函數的名稱。

  • getFunctionVersion() - 傳回函數的版本

  • getInvokedFunctionArn() - 傳回用於叫用此函數的 Amazon Resource Name (ARN)。指出叫用者是否指定版本號或別名。

  • getMemoryLimitInMB() - 傳回分配給函數的記憶體數量。

  • getAwsRequestId() - 傳回叫用請求的識別符。

  • getLogGroupName() - 傳回函數的日誌群組。

  • getLogStreamName() - 傳回函數執行個體的記錄串流。

  • getIdentity() - (行動應用程式) 傳回已授權請求的 Amazon Cognito 身分的相關資訊。

  • getClientContext() - (行動應用程式) 傳回用戶端應用程式提供給 Lambda 的用戶端內容。

  • getLogger() - 傳回函數的 Logger 物件

下面的例子顯示使用內容物件存取 Lambda 記錄器的函數。

範例 Handler.java
package example; import com.amazonaws.services.lambda.runtime.Context import com.amazonaws.services.lambda.runtime.RequestHandler import com.amazonaws.services.lambda.runtime.LambdaLogger ... // Handler value: example.Handler public class Handler implements RequestHandler<Map<String,String>, String>{ Gson gson = new GsonBuilder().setPrettyPrinting().create(); @Override public String handleRequest(Map<String,String> event, Context context) { LambdaLogger logger = context.getLogger(); String response = new String("200 OK"); // log execution details logger.log("ENVIRONMENT VARIABLES: " + gson.toJson(System.getenv())); logger.log("CONTEXT: " + gson.toJson(context)); // process event logger.log("EVENT: " + gson.toJson(event)); logger.log("EVENT TYPE: " + event.getClass().toString()); return response; } }

該函數會將內容物件序列化為 JSON 並將其記錄在其日誌串流中。

範例 記錄輸出
START RequestId: 6bc28136-xmpl-4365-b021-0ce6b2e64ab0 Version: $LATEST ... CONTEXT: { "memoryLimit": 512, "awsRequestId": "6bc28136-xmpl-4365-b021-0ce6b2e64ab0", "functionName": "java-console", ... } ... END RequestId: 6bc28136-xmpl-4365-b021-0ce6b2e64ab0 REPORT RequestId: 6bc28136-xmpl-4365-b021-0ce6b2e64ab0 Duration: 198.50 ms Billed Duration: 200 ms Memory Size: 512 MB Max Memory Used: 90 MB Init Duration: 524.75 ms

內容物件的介面可在 aws-lambda-java-core 程式庫中使用。您可以實作此介面來建立測試的內容類別。下面的例子顯示針對大多數屬性和進行中測試記錄器傳回虛擬值的內容類別。

範例 src/test/java/example/TestContext.java
package example; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.CognitoIdentity; import com.amazonaws.services.lambda.runtime.ClientContext; import com.amazonaws.services.lambda.runtime.LambdaLogger public class TestContext implements Context{ public TestContext() {} public String getAwsRequestId(){ return new String("495b12a8-xmpl-4eca-8168-160484189f99"); } public String getLogGroupName(){ return new String("/aws/lambda/my-function"); } ... public LambdaLogger getLogger(){ return new TestLogger(); } }

如需記錄日誌的詳細資訊,請參閱 Java 中的 AWS Lambda 函數記錄

範例應用程式中的內容

本指南的 GitHub 儲存庫包含示範內容物件使用方式的範例應用程式。每個範例應用程式都包含可輕鬆部署和清理的指令碼、AWS Serverless Application Model (AWS SAM) 範本和支援資源。

以 Java 編寫的範例 Lambda 應用程式
  • java17-examples – 一個 Java 函數,示範如何使用 Java 記錄來表示輸入事件資料物件。

  • java-basic - 具有單元測試和變數日誌組態的最小 Java 函數集合。

  • java-events - Java 函數集合,其中包含如何處理來自各種服務 (例如 Amazon API Gateway、Amazon SQS 和 Amazon Kinesis) 事件的骨架程式碼。這些函數使用最新版 aws-lambda-java-events 程式庫 (3.0.0 及更新版)。這些範例不需要 AWS 開發套件做為相依項目。

  • s3-java - 一種 Java 函數,它處理來自 Amazon S3 的通知事件,並使用 Java Class Library (JCL) 以從上傳的映像檔案建立縮圖。

  • 使用 API Gateway 調用 Lambda 函數 - 一個 Java 函數,其可掃描包含員工資訊的 Amazon DynamoDB 資料表。然後,其會使用 Amazon Simple Notification Service 向員工傳送文字訊息,慶祝他們的工作週年紀念日。此範例使用 API Gateway 叫用函數。

所有的範例應用程式都有單元測試的測試內容類別。java-basic 應用程式示範如何使用內容物件以取得記錄器。它會使用 SLF4J 和 Log4J 2 提供一個適用於本地單元測試的記錄器。