AWS Lambda –Javaの関数
この章では、Javaで単純なAWSLambda関数を作成する方法を詳しく理解しましょう。
EclipseでのJARファイルの作成
AWSでラムダ関数を作成する作業に進む前に、Eclipse用のAWSツールキットのサポートが必要です。同じもののインストールに関するガイダンスについては、を参照することができますEnvironment Setup このチュートリアルの章。
インストールが完了したら、ここに記載されている手順に従います-
ステップ1
Eclipse IDEを開き、で新しいプロジェクトを作成します。 AWS Lambda Java Project。理解を深めるために、以下のスクリーンショットをご覧ください-
ステップ2
選択したら Next、以下に示す画面にリダイレクトされます-
ステップ3
これで、入力タイプのデフォルトコードが作成されます Custom。クリックしたらFinish 以下に示すように、プロジェクトが作成されるボタン-
ステップ4
次に、プロジェクトを右クリックしてエクスポートします。選択するJava / JAR からのファイル Export ウィザードをクリックしてクリックします Next。
ステップ5
さて、クリックすると Next、[次へ]をクリックすると表示される宛先フォルダにファイルを保存するように求められます。
ファイルが保存されたら、AWSコンソールに戻り、Java用のAWSLambda関数を作成します。
ステップ6
今、アップロードします .jar を使用して作成したファイル Upload 以下のスクリーンショットに示すボタン-
Javaのハンドラーの詳細
Handler です package name そして class name。次の例を見て、ハンドラーを詳細に理解してください。
例
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler
上記のコードから、ハンドラーは次のようになります。 com.amazonaws.lambda.demo.LambdaFunctionHandler
それでは、変更をテストして出力を確認しましょう-
Javaのコンテキストオブジェクト
AWS Lambda実行との相互作用は、コンテキストを使用して行われます。Java内で使用される以下のメソッドを提供します-
シニア番号 | コンテキストメソッドと説明 |
---|---|
1 | getMemoryLimitInMB() これにより、ラムダ関数の作成時に指定したメモリ制限が与えられます。 |
2 | getFunctionName() これにより、ラムダ関数の名前が付けられます。 |
3 | getFunctionVersion() これにより、実行中のラムダ関数のバージョンが得られます。 |
4 | getInvokedFunctionArn() これにより、関数の呼び出しに使用されるARNが提供されます。 |
5 | getAwsRequestId() これにより、awsリクエストIDが提供されます。このIDはラムダ関数用に作成され、一意です。問題が発生した場合に備えて、IDをawsサポートで使用できます。 |
6 | getLogGroupName() これにより、作成されたawslambda関数にリンクされたawscloudwatchグループ名が与えられます。iamユーザーがcloudwatchloggingのパーミッションを持っていない場合はnullになります。 |
7 | getClientContext() これにより、aws mobilesdkで使用した場合のアプリとデバイスに関する詳細が表示されます。バージョン名とコード、クライアントID、タイトル、アプリパッケージ名などの詳細が表示されます。nullにすることができます。 |
8 | getIdentity() これにより、aws mobilesdkで使用した場合のAmazonCognitoIDに関する詳細が表示されます。nullにすることができます。 |
9 | getRemainingTimeInMillis() これにより、指定されたタイムアウト後に関数が終了したときの残りの実行時間がミリ秒単位で示されます。 |
10 | getLogger() これにより、コンテキストオブジェクトにリンクされたラムダロガーが提供されます。 |
ここで、上記のコードを更新して、上記のいくつかのメソッドの出力を観察してみましょう。理解を深めるために、以下のサンプルコードを確認してください。
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
context.getLogger().log("Input: " + input);
System.out.println("AWS Lambda function name: " + context.getFunctionName());
System.out.println("Memory Allocated: " + context.getMemoryLimitInMB());
System.out.println("Time remaining in milliseconds: " + context.getRemainingTimeInMillis());
System.out.println("Cloudwatch group name " + context.getLogGroupName());
System.out.println("AWS Lambda Request Id " + context.getAwsRequestId());
// TODO: implement your handler
return "Hello from Lambda!";
}
}
上記のコードを実行すると、以下のような出力が見つかります-
コンテキストのログ
ログ出力を表示しているときに、次の出力を確認できます-
Lambda関数に割り当てられたメモリは512MBです。割り当てられる時間は25秒です。上に表示されている残り時間は24961で、ミリ秒単位です。したがって、Lambda関数の実行には39ミリ秒に等しい25000-24961が使用されます。Cloudwatchグループ名とリクエストIDも上記のように表示されることに注意してください。
次のコマンドを使用して、Javaでログを出力していることに注意してください。
System.out.println (“log message”)
CloudWatchでも同じことが利用できます。これを行うには、AWSサービスに移動し、CloudWatchservices をクリックします Logs。
ここで、Lambda関数を選択すると、以下に示すようにログが日付ごとに表示されます-
Javaへのログイン
JavaでLambdaloggerを使用してデータをログに記録することもできます。同じことを示す次の例を観察してください-
例
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
LambdaLogger logger = context.getLogger();
logger.log("Input: " + input);
logger.log("AWS Lambda function name: " + context.getFunctionName()+"\n");
logger.log("Memory Allocated: " + context.getMemoryLimitInMB()+"\n");
logger.log("Time remaining in milliseconds: " + context.getRemainingTimeInMillis()+"\n");
logger.log("Cloudwatch group name " + context.getLogGroupName()+"\n");
logger.log("AWS Lambda Request Id " + context.getAwsRequestId()+"\n");
// TODO: implement your handler
return "Hello from Lambda!";
}
}
上記のコードは、次の出力を提供します-
CloudWatchの出力は次のようになります-
Lambda関数のJavaでのエラー処理
このセクションでは、Java forLambda関数でエラーを処理する方法について説明します。同じことを示す次のコードを観察してください-
package com.amazonaws.lambda.errorhandling;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
throw new RuntimeException("Error from aws lambda");
}
}
エラーの詳細はに表示されることに注意してください json errorMessageでフォーマット Error from AWS Lambda。また、ErrorType そして stackTrace エラーの詳細を示します。
上記のコードの出力と対応するログ出力は、以下のスクリーンショットに示すようになります-