【AWS】JavaでDynamoDBを使用してみる

DynamoDBはAWS(Amazon Web Services)が提供するフルマネージドなNoSQLデータベースサービスです

JavaでDynamoDBを使用する場合、AWS SDK for Javaを使用して操作を行います

以下で紹介していきます!


1. 依存の設定

Mavenの場合

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-dynamodb</artifactId>
    <version>1.12.121</version> <!-- 最新のバージョンに置き換えてください -->
</dependency>

Gradleの場合

// 最新のバージョンに置き換えてください
implementation 'com.amazonaws:aws-java-sdk-dynamodb:1.12.121'


2. AWS SDK for Javaの設定

AWSの認証情報を設定し、DynamoDBクライアントを初期化します

import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;

// AWS 認証情報の設定
BasicAWSCredentials awsCreds = new BasicAWSCredentials("your-access-key-id", "your-secret-access-key");

// DynamoDB クライアントの初期化
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
    .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
    .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("dynamodb-endpoint", "region"))
    .build();

※ 「your-access-key-id」, 「your-secret-access-key」には、AWSアクセスキーとシークレットアクセスキーを入力してください
  また、「dynamodb-endpoint」と「region」には、DynamoDBのエンドポイントとリージョンを指定します


3. テーブル作成

import com.amazonaws.services.dynamodbv2.model.*;

CreateTableRequest request = new CreateTableRequest()
    .withTableName("YourTableName")
    .withKeySchema(
        new KeySchemaElement().withAttributeName("partitionKey").withKeyType(KeyType.HASH), // パーティションキー
        new KeySchemaElement().withAttributeName("sortKey").withKeyType(KeyType.RANGE) // ソートキー(オプション)
    )
    .withAttributeDefinitions(
        new AttributeDefinition().withAttributeName("partitionKey").withAttributeType("S"), // パーティションキーの属性タイプ
        new AttributeDefinition().withAttributeName("sortKey").withAttributeType("N") // ソートキーの属性タイプ
    )
    .withProvisionedThroughput(
        new ProvisionedThroughput().withReadCapacityUnits(5L).withWriteCapacityUnits(5L) // プロビジョニングされたスループット
    );

CreateTableResult result = client.createTable(request);

上記例では「YourTableName」という名前のテーブルが作成されます
「partitionKey」は文字列(S)で、パーティションキーとして使用され、「sortKey」は数値(N)で、ソートキーとして使用されます
また、読み取りキャパシティーユニットと書き込みキャパシティーユニットはそれぞれ5に設定されていますが、必要に応じて変更できます

プライマリーキー(Primary Key)

テーブル内の各アイテム(行)を一意に識別するためのキーです
DynamoDBではプライマリーキーは1つまたは2つの属性で構成されます

  • パーティションキーのみを持つ単一の属性の場合、それはハッシュキーと呼ばれます
  • パーティションキーとソートキーの両方を持つ場合、それは複合キーと呼ばれます

パーティションキー(Partition Key)

データを格納するために使用されるハッシュ関数によって生成されるキーです
パーティションキーを指定することで、DynamoDBはデータを分散して保存し、負荷を分散させることができます

ソートキー(Sort Key)

ソートキーはオプションであり、パーティションキーと組み合わせて複合キーを構成します
ソートキーを使用すると、データをパーティション内でソートおよびグループ化することができます

ロビジョニングされたスループット

テーブルの読み取りおよび書き込み操作の能力を制御するパラメータです
読み取りキャパシティーユニット(RCU)と書き込みキャパシティーユニット(WCU)の2つのメトリックで表されます


4. アイテムの追加

DynamoDBにアイテムを追加するには、PutItemRequestオブジェクトを使用します

import com.amazonaws.services.dynamodbv2.document.*;
import com.amazonaws.services.dynamodbv2.document.spec.*;

Table table = new DynamoDB(client).getTable("YourTableName");
Item item = new Item()
    .withPrimaryKey("primaryKey", "item1")
    .withString("attribute1", "value1")
    .withNumber("attribute2", 123);

PutItemOutcome outcome = table.putItem(item);

5. アイテムの取得

DynamoDBからアイテムを取得するには、GetItemRequestオブジェクトを使用します

GetItemRequest getItemRequest = new GetItemRequest()
    .withTableName("YourTableName")
    .withKey(new KeyAttribute("primaryKey", "item1"));

GetItemResult getResult = client.getItem(getItemRequest);
Map<String, AttributeValue> itemAttributes = getResult.getItem();

※ 「YourTableName」には、アイテムを取得するテーブルの名前を指定します


基本的な実装を紹介しました!
他にもいろんな方法やできることがあるので、今後紹介できたらなと思います

是非参考くださいっ

ではっ

是非フォローしてください

最新の情報をお伝えします