Lambda コンテキストオブジェクトを使用して Java 関数の情報を取得する - AWS Lambda

Lambda コンテキストオブジェクトを使用して Java 関数の情報を取得する

Lambda で関数が実行されると、コンテキストオブジェクトがハンドラーに渡されます。このオブジェクトは、呼び出し、関数、および実行関数に関する情報を示すメソッドおよびプロパティを提供します。

context メソッド
  • getRemainingTimeInMillis() - 実行がタイムアウトするまでの残りのミリ秒数を返します。

  • getFunctionName() - Lambda 関数の名前を返します。

  • getFunctionVersion() - 関数のバージョンを返します。

  • getInvokedFunctionArn() - この関数を呼び出すために使用される Amazon リソースネーム (ARN) を返します。呼び出し元でバージョン番号またはエイリアスが指定されているかどうかを示します。

  • getMemoryLimitInMB() - 関数に割り当てられたメモリの量を返します。

  • getAwsRequestId() - 呼び出しリクエストの ID を返します。

  • getLogGroupName() - 関数のロググループを返します。

  • getLogStreamName() - 関数インスタンスのログストリームを返します。

  • getIdentity() - (モバイルアプリ) リクエストを承認した Amazon Cognito ID に関する情報を返します。

  • getClientContext() - (モバイルアプリ) クライアントアプリケーションから Lambda に提供されるクライアントコンテキストを返します。

  • getLogger() - 関数のロガーオブジェクトを返します。

以下の例では、コンテキストオブジェクトを使用して Lambda ロガーにアクセスする関数を示しています。

Handler.java
package example; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import java.util.Map; // Handler value: example.Handler public class Handler implements RequestHandler<Map<String,String>, Void>{ @Override public Void handleRequest(Map<String,String> event, Context context) { LambdaLogger logger = context.getLogger(); logger.log("EVENT TYPE: " + event.getClass()); return null; } }

関数は、null を返す前に受信イベントのクラスタイプをログに記録します。

例 ログ出力
EVENT TYPE: class java.util.LinkedHashMap

コンテキストオブジェクトのインターフェイスは aws-lambda-java-core ライブラリに含まれています。このインターフェイスを実装して、テスト用のコンテキストクラスを作成できます。以下の例では、ほとんどのプロパティのダミー値を返すコンテキストクラス、およびテスト用のロガーを示しています。

src/test/java/example/TestContext.java
package example; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.CognitoIdentity; import com.amazonaws.services.lambda.runtime.ClientContext; import com.amazonaws.services.lambda.runtime.LambdaLogger; public class TestContext implements Context{ public TestContext() {} public String getAwsRequestId(){ return new String("495b12a8-xmpl-4eca-8168-160484189f99"); } public String getLogGroupName(){ return new String("/aws/lambda/my-function"); } public String getLogStreamName(){ return new String("2020/02/26/[$LATEST]704f8dxmpla04097b9134246b8438f1a"); } public String getFunctionName(){ return new String("my-function"); } public String getFunctionVersion(){ return new String("$LATEST"); } public String getInvokedFunctionArn(){ return new String("arn:aws:lambda:us-east-2:123456789012:function:my-function"); } public CognitoIdentity getIdentity(){ return null; } public ClientContext getClientContext(){ return null; } public int getRemainingTimeInMillis(){ return 300000; } public int getMemoryLimitInMB(){ return 512; } public LambdaLogger getLogger(){ return new TestLogger(); } }

ログ記録の詳細については、「」を参照してくださいJava Lambda 関数のログ記録とモニタリング

サンプルアプリケーションのコンテキスト

このガイドの GitHub リポジトリには、コンテキストオブジェクトの使用方法を示すサンプルアプリケーションが含まれています。各サンプルアプリケーションには、簡易のデプロイとクリーンアップ用のスクリプト、AWS Serverless Application Model (AWS SAM) テンプレート、サポートリソースが含まれています。

Java のサンプル Lambda アプリケーション
  • [java17-examples] — Java レコードを使用して入力イベントデータオブジェクトを表現する方法を示す Java 関数。

  • java-basic - 単位テストと変数ログ記録設定を使用する、最小限の Java 関数のコレクション。

  • java-events - Amazon API Gateway、Amazon SQS、Amazon Kinesis などのさまざまなサービスからのイベントを処理する方法のスケルトンコードを含む Java 関数のコレクション。これらの関数は、最新バージョンの aws-lambda-java-events ライブラリ (3.0.0 以降) を使用します。これらの例では、依存関係としての AWS SDK が不要です。

  • s3-java - Amazon S3 からの通知イベントを処理し、Java Class Library (JCL) を使用して、アップロードされたイメージファイルからサムネイルを作成する Java 関数。

  • custom-serialization – fastJson 、Gson、Moshi、jackson-jr などの一般的なライブラリを使用してカスタムシリアル化を実装する方法例。

  • API Gateway を使用して Lambda 関数を呼び出す - 従業員情報を含む Amazon DynamoDB テーブルをスキャンする Java 関数。次に、Amazon Simple Notification Service を使用して、仕事の記念日を祝うテキストメッセージを従業員に送信します。この例では、API ゲートウェイを使用して関数を呼び出します。