使用 Lambda 上下文對象檢索 Java 函數信息 - AWS Lambda

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

使用 Lambda 上下文對象檢索 Java 函數信息

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

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

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

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

  • getInvokedFunctionArn()— 傳回用來叫用函數的 Amazon 資源名稱 (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.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import java.util.Map; // Handler value: example.Handler public class Handler implements RequestHandler<Map<String,String>, Void>{ @Override public Void handleRequest(Map<String,String> event, Context context) { LambdaLogger logger = context.getLogger(); logger.log("EVENT TYPE: " + event.getClass()); return null; } }

該函數在返回之前記錄傳入事件的類型null

範例 記錄輸出
EVENT TYPE: class java.util.LinkedHashMap

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

範例 src /測試/爪/例TestContext子
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 String getLogStreamName(){ return new String("2020/02/26/[$LATEST]704f8dxmpla04097b9134246b8438f1a"); } public String getFunctionName(){ return new String("my-function"); } public String getFunctionVersion(){ return new String("$LATEST"); } public String getInvokedFunctionArn(){ return new String("arn:aws:lambda:us-east-2:123456789012:function:my-function"); } public CognitoIdentity getIdentity(){ return null; } public ClientContext getClientContext(){ return null; } public int getRemainingTimeInMillis(){ return 300000; } public int getMemoryLimitInMB(){ return 512; } public LambdaLogger getLogger(){ return new TestLogger(); } }

如需記錄日誌的詳細資訊,請參閱 記錄和監控 Java Lambda 函數

範例應用程式中的內容

本指南的 GitHub 存放庫包含示範如何使用前後關聯物件的範例應用程式。每個範例應用程式都包含可輕鬆部署和清理的指令碼、 AWS Serverless Application Model (AWS SAM) 範本以及支援資源。

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

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

  • java 事件 — Java 函數的集合,其中包含如何處理來自各種服務(例如 Amazon API 網關,Amazon 和亞馬 Amazon Kinesis)的事件的骨架代碼。SQS這些函數使用最新版本的aws-lambda-java-events庫(3.0.0 及更新版本)。這些範例不需要做 AWS SDK為相依性。

  • s3-java — 一種 Java 函數,可處理來自 Amazon S3 的通知事件,並使用 Java 類別程式庫 (JCL) 從上傳的影像檔建立縮圖。

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