

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

# 使用 Java 建置 Lambda 函數
<a name="lambda-java"></a>

您可以在 AWS Lambda中執行 Java 程式碼。Lambda 提供用於執行程式碼來處理事件的 Java [執行期](lambda-runtimes.md)。您的程式碼會在 Amazon Linux 環境中執行，其中包含您管理之 AWS Identity and Access Management (IAM) 角色的 AWS 登入資料。

Lambda 支援以下 Java 執行期。<a name="java-runtimes"></a>


| 名稱 | 識別符 | 作業系統 | 取代日期 | 封鎖函數建立 | 封鎖函數更新 | 
| --- | --- | --- | --- | --- | --- | 
| Java 25 | `java25` | Amazon Linux 2023 |  2029 年 6 月 30 日  |  2029 年 7 月 31 日  |  2029 年 8 月 31 日  | 
| Java 21 | `java21` | Amazon Linux 2023 |  2029 年 6 月 30 日  |  2029 年 7 月 31 日  |  2029 年 8 月 31 日  | 
| Java 17 | `java17` | Amazon Linux 2 |  2027 年 6 月 30 日  |  2027 年 7 月 31 日  |  2027 年 8 月 31 日  | 
| Java 11 | `java11` | Amazon Linux 2 |  2027 年 6 月 30 日  |  2027 年 7 月 31 日  |  2027 年 8 月 31 日  | 
| Java 8 | `java8.al2` | Amazon Linux 2 |  2027 年 6 月 30 日  |  2027 年 7 月 31 日  |  2027 年 8 月 31 日  | 

AWS 為 Java 函數提供下列程式庫。這些程式庫可透過 [Maven Central Repository](https://search.maven.org/search?q=g:com.amazonaws) 取得。
+ [com.amazonaws:aws-lambda-java-core](https://github.com/aws/aws-lambda-java-libs/tree/master/aws-lambda-java-core) (必要) - 定義處理常式方法介面，以及執行期傳遞給處理常式的內容物件。如果您定義自己的輸入類型，這是您需要的唯一程式庫。
+ [com.amazonaws:aws-lambda-java-events](https://github.com/aws/aws-lambda-java-libs/tree/master/aws-lambda-java-events) - 來自調用 Lambda 函數的服務的輸入事件類型。
+ [com.amazonaws:aws-lambda-java-log4j2](https://github.com/aws/aws-lambda-java-libs/tree/master/aws-lambda-java-log4j2) - 一個 Apache Log4j 2 的附加程式庫，您可以使用它將當前調用的請求 ID 新增至[函數日誌](java-logging.md)。
+ [AWS 適用於 Java 的 SDK 2.0](https://github.com/aws/aws-sdk-java-v2) – 適用於 Java 程式設計語言的官方 AWS SDK。
+ [AWS 適用於 Java 的 Lambda 耐久執行開發套件](https://github.com/aws/aws-durable-execution-sdk-java) – 建置可靠的多步驟應用程式和 AI 工作流程，以檢查點進度、自動從失敗中復原，以及暫停執行。如需詳細資訊，請參閱 [Lambda 耐用函數](durable-functions.md)。

請將這些程式庫新增至建置定義中，如下所示：

------
#### [ Gradle ]

```
dependencies {
    implementation 'com.amazonaws:aws-lambda-java-core:1.2.2'
    implementation 'com.amazonaws:aws-lambda-java-events:3.11.1'
    runtimeOnly 'com.amazonaws:aws-lambda-java-log4j2:1.5.1'
    implementation 'software.amazon.lambda.durable:aws-durable-execution-sdk-java:1.0.1'
}
```

------
#### [ Maven ]

```
  <dependencies>
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-lambda-java-core</artifactId>
      <version>1.2.2</version>
    </dependency>
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-lambda-java-events</artifactId>
      <version>3.11.1</version>
    </dependency>
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-lambda-java-log4j2</artifactId>
      <version>1.5.1</version>
    </dependency>
    <dependency>
      <groupId>software.amazon.lambda.durable</groupId>
      <artifactId>aws-durable-execution-sdk-java</artifactId>
      <version>1.0.1</version>
    </dependency>
  </dependencies>
```

------

**重要**  
請勿使用 JDK API 的私有元件，如私有欄位、方法或類別。非公有 API 元件可能在任何更新中發生變更或被移除，導致您的應用程式中斷。

**若要建立 Lambda 函數**

1. 開啟 [Lambda 主控台](https://console.aws.amazon.com/lambda)。

1. 選擇**建立函數**。

1. 進行下列設定：
   + **函數名稱**：輸入函數名稱。
   + **執行時間**：選擇 **Java 25**。

1. 選擇**建立函數**。

主控台將建立一個 Lambda 函數，它具有名為 `Hello` 的處理常式類別。由於 Java 是一種編譯語言，因此您無法在 Lambda 主控台中檢視或編輯原始碼，但可以修改其組態，加以調用，並設定觸發條件。

**注意**  
若要開始在您的本機環境中開發應用程式，請部署本指南 GitHub 儲存庫中可用的其中一個[範例應用程式](java-samples.md)。

`Hello` 類別有一個名為 `handleRequest` 的函式，其接受事件物件與內容物件。這就是在調用函數時，Lambda 呼叫的[處理常式函數](java-handler.md)。Java 函數執行期會從 Lambda 取得調用事件並其傳遞至處理常式。在函式組態中，處理常式值為 `example.Hello::handleRequest`。

若要更新函數的程式碼，您可建立部署套件，這是包含函數程式碼的 ZIP 封存檔。隨著函式開發的進展，您需要將函式程式碼存放於原始碼控制系統、加入程式庫並進行自動化部署。首先，透過命令列[建立部署套件](java-package.md)並更新您的程式碼。

除了傳遞調用事件外，函式執行期還會傳遞內容物件至處理常式。[內容物件](java-context.md)包含了有關調用、函式以及執行環境的額外資訊。更多詳細資訊將另由環境變數提供。

Lambda 函數隨附有 CloudWatch Logs 記錄群組。函數執行期會將每次調用的詳細資訊傳送至 CloudWatch Logs。它在調用期間會轉送[您的函數輸出的任何記錄](java-logging.md)。如果您的函數傳回錯誤，Lambda 會對該錯誤進行格式化之後傳回給調用端。

**Topics**
+ [在 Java 中定義 Lambda 函數處理常式](java-handler.md)
+ [使用 .zip 或 JAR 封存檔部署 Java Lambda 函數](java-package.md)
+ [使用容器映像部署 Java Lambda 函數](java-image.md)
+ [使用 Java Lambda 函數的層](java-layers.md)
+ [自訂 Lambda Java 函數的序列化](java-custom-serialization.md)
+ [自訂 Lambda 函數的 Java 執行時期啟動行為](java-customization.md)
+ [使用 Lambda 內容物件擷取 Java 函數資訊](java-context.md)
+ [記錄和監控 Java Lambda 函數](java-logging.md)
+ [在 中檢測 Java 程式碼 AWS Lambda](java-tracing.md)
+ [的 Java 範例應用程式 AWS Lambda](java-samples.md)