

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

您可以在 Amazon Lambda 中运行 Java 代码。Lambda 为 Java 提供[运行时](lambda-runtimes.md)，运行您的代码来处理事件。您的代码在 Amazon Linux 环境中运行，该环境包含来自您所管理的 Amazon Identity and Access Management (IAM) 的角色的 Amazon 凭证。

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 日   | 

Amazon 提供以下适用于 Java 函数的库。这些库可通过 [Maven 中央存储库](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 的 Appender 库，可用于将当前调用的请求 ID 添加到[函数日志](java-logging.md)中。
+ [适用于 Java 2.0 的Amazon开发工具包](https://github.com/aws/aws-sdk-java-v2)：适用于 Java 编程语言的官方Amazon开发工具包。

将这些库添加到您的构建定义中，如下所示：

------
#### [ 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'
}
```

------
#### [ 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>
  </dependencies>
```

------

**重要**  
请勿使用 JDK API 的私有组件，例如私有字段、方法或类。非公共 API 组件可能会在任何更新中更改或删除，从而导致您的应用程序中断。

**创建 Java 函数**

1. 打开 [Lambda 控制台](https://console.amazonaws.cn/lambda)。

1. 选择 **Create function**（创建函数）。

1. 配置以下设置：
   + **函数名称**：输入函数名称。
   + **运行时系统**：选择 **Java 25**。

1. 选择**创建函数**。

控制台会创建具有名为 `Hello` 的处理程序类的 Lambda 函数。由于 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)
+ [在 Amazon Lambda 中检测 Java 代码](java-tracing.md)
+ [Amazon Lambda 的 Java 示例应用程序](java-samples.md)