AWS再入門ブログリレー2022 Amazon DynamoDB編

2022.03.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!AWS事業本部コンサルティング部のたかくに(@takakuni_)です。 当エントリは弊社コンサルティング部による『AWS再入門ブログリレー2022』の38日目のエントリです。 このブログリレーの企画は、普段AWSサービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。 AWSをこれから学ぼう!という方にとっては文字通りの入門記事として、またすでにAWSを活用されている方にとってもAWSサービスの再発見や2022年のサービスアップデートのキャッチアップの場となればと考えておりますので、ぜひ最後までお付合い頂ければ幸いです。 では、さっそくいってみましょう。38日目のテーマは『Amazon DynamoDB』です。

Amazon DynamoDBとは

一言で表すと、「フルマネージドNoSQLデータベースサービス」とです。

フルマネージドな部分とは

DynamoDBが「フルマネージド」なサービスです。

そのため、以下はAWSによって管理・運用されます。

  • ハードウェアのプロビジョニング、設定と構成、レプリケーション
  • ソフトウェアパッチ適用
  • クラスタースケーリング

NoSQLとは

NoSQLは、よく「Not Only SQL」の略称で用いられます。「Not Only SQL」なため、SQL形式以外のデータ保存できます。

つまり、NoSQLはさまざまなデータモデルに対応したデータベースと定義できます。

詳しくは、以下サイトも合わせてご参照ください。

仕組み

テーブル、項目、属性

図解すると以下のイメージです。

テーブルとは

テーブルは、項目を集めたリソースです。その他DBと同様、DynamoDB はデータをテーブルに保存します。

項目とは

SQLの「行」に当たる部分です。

各項目には、必ずプライマリキーが存在します。

プライマリキーは、一意の識別子で、テーブル内の項目を区別するために使用されます。

図の場合、「id」、「LastName」が項目間で重複していないためプライマリキーとして指定可能です。

しかし、「LastName」は項目の追加で重複しやすいため、今回の場合だと、「id」をプライマリキーとして指定することが好ましいです。

テーブルはスキーマレスです。つまり、属性またはデータ型を事前に定義する必要はありません。各項目は、独自の固有の属性(図で言う"Country"属性)を持つことができます。

一部の項目には、ネストされた属性 (アドレス) があります。DynamoDB は深さが最大 32 レベルの入れ子の属性をサポートします。

属性とは

SQLの「列」に当たる部分です。

属性に対する値は、ネスト(入れ子)可能で、深さが最大 32 レベルまでサポートします。

プライマリキー

前述した通り、プライマリキーは、一意の識別子で、テーブル内の項目を区別するために使用されます。

DynamoDBは、2種類の異なるプライマリキーをサポートします。

パーティションキー

1つの属性で構成されたシンプルなプライマリキーです。

パーティションキーは、プライマリキーとして機能する以外にデータを格納するパーティションを分割するためにも使用されます。

複合プライマリキー

パーティションとソートキーを連結して、プライマリキーとして使用するパターンです。

パーティション

可用性

DynamoDBは、3つのAZ(アベイラビリティゾーン)に保存され、単一障害点が存在しない構成となっています。

また、パーティショニングが自動的に行われるためデータ容量不足なども自動で解消されます。

パフォーマンス

整合性モデル

データの書き込み

データの書き込みは、「結果整合性」です。

具体的には、少なくとも2つのAZでの書き込み完了が確認とれた時点でDynamoDBは肯定応答(200 OK)を行います。

そのため後術のデータの読み込み時に「結果整合性読み取り」を使用した場合、参照する格納先AZによっては最新のデータが読み込めない場合があります。

データの読み込み

読み込み方法は、「結果整合性」と「強力な整合性」の2種類があります。

デフォルトでは、「結果整合性」の読み込み方法が採用されます。

強力な整合性読み取りでは、整合性を担保した読み取り方法でデータを読み込めますが、結果整合性に比べレイテンシーが高くなる場合があります。

セキュリティ

データ暗号化

DynamoDBは、保管時のKMS暗号化をサポートしています。

  • AWS 所有のキー:AWSによって管理されている鍵。DynamoDBで所有している。
  • AWS マネージドキー:AWSによって管理されている鍵。KMSで所有している。
  • カスタマーマネージドキー:顧客によって作成、所有、管理される鍵。ユーザーには、キーに対してもアクセス制御を設定できる。

アクセス制御

DynamoDBへのテーブル操作は、原則APIです。

そのため、IAMポリシーを使用してテーブルへのアクセスを制御できます。

以下のポリシーは、「アカウント(123456789012)のBooksデーブルへの読み取りアクセス」を許可します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ReadOnlyAPIActionsOnBooks",
            "Effect": "Allow",
            "Action": [
                "dynamodb:GetItem",
                "dynamodb:BatchGetItem",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:ConditionCheckItem"
            ],
            "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books"
        }
    ]
}

ネットワークセキュリティ

インターネットを経由せずプライベートネットワークから接続する

オンプレミスからは、「AWS Site間 VPN 接続」または、「AWS Direct Connect接続」を経由してアクセスできます。

VPC内からは、ゲートウェイ型のVPCエンドポイントを使用して経由してアクセスできます。

オンプレミスからVGW,VPCエンドポイント経由してアクセスする方法はDynamoDBではサポートされていないため注意が必要です。

モニタリングとロギング

ロギング

DynamoDBは、API経由でテーブルへのアクセスを行います。

そのため、テーブルへのアクセスログは「CloudTrail」に保管されます。

保管されるログは、APIによって「コントロールプレーン」と「データプレーン」の2種類に分類されるため取得したいログには注意が必要です。

AWS CloudTrail を使用して DynamoDB オペレーションをログに記録する

メトリクス

DynamoDBは、CloudWatchにメトリクスを発行します。

また、メトリクスのしきい値に基づいて、読み込み/書き込みスループットを自動的にスケーリングできます。

DynamoDB のメトリクスとディメンション

DynamoDB Auto Scaling によるスループット容量の自動管理

おわりに

以上、『AWS再入門ブログリレー2022』の38日目のエントリ『Amazon DynamoDB』編でした!

DynamoDBをこれから触る方や、資格勉強で概念的な部分を理解したい方などの参考になれば幸いです。

3/29(火)は、丸毛さんの「AWS Glue」の予定です。お楽しみに!!