- AWS Lambda 教程
- AWS Lambda - 首頁
- AWS Lambda - 概述
- AWS Lambda - 環境設定
- AWS Lambda - 簡介
- 構建 Lambda 函式
- NODEJS 函式
- Java 函式
- Python 函式
- Go 函式
- C# 函式
- 配置 Lambda 函式
- 使用 AWS 控制檯建立和部署
- 使用 AWS CLI 建立和部署
- 使用 Serverless Framework 建立和部署
- AWS 執行和呼叫 Lambda 函式
- 刪除 Lambda 函式
- 使用 Amazon API Gateway
- Lambda 函式與 Amazon S3
- Lambda 函式與 Amazon DynamoDB
- Lambda 函式與計劃事件
- Lambda 函式與 Amazon SNS
- Lambda 函式與 CloudTrail
- Lambda 函式與 Amazon Kinesis
- Lambda 函式與自定義使用者應用程式
- AWS Lambda@Edge 與 CloudFront
- 使用 Cloudwatch 監控和故障排除
- AWS Lambda - 其他示例
- AWS Lambda 有用資源
- AWS Lambda - 快速指南
- AWS Lambda - 有用資源
- AWS Lambda - 討論
AWS Lambda – Java 函式
在本章中,讓我們詳細瞭解如何在 Java 中建立簡單的 AWS Lambda 函式。
在 Eclipse 中建立 JAR 檔案
在開始在 AWS 中建立 Lambda 函式之前,我們需要 Eclipse 的 AWS 工具包支援。有關安裝的任何指導,您可以參考本教程中的**環境設定**章節。
完成安裝後,請按照此處提供的步驟操作:
步驟 1
開啟 Eclipse IDE 並使用**AWS Lambda Java 專案**建立一個新專案。請觀察以下螢幕截圖以更好地理解:
步驟 2
選擇**下一步**後,它會將您重定向到如下所示的螢幕:
步驟 3
現在,為輸入型別**自定義**建立了預設程式碼。單擊**完成**按鈕後,專案將建立如下所示:
步驟 4
現在,右鍵單擊您的專案並匯出它。從**匯出**嚮導中選擇**Java / JAR**檔案,然後單擊**下一步**。
步驟 5
現在,如果您單擊**下一步**,系統會提示您將檔案儲存到目標資料夾中,當您單擊下一步時會要求您儲存。
儲存檔案後,返回 AWS 控制檯併為 Java 建立 AWS Lambda 函式。
步驟 6
現在,使用**上傳**按鈕上傳我們使用建立的**.jar**檔案,如下面的螢幕截圖所示:
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
觀察到,從上面的程式碼中,處理程式將是**com.amazonaws.lambda.demo.LambdaFunctionHandler**
現在,讓我們測試更改並檢視輸出:
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 日誌
檢視日誌輸出時,您可以觀察到以下輸出:
為 Lambda 函式分配的記憶體為 512MB。分配的時間為 25 秒。如上所示,剩餘時間為 24961 毫秒。因此,25000 - 24961 等於 39 毫秒用於 Lambda 函式的執行。請注意,Cloudwatch 組名稱和請求 ID 也如上所示。
請注意,我們使用了以下命令在 Java 中列印日誌:
System.out.println (“log message”)
這在 CloudWatch 中可用。為此,請轉到 AWS 服務,選擇**CloudWatch 服務**,然後單擊**日誌**。
現在,如果您選擇 Lambda 函式,它將按日期顯示日誌,如下所示:
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!";
}
}
上面顯示的程式碼將為您提供以下輸出:
CloudWatch 中的輸出將如下所示:
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**提供了有關錯誤的更多詳細資訊。
上面給出的程式碼的輸出和相應的日誌輸出將如下面的螢幕截圖所示: