はじめに
今回はDVA対策に勉強していた所Amazon DynamoDBについての理解が浅いと感じたので、書籍やAWS公式からDynamoDBについてのアウトプットとして書いていきます。
## Amazon DynamoDBとは
・フルマネージドなNoSQLデータベース
・ユーザーはリージョンを選択してテーブルを作成し、サーバーの管理もしなくていい
・パーティション(データの保存先)を分散させることで水平スケーリングを可能とするため、多くのリクエストが発生するアプリケーションに非常に適している。
・トランザクションは無理
テーブル
リージョンを選択してテーブル名を入力する。
データを一意として扱うために作成時にプライマリキーを決定しておく必要がありプライマリキーには2つのパターンがある。
キーの種類
パーティションキー(ハッシュキー)
・テーブル作成時に1つの属性を選ぶ
・単独での重複×
ソートキー(レンジキー)
・2つの値の組み合わせによって1つの項目を特定
・ソートキーの設定は任意
プライマリキー
・「パーティションキー」または「パーティションキーとソートキーの複合キー」のこと
・プライマリキーによってデータは一意に識別できるようになる
## 請求モード
DynamoDBのストレージ料金は実際に保存した容量に応じた料金がかかる。テーブルを作成する際に容量を確保する必要はなく、テーブルには無制限にデータを保存できます。
書き込み、読み込みは2つの請求モードから選択する。
オンデマンドキャパシティモード
読み込み回数とサイズ、書き込み回数とサイズに応じて請求が発生し結果整合性での読み込みに対して強い整合性での読み込みは倍のコストが発生する。
プロビジョニングキャパシティモード
読み込みキャパシティユニット(RCU)と書き込みキャパシティユニット(WCU)をプロビジョニング(確保、設定)するモード
1つのWCUでできることは最大1KBの項目を1秒間に1回書き込むことです。1つのRCUでできることは、最大4KBの項目を1秒間に2回結果整合性で読み込むか、1秒間に1回強い整合性で読み込むかになります。
強い整合性の場合は、更新された項目をリアルタイムで読み込む。
セカンダリインデックス
セカンダリインデックスとは名前の通りプライマリキーが1つ目のインデックスなので2つ目以降のインデックスとして使用する。
パーティションキーとソートキーだけでは不十分な場合に設定することができ、それが**グローバルセカンダリインデックス(GSI)とローカルセカンダリインデックス(LSI)**です
グローバルセカンダリインデックス(GSI)
パーティションキーの属性の代わりになり、パーティションキーをまたいだ自由な検索を可能にする
テーブル作成後に作成
ローカルセカンダリインデックス(LSI)
プライマリキーのタイプが、パーティションキーとソートキーの場合のみ設定可能で、別の規則でのインデックスを可能にする。
テーブル作成時に作っておく必要があり、後から追加はできません。
セキュリティについて
IAMによるアクセス制御
・テーブルへのアクセス制御にはIAMポリシーを使う
・テーブルにアクセスする際は、アクセスを許可したIAMポリシーをアタッチしたロールを使う
暗号化
・KMSを使用してデータの暗号化可能
・暗号化設定はRDS同様作成時のみ可能
・暗号化されたテーブルへのアクセスには、KMSへのアクセス許可があるポリシーが必要になる
DVA学習を通して感じたこと
・DynamoDBについてめちゃくちゃ問われる
・LSIやGSIなどについてもよく問われる
・実際にハンズオンを通して一度構築してみたほうがよい