DynamoDBとJavaを使用するAWS Lambda
1. 前書き
AWS LambdaはAmazon Web Servicesが提供するサーバーレスコンピューティングサービスであり、WS DynamoDBは同じくAmazonが提供するNoSQLデータベースサービスです。
興味深いことに、DynamoDBはドキュメントストアとキーバリューストアの両方をサポートし、AWSによって完全に管理されます。
始める前に、このチュートリアルには有効なAWSアカウントが必要であることに注意してください(1つのhereを作成できます)。 また、最初にAWS Lambda with Javaの記事を読むことをお勧めします。
2. Mavenの依存関係
ラムダを有効にするには、Maven Centralにある次の依存関係が必要です。
com.amazonaws
aws-lambda-java-core
1.1.0
さまざまなAWSリソースを使用するには、次の依存関係が必要です。これは、Maven Centralにもあります。
com.amazonaws
aws-lambda-java-events
1.3.0
そして、アプリケーションを構築するために、Maven Shade Pluginを使用します。
org.apache.maven.plugins
maven-shade-plugin
3.0.0
false
package
shade
3. ラムダコード
ラムダアプリケーションでハンドラーを作成する方法はいくつかあります。
-
MethodHandler
-
RequestHandler
-
RequestStreamHandler
アプリケーションではRequestHandlerインターフェースを使用します。 JSON形式のPersonRequestを受け入れ、応答はJSON形式のPersonResponseになります:
public class PersonRequest {
private String firstName;
private String lastName;
// standard getters and setters
}
public class PersonResponse {
private String message;
// standard getters and setters
}
次は、RequestHandlerインターフェイスを次のように実装するエントリポイントクラスです。
public class SavePersonHandler
implements RequestHandler {
private DynamoDB dynamoDb;
private String DYNAMODB_TABLE_NAME = "Person";
private Regions REGION = Regions.US_WEST_2;
public PersonResponse handleRequest(
PersonRequest personRequest, Context context) {
this.initDynamoDbClient();
persistData(personRequest);
PersonResponse personResponse = new PersonResponse();
personResponse.setMessage("Saved Successfully!!!");
return personResponse;
}
private PutItemOutcome persistData(PersonRequest personRequest)
throws ConditionalCheckFailedException {
return this.dynamoDb.getTable(DYNAMODB_TABLE_NAME)
.putItem(
new PutItemSpec().withItem(new Item()
.withString("firstName", personRequest.getFirstName())
.withString("lastName", personRequest.getLastName());
}
private void initDynamoDbClient() {
AmazonDynamoDBClient client = new AmazonDynamoDBClient();
client.setRegion(Region.getRegion(REGION));
this.dynamoDb = new DynamoDB(client);
}
}
ここで、RequestHandlerインターフェースを実装するときは、要求を実際に処理するためにhandleRequest()を実装する必要があります。 残りのコードについては、次のとおりです。
-
PersonRequestオブジェクト–JSON形式で渡されたリクエスト値が含まれます
-
Contextオブジェクト–ラムダ実行環境から情報を取得するために使用されます
-
ラムダリクエストのレスポンスオブジェクトであるPersonResponse –
DynamoDBオブジェクトを作成するときは、最初にAmazonDynamoDBClientオブジェクトを作成し、それを使用してDynamoDBオブジェクトを作成します。 regionは必須であることに注意してください。
DynamoDBテーブルにアイテムを追加するには、列の数とその値を指定することにより、PutItemSpecオブジェクトを利用します。
DynamoDBテーブルに事前定義されたスキーマは必要ありません。主キーの列名を定義する必要があります。この場合は“id”です。
4. デプロイメントファイルの構築
ラムダアプリケーションをビルドするには、次のMavenコマンドを実行する必要があります。
mvn clean package shade:shade
Lambdaアプリケーションはコンパイルされ、ターゲットフォルダーの下のjarファイルにパッケージ化されます。
5. DynamoDBテーブルの作成
次の手順に従って、DynamoDBテーブルを作成します。
-
AWS Accountにログイン
-
“All Services”の下にある“DynamoDB”をクリックします
-
このページには、すでに作成されているDynamoDBテーブルが表示されます(存在する場合)
-
“Create Table”ボタンをクリックします
-
“Table name”および“Primary Key”にそのデータ型を“Number”として指定します
-
“Create”ボタンをクリックします
-
テーブルが作成されます
6. ラムダ関数の作成
次の手順に従って、Lambda関数を作成します。
-
AWS Accountにログイン
-
“All Services”の下にある“Lambda”をクリックします
-
このページには、すでに作成されているラムダ関数(存在する場合)が表示されるか、ラムダ関数が作成されていない場合は、“Get Started Now”をクリックします。
-
“Select blueprint”→「Blank Function”」を選択
-
“Configure triggers”→“Next”ボタンをクリックします
-
「機能の構成」
-
“Name”:SavePerson
-
“Description”:個人をDDBに保存
-
“Runtime”:“Java 8”を選択します
-
“Upload”:“Upload”ボタンをクリックして、ラムダアプリケーションのjarファイルを選択します
-
-
“Handler”:com.example.lambda.dynamodb.SavePersonHandler
-
“Role”:“Create a custom role”を選択します
-
新しいウィンドウが表示され、ラムダ実行用にIAMロールを構成できるようになります。その中にDynamoDBの許可を追加する必要があります。 完了したら、“Allow”ボタンをクリックします
-
“Next”ボタンをクリックします
-
“Review”:構成を確認します
-
“Create function”ボタンをクリックします
7. ラムダ関数のテスト
次のステップでは、ラムダ関数をテストします。
-
“Test”ボタンをクリックします
-
“Input test event”ウィンドウが表示されます。 ここでは、リクエストのJSON入力を提供します。
{
"id": 1,
"firstName": "John",
"lastName": "Doe",
"age": 30,
"address": "United States"
}
-
“Save and test”または“Save”ボタンをクリックします
-
出力は“Execution result”セクションで見ることができます:
{
"message": "Saved Successfully!!!"
}
-
また、レコードが保持されていることをDynamoDBでチェックする必要があります。
-
“DynamoDB” Management Consoleに移動します
-
テーブル“Person”を選択します
-
“Items”タブを選択します
-
ここでは、ラムダアプリケーションへのリクエストで渡された人の詳細を確認できます
-
-
したがって、リクエストはラムダアプリケーションによって正常に処理されます
8. 結論
この簡単な記事では、DynamoDBとJava 8を使用してLambdaアプリケーションを作成する方法を学びました。 詳細な手順は、すべてをセットアップする上で有利なスタートを切るはずです。
そして、いつものように、サンプルアプリの完全なソースコードはover on Githubにあります。