DynamoDBのテーブルからItemを取得するLambda(Java)

DynamoDBのテーブルからItemを取得するLambda(Java)

前提

項目
テーブル名 test
パーティションキー pid
ソートキー date

エントリポイント

エントリポイントとなるHello.javaです。

package jp.co.confrage.demo;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;

import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
import software.amazon.awssdk.services.dynamodb.model.GetItemRequest;

public class Hello implements RequestHandler<Map<String, Object>, String> {
  @Override
  public String handleRequest(Map<String, Object> event, Context context) {
    DynamoDbClient ddbClient = null;
    try {
      ddbClient = DynamoDbClient.builder().region(Region.AP_NORTHEAST_1).build();

      HashMap<String, AttributeValue> keyToGet = new HashMap<>();
      keyToGet.put("pid", AttributeValue.builder().s("1").build());
      keyToGet.put("date", AttributeValue.builder().s("20220401").build());

      GetItemRequest request = GetItemRequest.builder().key(keyToGet).tableName("test").build();

      Map<String, AttributeValue> returnedItem = ddbClient.getItem(request).item();
      Set keys = returnedItem.keySet();
      for (String key1 : keys) {
        System.out.format("%s: %s\n", key1, returnedItem.get(key1).toString());
      }
    } catch (Exception e) {
      throw new RuntimeException(e);
    } finally {
      ddbClient.close();
    }
    return "Hello Lambda";
  }
}

build.gradle

build.gradleです。

plugins {
    id 'java'
}

java {
    sourceCompatibility = '17'
    targetCompatibility = '17'
}

repositories {
    mavenCentral()
}

dependencies {
    implementation platform('software.amazon.awssdk:bom:2.20.56')
    implementation 'software.amazon.awssdk:dynamodb'
    implementation 'software.amazon.awssdk:dynamodb-enhanced'

    implementation 'com.amazonaws:aws-lambda-java-core:1.2.1'
    implementation 'com.amazonaws:aws-lambda-java-events:3.11.0'
    implementation 'org.apache.logging.log4j:log4j-api:[2.17.1,)'
    implementation 'org.apache.logging.log4j:log4j-core:[2.17.1,)'
    implementation 'org.apache.logging.log4j:log4j-slf4j18-impl:[2.17.1,)'
    runtimeOnly 'com.amazonaws:aws-lambda-java-log4j2:1.5.1'
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.6.0'
}

tasks.named('test') {
    useJUnitPlatform()
}

task packageZip(type: Zip) {
    into('lib') {
        from(jar)
        from(configurations.runtimeClasspath)
    }
}
build.dependsOn packageZip

zip作成

zip作成します。

gradlew packageZip

デプロイ

Lambda(Java17)にzipをアップロードします。

Lambdaをマネジメントコンソールからテストすると、ログにItemが出力されます。

コメント

タイトルとURLをコピーしました