Java の AWS Lambda context オブジェクト - AWS Lambda

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Java の AWS Lambda context オブジェクト

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.RequestHandler import com.amazonaws.services.lambda.runtime.LambdaLogger ... // Handler value: example.Handler public class Handler implements RequestHandler<Map<String,String>, String>{ Gson gson = new GsonBuilder().setPrettyPrinting().create(); @Override public String handleRequest(Map<String,String> event, Context context) { LambdaLogger logger = context.getLogger(); String response = new String("200 OK"); // log execution details logger.log("ENVIRONMENT VARIABLES: " + gson.toJson(System.getenv())); logger.log("CONTEXT: " + gson.toJson(context)); // process event logger.log("EVENT: " + gson.toJson(event)); logger.log("EVENT TYPE: " + event.getClass().toString()); return response; } }

この関数は、コンテキストオブジェクトを JSON にシリアル化し、ログストリームに記録します。

例 ログ出力
START RequestId: 6bc28136-xmpl-4365-b021-0ce6b2e64ab0 Version: $LATEST ... CONTEXT: { "memoryLimit": 512, "awsRequestId": "6bc28136-xmpl-4365-b021-0ce6b2e64ab0", "functionName": "java-console", ... } ... END RequestId: 6bc28136-xmpl-4365-b021-0ce6b2e64ab0 REPORT RequestId: 6bc28136-xmpl-4365-b021-0ce6b2e64ab0 Duration: 198.50 ms Billed Duration: 200 ms Memory Size: 512 MB Max Memory Used: 90 MB Init Duration: 524.75 ms

コンテキストオブジェクトのインターフェイスは 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 LambdaLogger getLogger(){ return new TestLogger(); } }

ログ記録の詳細については、「」を参照してくださいJava の AWS 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 関数。

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

すべてのサンプルアプリケーションには、単体テスト用のテストコンテキストクラスがあります。java-basic アプリケーションは、コンテキストオブジェクトを使用してロガーを取得する方法を示しています。また、SLF4J と Log4J 2 を使用して、ローカルの単体テストで機能するロガーを提供しています。