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 提供一個適用於本地單元測試的記錄器。