前回は、AP型データベースである「Amazon DynamoDB」および「Apache Cassandra」について、分散モデルやデータ配置、リレーショナルデータベースとの機能的な差異を整理しました。今回は、Amazon DynamoDBについてもう少し理解を深めた上で、実際にDynamoDBを構築してみましょう。
Amazon DynamoDBの概要
Amazon DynamoDBは、AWSフルマネージドなAP型NoSQLデータベースで、特に項目属性定義が必要ないスキーマレスのテーブル構成をとります。リージョンごとにデータベースが構築されるサービスであり、異なるアベイラビリティゾーンにデータが3カ所レプリケーションされます。結果整合性に関しては、オプションで選択可能です。
読み込み/書き込み | 結果整合性のオプション | 動作 |
---|---|---|
読み込み | 【結果整合性のある読込】 | 2/3以上の読込で結果一致した場合正常応答 |
【強い読込整合性】 | 全てのReadRepairが完了している状態で、結果を応答 | |
書き込み | 【結果整合性のある書込】 | 2/3以上の書込が成功した場合正常応答 |
データを一意に識別するためのプライマリーキー(PrimaryKey)は、パーティションキー(PartitionKey)あるいはソートキー(SortKey)との組み合わせで構成されます。原則、プライマリーキー以外の検索はできませんが、代わりに任意の属性をパーティションキーとするグローバルセカンダリインデックス(GlobalSecondaryIndex:GSI)とパーティションキーと別の属性とを組み合わせて作成するローカルセカンダリインデックス(LocalSecondaryIndex:LSI)が利用できます※。
また、DynamoDBでは、AWSの各種サービスと統合されています。デフォルトでIAMによりきめ細やかにアクセス制御され、実行メトリクスはCloudWatchと連携されますし、AWS Lambdaと統合して、項目レベルの変更が発生した場合に、通知を送信できます。さらに、Amazon Elasticsearchを使ってDB項目のフリーテキスト検索をすることも可能です。
加えて、DynamoDBはクロスリージョンでグローバルテーブルの構築が可能となっています。複数のリージョンで同一のデータを参照/更新できますが、複数のリージョンを跨いで1つのテーブルとなるようにデータノードを配置するのではなく、リージョンごとにレプリケーションを作成するかたちになります。したがって、異なるリージョンでほぼ同時に更新が発生した場合、レプリカテーブルへの反映は数秒程度で反映されますが、最新の書き込みのほうが反映されるため注意が必要です。
※ ローカルセカンダリインデックスはテーブルとインデックスの合計サイズが各パーティションキーごとに20GBまでで制限されます。
Amazon DynamoDBの構築
それでは、DynamoDBを構築してみましょう。AWSコンソールの「DynamoDB」サービスから、「テーブルの作成」ボタンを押下し、以下の要領にのっとって入力します。
- テーブル名:任意のテーブル名を入力
- プライマリーキー:パーティションキー及びオプションでソートキー名を入力
- デフォルトの設定:チェックする
データベースの作成は以上で完了です。合わせてコンソール上からテーブルにデータを追加してみましょう。作成したテーブルを選択し、「項目」タブで「項目の作成」ボタンを押下してください。
パーティションキーやソートキーに加えて「sampleText」という属性名を入力し、「保存」ボタンを押下します。
ユーザー/認証情報の作成
続いて、次回以降で作成するアプリケーションでローカル環境からDynamoDBへアクセスするために必要なユーザーとその認証情報を作成しておきましょう。
「IAM」サービスから「ユーザー」メニューを作成し、「ユーザーの作成」ボタンを押下し、以下の要領にのっとって入力してください。
- ユーザー名:任意の名前を入力
- アクセスの種類:アプリケーションからアクセスするユーザーを作成するため、「プログラムによるアクセス」を選択
次に、アクセス権限を追加します。グループを作成しても良いのですが、ここでは、直接ユーザーにDynamoDBのフルアクセス権限ポリシーをアタッチしましょう。
「既存のポリシーを直接アタッチ」を選択し、「AmazonDynamoDBFullAccess」を選択してください。
タグは特に設定しなくてもかまいません。
確認画面で設定内容を確認した後、「ユーザーの作成」ボタンを押してください。
これでユーザーが作成されました。アクセスキーIDとシークレットアクセスキーが表示されるので、CSV形式でこの認証キーをダウンロードしておいてください。
以上でDynamoDBの作成は完了です。次回はこのテーブルにアクセスするSpringアプリケーションを作成します。
著者紹介
川畑 光平(KAWABATA Kohei) - NTTデータ 課長代理
金融機関システム業務アプリケーション開発・システム基盤担当を経て、現在はソフトウェア開発自動化関連の研究開発・推進に従事。
Red Hat Certified Engineer、Pivotal Certified Spring Professional、AWS Certified Solutions Architect Professional等の資格を持ち、アプリケーション基盤・クラウドなどさまざまな開発プロジェクト支援にも携わる。2019 APN AWS Top Engineers & Ambassadors選出。