1. 序章

AWS Lambda は、Amazon Web Servicesが提供するサーバーレスコンピューティングサービスであり、 WS DynamoDB は、同じくAmazonが提供するNoSQLデータベースサービスです。

興味深いことに、DynamoDBはドキュメントストアとキーバリューストアの両方をサポートしており、AWSによって完全に管理されています。

始める前に、このチュートリアルには有効なAWSアカウントが必要であることに注意してください(ここで作成できます)。 また、最初に AWS Lambda withJavaの記事を読むことをお勧めします。

2. Mavenの依存関係

ラムダを有効にするには、 MavenCentralにある次の依存関係が必要です。

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-lambda-java-core</artifactId>
    <version>1.1.0</version>
</dependency>

さまざまなAWSリソースを使用するには、 MavenCentralにもある次の依存関係が必要です。

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-lambda-java-events</artifactId>
    <version>1.3.0</version>
</dependency>

そして、アプリケーションをビルドするために、MavenShadeプラグインを使用します。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.0.0</version>
    <configuration>
        <createDependencyReducedPom>false</createDependencyReducedPom>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
        </execution>
    </executions>
</plugin>

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<PersonRequest, PersonResponse> {
    
    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オブジェクトを作成します。 リージョンは必須であることに注意してください。

DynamoDBテーブルにアイテムを追加するには、 PutItemSpec オブジェクトを使用します–列の数とその値を指定します。

DynamoDBテーブルに事前定義されたスキーマは必要ありません。主キーの列名を定義する必要があります。この場合は「id」です。

4. デプロイメントファイルの作成

ラムダアプリケーションをビルドするには、次のMavenコマンドを実行する必要があります。

mvn clean package shade:shade

Lambdaアプリケーションはコンパイルされ、ターゲットフォルダーの下のjarファイルにパッケージ化されます。

5. DynamoDBテーブルの作成

次の手順に従って、DynamoDBテーブルを作成します。

  • AWSアカウントにログインします
  • 「すべてのサービス」の下にある「DynamoDB」をクリックします
  • このページには、作成済みのDynamoDBテーブル(存在する場合)が表示されます
  • 「テーブルの作成」ボタンをクリックします
  • 「テーブル名」および「主キー」のデータ型を「番号」として指定します
  • 「作成」ボタンをクリックします
  • テーブルが作成されます

6. ラムダ関数の作成

次の手順に従って、Lambda関数を作成します。

  • AWSアカウントにログインします
  • 「すべてのサービス」の下にある「ラムダ」をクリックします
  • このページには、すでに作成されているラムダ関数(存在する場合)が表示されるか、ラムダ関数が作成されていない場合は、「GetStartedNow」をクリックします。
  • 「青写真の選択」->「空白機能」の選択
  • 「トリガーの構成」->「次へ」ボタンをクリックします
  • 「機能の設定」
    • 「名前」:SavePerson
    • 「説明」:人をDDBに保存
    • 「ランタイム」「Java8」を選択します
    • 「アップロード」「アップロード」ボタンをクリックして、ラムダアプリケーションのjarファイルを選択します
  • 「ハンドラー」:com.baeldung.lambda.dynamodb.SavePersonHandler
  • 「ロール」「カスタムロールの作成」を選択します
  • 新しいウィンドウが表示され、ラムダ実行用のIAMロールを構成できるようになり、DynamoDBグラントを追加する必要があります。 完了したら、「許可」ボタンをクリックします
  • 「次へ」ボタンをクリックします
  • 「レビュー」:構成をレビューします
  • 「関数の作成」ボタンをクリックします

7. ラムダ関数のテスト

次のステップは、ラムダ関数をテストすることです。

  • 「テスト」ボタンをクリックします
  • 「入力テストイベント」ウィンドウが表示されます。 ここでは、リクエストのJSON入力を提供します。
{
  "id": 1,
  "firstName": "John",
  "lastName": "Doe",
  "age": 30,
  "address": "United States"
}
  • 「保存してテスト」または「保存」ボタンをクリックします
  • 出力は、「実行結果」セクションで確認できます。
{
  "message": "Saved Successfully!!!"
}
  • また、DynamoDBでレコードが永続化されていることを確認する必要があります。
    • 「DynamoDB」管理コンソールに移動します
    • テーブル「Person」を選択します
    • 「アイテム」タブを選択します
    • ここでは、ラムダアプリケーションへのリクエストで渡されていた人の詳細を見ることができます
  • したがって、リクエストはラムダアプリケーションによって正常に処理されます

8. 結論

このクイック記事では、DynamoDBとJava8を使用してLambdaアプリケーションを作成する方法を学びました。 詳細な手順は、すべての設定をすぐに開始できるようにする必要があります。

そして、いつものように、サンプルアプリの完全なソースコードはGithubにあります。