メニュー
AWS Lambda
開発者ガイド

Context オブジェクト (Java)

AWS Lambda 実行環境とは、context パラメータを通じてやりとりします。context オブジェクトを使用すると、Lambda 実行環境内で使用できる有益な情報にアクセスすることができます。たとえば、context パラメータを使用して、関数に関連付けられた CloudWatch ログストリームを確認したり、context オブジェクトの clientContext プロパティを使用して、Lambda 関数を呼び出すアプリケーションの詳細について参照したりできます (AWS Mobile SDK を通じて呼び出された場合)。

context オブジェクトのプロパティは次のとおりです。

  • getMemoryLimitInMB(): Lambda 関数に対して設定したメモリ制限 (MB 単位)。

  • getFunctionName(): 実行中の Lambda 関数の名前。

  • getFunctionVersion(): 実行中の Lambda 関数のバージョン。エイリアスを使用して関数を呼び出した場合、getFunctionVersion はエイリアスが指すバージョンになります。

  • getInvokedFunctionArn(): この関数の呼び出しに使用された ARN。関数 ARN またはエイリアス ARN を指定できます。非修飾 ARN は $LATEST バージョンを実行し、エイリアスはそれが指定する関数のバージョンを実行します。

  • getAwsRequestId(): リクエストに関連付けられた AWS リクエスト ID。これは、invoke() を呼び出したクライアントに返される ID です。AWS サポートで、フォローアップの問い合わせにリクエスト ID を使用できます。AWS Lambda が関数を再試行する場合 (たとえば、Kinesis レコードを処理する Lambda 関数が例外をスローする状況)、リクエスト ID は同じままです。

  • getLogStreamName(): CloudWatch は特定の Lambda 関数の実行のストリーム名を記録します。提供された IAM ユーザーに CloudWatch アクションのアクセス権限がない場合、null になることがあります。

  • getLogGroupName(): 呼び出される Lambda 関数と関連付けられた CloudWatch ロググループ名。提供された IAM ユーザーに CloudWatch アクションのアクセス権限がない場合、null になることがあります。

  • getClientContext(): AWS Mobile SDK を通じて呼び出されたクライアントアプリケーションとデバイスに関する情報。null とすることができます。クライアントコンテキストでは、クライアント ID、アプリケーションのタイトル、バージョン名、バージョンコード、アプリケーションのパッケージ名などのクライアント情報が提供されます。

  • getIdentity(): AWS Mobile SDK を通じて呼び出された場合の、Amazon Cognito ID プロバイダーについての情報。null とすることができます。

  • getRemainingTimeInMillis(): 関数が終了するまでの残りの実行時間 (ミリ秒単位)。Lambda 関数を作成するときに、最大の時間制限を設定します。この時間制限に達すると、AWS Lambda は関数の実行を終了します。関数の残り実行時間に関する情報を使用して、タイムアウトに近づいたときの関数の動作を指定できます。

  • getLogger(): Context オブジェクトに関連付けられた Lambda ロガーを返します。詳細については、「ロギング (Java)」を参照してください。

次の Java コードスニペットは、コンテキスト情報の一部を表示するハンドラー関数を示しています。

Copy
public static void handler(InputStream inputStream, OutputStream outputStream, Context context) { ... System.out.println("Function name: " + context.getFunctionName()); System.out.println("Max mem allocated: " + context.getMemoryLimitInMB()); System.out.println("Time remaining in milliseconds: " + context.getRemainingTimeInMillis()); System.out.println("CloudWatch log stream name: " + context.getLogStreamName()); System.out.println("CloudWatch log group name: " + context.getLogGroupName()); }

例: Context オブジェクトの使用 (Java)

次の Java コード例では、Context オブジェクトを使用して、実行中に Lambda 関数のランタイム情報を取得する方法を示します。

Copy
package example; import java.io.InputStream; import java.io.OutputStream; import com.amazonaws.services.lambda.runtime.Context; public class Hello { public static void myHandler(InputStream inputStream, OutputStream outputStream, Context context) { int letter; try { while((letter = inputStream.read()) != -1) { outputStream.write(Character.toUpperCase(letter)); } Thread.sleep(3000); // Intentional delay for testing the getRemainingTimeInMillis() result. } catch (Exception e) { e.printStackTrace(); } // For fun, let us get function info using the context object. System.out.println("Function name: " + context.getFunctionName()); System.out.println("Max mem allocated: " + context.getMemoryLimitInMB()); System.out.println("Time remaining in milliseconds: " + context.getRemainingTimeInMillis()); System.out.println("CloudWatch log stream name: " + context.getLogStreamName()); System.out.println("CloudWatch log group name: " + context.getLogGroupName()); } }

コードをテストするために、以下の操作を行うことができます。

  • 前述のコードを使用して、デプロイパッケージを作成します。

  • デプロイパッケージを AWS Lambda にアップロードして Lambda 関数を作成します。これを行うには、コンソールまたは AWS CLI を使用します。

  • Lambda 関数をテストするには、Lambda コンソールが提供する "Hello World" サンプルイベントを使用します。

    任意の文字列を入力でき、関数は同じ文字列を大文字で返します。さらに、context オブジェクトで提供される有用な関数情報も取得されます。

「使用開始」セクションで説明している手順に従います。詳細については、次を参照してください。 ステップ 2.3: (オプション) Java で Lambda 関数を作成する. 以下の違いに注意してください。

  • デプロイパッケージを作成するときに、aws-lambda-java-core ライブラリの依存関係を忘れないでください。

  • Lambda 関数を作成するときに、ハンドラー値として example.Hello::myHandler (package.class::method) を指定します。