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

Java の AWS Lambda context オブジェクト

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

context メソッド

  • getRemainingTimeInMillis() – 実行がタイムアウトするまで待機する時間 (ミリ秒) が返ります。

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

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

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

  • 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 サーバーレスアプリケーションモデル (AWS SAM) テンプレート、サポートリソースが含まれています。

Java のサンプル Lambda アプリケーション

  • blank-java – Lambda の Java ライブラリ、ロギング、環境変数、レイヤー、AWS X-Ray トレース、単体テスト、および AWS SDK の使用を示す Java 関数。

  • java-basic – 単体テストと変数ログ記録設定を使用する、最小限の Java 関数。

  • java-events – Amazon API Gateway など、依存関係として AWS SDK を必要としないイベントタイプで、aws-lambda-java-events ライブラリを使用する最小限の Java 関数。

  • java-events-v1sdk – Amazon Simple Storage Service や Amazon DynamoDB、Amazon Kinesis など、依存関係として AWS SDK を必要とするイベントタイプで、aws-lambda-java-events ライブラリを使用する Java 関数。

  • s3-java – Amazon S3 からの通知イベントを処理し、Java Class Library (JCL) によりアップロード済みイメージファイルからサムネイルを作成する、Java 関数。

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