Java による Lambda 関数の構築 - AWS Lambda

Java による Lambda 関数の構築

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

Lambda は、以下の Java ランタイムをサポートしています。

Java ランタイム
名前 識別子 JDK オペレーティングシステム アーキテクチャ

Java 11

java11

amazon-corretto-11

Amazon Linux 2

x86_64、arm64

Java 8

java8.al2

amazon-corretto-8

Amazon Linux 2

x86_64、arm64

Java 8

java8

amazon-corretto-8

Amazon Linux

x86_64

Lambda には、Java 関数用に以下のライブラリが用意されています。

  • com.amazonaws:aws-lambda-java-core (必須) - ランタイムがハンドラに渡すハンドラメソッドインターフェイスとコンテキストオブジェクトを定義します。独自の入力タイプを定義する場合、これが唯一必要なライブラリです。

  • com.amazonaws:aws-lambda-java-events - Lambda 関数を呼び出すサービスからのイベントの入力タイプ。

  • com.amazonaws:aws-lambda-java-log4j2 - 現在の呼び出しのリクエスト ID を関数ログに追加するために使用できる Apache Log4j 2 のアペンダーライブラリ。

  • AWS SDK for Java 2.0 - Java プログラミング言語用の公式の AWS SDK。

Lambda 関数は実行ロールを使用して、Amazon CloudWatch Logs にログを書き込んだり、他のサービスおよびリソースにアクセスする許可を取得したりします。関数開発用の実行ロールをお持ちでない場合は、作成してください。

実行ロールを作成するには

  1. IAM コンソールの [roles page (ロールページ)] を開きます。

  2. [ロールの作成] を選択します。

  3. 次のプロパティでロールを作成します。

    • 信頼されたエンティティLambda

    • アクセス許可AWSLambdaBasicExecutionRole

    • ロール名lambda-role

    AWSLambdaBasicExecutionRole ポリシーには、ログを CloudWatch Logs に書き込むために関数が必要とするアクセス許可があります。

後でロールにアクセス許可を追加するか、1 つの関数に固有の別のロールに差し替えることができます。

Java 関数を作成するには

  1. Lambda コンソールを開きます。

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

  3. 以下の設定を行います。

    • 名前my-function

    • ランタイムJava 11

    • ロール既存のロールを選択します

    • 既存のロールlambda-role

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

  5. テストイベントを設定するには、[テスト] を選択します。

  6. [イベント名] で、「test」と入力します。

  7. [Save changes] (変更の保存) をクリックします。

  8. [Test] (テスト) を選択して関数を呼び出します。

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

注記

ローカル環境でアプリケーション開発を開始するには、このガイドの GitHub リポジトリで利用可能なサンプルアプリケーションの 1 つをデプロイします。

Hello クラスには、イベントオブジェクトおよびコンテキストオブジェクトを取得する handleRequest という名前の関数が含まれています。これは、関数が呼び出されるときに Lambda が呼び出すハンドラー関数です。Java 関数のランタイムは Lambda から呼び出しイベントを取得し、ハンドラに渡します。関数設定で、ハンドラ値は example.Hello::handleRequest です。

関数のコードを更新するには、デプロイパッケージを作成します。このパッケージは、関数コードを含む .zip ファイルアーカイブです。関数の開発が進むにつれて、ソース管理への関数コードの保存、ライブラリの追加、デプロイの自動化を行うことがあります。まず、デプロイパッケージを作成し、コマンドラインでコードを更新します。

関数のランタイムによって、呼び出しイベントに加えて、コンテキストオブジェクトがハンドラに渡されます。コンテキストオブジェクトには、呼び出し、関数、および実行環境に関する追加情報が含まれます。詳細情報は、環境変数から入手できます。

Lambda 関数には CloudWatch Logs ロググループが付属しています。関数のランタイムは、各呼び出しに関する詳細を CloudWatch Logs に送信します。これは呼び出し時に、任意の関数が出力するログを中継します。関数がエラーを返す場合、Lambda はエラー形式を整え、それを呼び出し元に返します。