

# Java による Lambda 関数の構築
<a name="lambda-java"></a>

Java コードを AWS Lambda で実行できます。Lambda は、コードを実行してイベントを処理する Java 用の[ランタイム](lambda-runtimes.md)を提供します。コードは、管理している AWS Identity and Access Management (IAM) ロールからの AWS 認証情報を含む Amazon Linux 環境で実行されます。

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) － 現在の呼び出しのリクエスト ID を[関数ログ](java-logging.md)に追加するために使用できる Apache Log4j 2 のアペンダーライブラリ。
+ [AWS SDK for Java 2.0](https://github.com/aws/aws-sdk-java-v2) - Java プログラミング言語用の公式の AWS SDK。
+ [AWS Lambda Durable Execution SDK for Java](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 コンポーネントは更新時に変更または削除され、アプリケーションが動作しなくなる可能性があります。

**Java 関数を作成するには**

1. [Lambda コンソール](https://console.aws.amazon.com/lambda)を開きます。

1. [**Create function**] (関数の作成) をクリックします。

1. 以下の設定を行います。
   + **[関数名]**: 関数名を入力します。
   + **[Runtime]**: **[Java 25]** を選択します。

1. [**関数の作成**] を選択してください。

コンソールは、`Hello` という名前のハンドラクラスを持つ Lambda 関数を作成します。Java はコンパイルされた言語であるため、Lambda コンソールでソースコードを表示または編集することはできませんが、設定の変更、呼び出し、トリガーの設定を行うことができます。

**注記**  
ローカル環境でアプリケーション開発を開始するには、このガイドの GitHub リポジトリで利用可能な[サンプルアプリケーション](java-samples.md)の 1 つをデプロイします。

`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)
+ [AWS Lambda での Java コードの作成](java-tracing.md)
+ [AWS Lambda の Java サンプルアプリケーション](java-samples.md)