AWS Lambda – Java 函式



在本章中,讓我們詳細瞭解如何在 Java 中建立簡單的 AWS Lambda 函式。

在 Eclipse 中建立 JAR 檔案

在開始在 AWS 中建立 Lambda 函式之前,我們需要 Eclipse 的 AWS 工具包支援。有關安裝的任何指導,您可以參考本教程中的**環境設定**章節。

完成安裝後,請按照此處提供的步驟操作:

步驟 1

開啟 Eclipse IDE 並使用**AWS Lambda Java 專案**建立一個新專案。請觀察以下螢幕截圖以更好地理解:

Select Wizard

步驟 2

選擇**下一步**後,它會將您重定向到如下所示的螢幕:

Lambda Java Project

步驟 3

現在,為輸入型別**自定義**建立了預設程式碼。單擊**完成**按鈕後,專案將建立如下所示:

Custom Type

步驟 4

現在,右鍵單擊您的專案並匯出它。從**匯出**嚮導中選擇**Java / JAR**檔案,然後單擊**下一步**。

Export Wizard

步驟 5

現在,如果您單擊**下一步**,系統會提示您將檔案儲存到目標資料夾中,當您單擊下一步時會要求您儲存。

儲存檔案後,返回 AWS 控制檯併為 Java 建立 AWS Lambda 函式。

AWS Console For Java

步驟 6

現在,使用**上傳**按鈕上傳我們使用建立的**.jar**檔案,如下面的螢幕截圖所示:

Upload Button

Java 的處理程式詳細資訊

**處理程式**是**包名稱**和**類名稱**。檢視以下示例以詳細瞭解處理程式:

示例

package com.amazonaws.lambda.demo;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler {
   @Override
   public String handleRequest(Object input, Context context) {
      context.getLogger().log("Input: " + input);

      // TODO: implement your handler
      return "Hello from Lambda!";
   }
}

觀察到,從上面的程式碼中,處理程式將是**com.amazonaws.lambda.demo.LambdaFunctionHandler**

現在,讓我們測試更改並檢視輸出:

Lambda Function Handler

Lambda Function Handler Output

Java 中的 Context 物件

使用 context 完成與 AWS Lambda 執行的互動。它提供了以下方法在 Java 中使用:

序號 Context 方法和說明
1

getMemoryLimitInMB()

這將提供您在建立 Lambda 函式時指定的記憶體限制。

2

getFunctionName()

這將提供 Lambda 函式的名稱。

3

getFunctionVersion()

這將提供正在執行的 Lambda 函式的版本。

4

getInvokedFunctionArn()

這將提供用於呼叫函式的 ARN。

5

getAwsRequestId()

這將提供 aws 請求 ID。此 ID 為 Lambda 函式建立,並且是唯一的。如果遇到任何問題,可以使用此 ID 與 aws 支援聯絡。

6

getLogGroupName()

這將提供與建立的 aws lambda 函式關聯的 aws cloudwatch 組名稱。如果 iam 使用者沒有 cloudwatch 日誌記錄許可權,則它將為 null。

7

getClientContext()

當與 aws 移動 sdk 一起使用時,這將提供有關應用程式和裝置的詳細資訊。它將提供版本名稱和程式碼、客戶端 ID、標題、應用程式包名稱等詳細資訊。它可能為 null。

8

getIdentity()

當與 aws 移動 sdk 一起使用時,這將提供有關 amazon cognito 身份的詳細資訊。它可能為 null。

9

getRemainingTimeInMillis()

在指定超時後函式終止時,這將提供剩餘的執行時間(以毫秒為單位)。

10

getLogger()

這將提供與 context 物件關聯的 lambda 日誌記錄器。

現在,讓我們更新上面給出的程式碼並觀察上面列出的一些方法的輸出。請觀察以下示例以更好地理解:

package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
   @Override
   public String handleRequest(Object input, Context context) {
      context.getLogger().log("Input: " + input);
      System.out.println("AWS Lambda function name: " + context.getFunctionName());
      System.out.println("Memory Allocated: " + context.getMemoryLimitInMB());
      System.out.println("Time remaining in milliseconds: " + context.getRemainingTimeInMillis());
      System.out.println("Cloudwatch group name " + context.getLogGroupName());
      System.out.println("AWS Lambda Request Id " + context.getAwsRequestId());
      
      // TODO: implement your handler
      return "Hello from Lambda!";
   }
}

執行上面給出的程式碼後,您可以找到如下所示的輸出:

Context Object

Context 日誌

檢視日誌輸出時,您可以觀察到以下輸出:

Logs for Context

為 Lambda 函式分配的記憶體為 512MB。分配的時間為 25 秒。如上所示,剩餘時間為 24961 毫秒。因此,25000 - 24961 等於 39 毫秒用於 Lambda 函式的執行。請注意,Cloudwatch 組名稱和請求 ID 也如上所示。

請注意,我們使用了以下命令在 Java 中列印日誌:

System.out.println (“log message”)

這在 CloudWatch 中可用。為此,請轉到 AWS 服務,選擇**CloudWatch 服務**,然後單擊**日誌**。

現在,如果您選擇 Lambda 函式,它將按日期顯示日誌,如下所示:

Logs Date Wise

Java 中的日誌記錄

您也可以在 Java 中使用 Lambdalogger 來記錄資料。觀察以下顯示相同內容的示例:

示例

package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
   @Override
   public String handleRequest(Object input, Context context) {
      LambdaLogger logger = context.getLogger();
      logger.log("Input: " + input);
      logger.log("AWS Lambda function name: " + context.getFunctionName()+"\n");
      logger.log("Memory Allocated: " + context.getMemoryLimitInMB()+"\n");
      logger.log("Time remaining in milliseconds: " + context.getRemainingTimeInMillis()+"\n");
      logger.log("Cloudwatch group name " + context.getLogGroupName()+"\n");
      logger.log("AWS Lambda Request Id " + context.getAwsRequestId()+"\n");
      
      // TODO: implement your handler
      return "Hello from Lambda!";
   }
}

上面顯示的程式碼將為您提供以下輸出:

Logging Java

CloudWatch 中的輸出將如下所示:

Logging Java Output

Lambda 函式的 Java 錯誤處理

本節將解釋如何在 Java 中處理 Lambda 函式的錯誤。觀察以下顯示相同內容的程式碼:

package com.amazonaws.lambda.errorhandling;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
   @Override
   public String handleRequest(Object input, Context context) {
      throw new RuntimeException("Error from aws lambda");
   } 
}

請注意,錯誤詳細資訊以**json**格式顯示,errorMessage 為**來自 AWS Lambda 的錯誤**。此外,**ErrorType**和**stackTrace**提供了有關錯誤的更多詳細資訊。

上面給出的程式碼的輸出和相應的日誌輸出將如下面的螢幕截圖所示:

Error handling Java

Error handling Output
廣告