助け合いフォーラム

AWS

AWS ソリューションアーキテクト - アソシエイト(SAA-C03)
問題ID : 30554
問題を開く
DynamoDBのテーブルに行われた追加・削除および更新のログを保存しておきたい。どの機能を有効にするのがよいか。

正解

DynamoDB Streams

解説

DynamoDB Streamsは、テーブルに対して行われた直近24時間の変更(追加・更新・削除)をログとして保持する機能です。ストリームを利用することで、いつ・どのような更新が行われたかを追跡できます。

以上より正解は
・DynamoDB Streams
です。

ログはアプリケーションからリアルタイムに参照可能で、変更に応じたイベント駆動処理を構築できます。たとえば、特定の更新をトリガーにアラートを発報する、プロフィール画像の変更をフレンドに通知するといったユースケースが考えられます。

その他の選択肢については以下の通りです。

・DynamoDB Accelerator(DAX)
DynamoDBのインメモリキャッシュクラスタのことですので誤りです。

・オンデマンドモード
DynamoDBの利用料金に関連するモードですので誤りです。オンデマンドモードは、テーブルに対する読み込み・書き込みのリクエスト単位で利用料金がかかります。

・WCU(Write Capacity Unit)
DynamoDBの利用料金に関連するモードの一つ「プロビジョンドモード」における読み書きの単位ですので誤りです。最大1KBのデータを1秒間に1回書き込みする単位をWCUといいます。

参考

【Amazon DynamoDB】
Amazon DynamoDBは、AWSが提供するフルマネージド型のNoSQLデータベースサービスです。「NoSQL」は多くの場合、SQLを使用する「リレーショナルデータベース(RDB)」に属さないデータベースという意味で使われます。

下記はAWSが提供する主なデータベースサービスです。


本項では、DynamoDBのデータ構造、高可用性、キャパシティ、データ参照時の一貫性、自動スケール、Time To Live(TTL)について解説します。

■データ構造
DynamoDBはKey-Value構造を基本としつつ、JSON形式のようなドキュメント型の柔軟性も兼ね備えています。

○Key-Value型
DynamoDBでは、Key-Value型という「保存するデータ(Value)」と、それを特定するための「キー(Key)」のペアで構成される形式のデータを扱います。例えば「ユーザーが保有しているアイテム」を管理するには、以下のように格納できます。


新たにアイテムが追加された場合や、初めて保有するアイテムを登録する場合でも、既存のデータ構造を変更することなく新しい項目を追加できます。
Key-Value型で構成されたデータの集合を「テーブル」と呼びます。複数のテーブルを結合して分析するような用途よりも、上記のように単一のデータを高速に格納・取得するシンプルな利用に向いています。
シンプルな構造のためパフォーマンスが非常に高く、ピーク時には1秒あたり最大2000万件のリクエストに対応可能です。さらに、ストレージに上限がないため、非常に高いスケーラビリティを実現します。

○ドキュメント型
DynamoDBでは、階層構造を持つ「ドキュメント型」のデータも扱うことができます。


構造的にはKey-Value型をベースとしていますが、ドキュメント型ではネストされた複雑なデータ構造もJSON形式で格納可能です。

DynamoDBは「スキーマレス」なデータベースで、属性の追加や変更を柔軟にできます。スキーマとはデータベースの構造定義のことを指します。通常、項目を追加する際にはスキーマの定義変更とデータ移行が必要ですが、DynamoDBではプライマリキー以外の属性に関しては事前定義が不要であり、任意の項目を動的に追加できます。さらに、DynamoDBではテーブルにインデックスを定義することによって、データへの高速アクセスが可能です。

■キャパシティ
DynamoDBでは、読み書きの処理量と課金体系が密接に関係しています。以下の2つの利用モードが提供されています。

○オンデマンドモード
読み書きリクエスト数に応じた従量課金なので、アクセス頻度が予測不能なワークロードに適しています。

○プロビジョンドモード
事前に1秒間あたりの読み書き量(キャパシティユニット)を設定する方式で、アクセス頻度が予測できるワークロードに適しています。

プロビジョンドモードの書き込み・読み込みは、「キャパシティユニット」という単位で管理されています。これは1秒間にどれだけ読み込み・書き込みを行うかを予約する設定で、容量が大きいほど料金がかかります。


初期値はRCU(Read Capacity Unit)/WCU(Write Capacity Unit)ともに5に設定されており、ユーザーは随時変更可能です。また、DynamoDBは負荷に応じてキャパシティユニットを自動でスケーリングできるため、一定のパフォーマンスを維持しつつ、コストを抑えることが可能です。
大規模な運用が見込まれる場合は「リザーブドキャパシティ」の利用が推奨されます。RCU/WCUを100ユニット単位で1年または3年契約で予約購入することで、通常のプロビジョンドモードよりもコストを削減できるプランです。

・キャパシティユニットとパーティション
パーティションの数やサイズは、プロビジョニングしたキャパシティユニットの値に応じてAWS側で自動的に算出・調整されます。キャパシティユニットが大きくなると、対応するパーティション数も増加し、スループットが維持されます。

■高可用性
○3つのAZにデータを分散して保存
DynamoDBは、単一障害点(SPOF: Single Point Of Failure)を排除した設計となっており、高い可用性と耐障害性を実現しています。データは、3つの異なるAZに自動的にレプリケートされ、障害発生時にも可用性が維持されます。


各AZに保存されるデータは「パーティション」単位で分割されており、パーティション分散により、データが特定のノードに集中しないようになっています。 これにより、プロビジョニングされたスループットの安定的な確保が可能です。なお、パーティションの管理と分散はAWSが自動で行うため、ユーザーが設定する必要はありません。

○バックアップ
DynamoDBでは、自動で行う「ポイントインタイムリカバリ(PITR)」と手動で行う「オンデマンドバックアップ」の2種類のバックアップ方式が提供されています。

・ポイントインタイムリカバリ(PITR)
有効化することで、過去35日間の任意の時点にデータを復元できる差分バックアップ機能が利用可能です。自動的かつ継続的にバックアップが取得されるため、復旧時の操作が容易です。

・オンデマンドバックアップ
ユーザーが任意のタイミングで、マネジメントコンソールやAPIを通じて完全なバックアップを取得できます。

○S3へのエクスポート
DynamoDBは、既存のテーブルデータをAmazon S3に直接エクスポートする機能を提供しています。エクスポートは、アプリケーションコードを記述することなく、簡単に実行できます。


S3へのエクスポートには、内部的にポイントインタイムリカバリ(PITR)の仕組みを利用しているため、事前にPITRを有効化しておく必要があります。

■データ参照時の一貫性
アプリケーションがデータを書き込むと、DynamoDBは3つのAZにレプリケートされたデータのうち、2つへの書き込みが成功した時点で処理を完了と見なします。残り1つのAZには非同期的にレプリケーションが行われるため、一時的に古いデータが参照される可能性があります。
DynamoDBでは2種類の読み込みモードが提供されています。

○結果整合性のある読み込み(デフォルト)
読み込み時に直前の更新が反映されていない可能性がありますが、時間の経過とともに整合性が確保されます。一時的に古いデータが取得されることが許容されるケースに適しています。

○強い整合性のある読み込み
レイテンシーが高くなる可能性がありますが、常に最新のデータを取得できます。

■自動スケール
DynamoDBでは、データ量やトラフィックの増加に応じて自動的にスケールアウト(拡張)されます。ノードの追加やディスク容量の管理などをユーザーが行う必要はなく、ダウンタイムなしで継続的にサービスを提供できます。

■Time To Live(TTL)
Time To Live(TTL)は、指定した時刻に一時データなどを自動で削除する機能です。項目にTTL属性を設定することで、期限を過ぎたデータが自動的に削除されます。削除処理は完全に自動で行われ、追加の管理作業やDynamoDB側での課金は発生しません。不要なデータを効率的に削除することで、ストレージコストの最適化にもなります。

【DynamoDB Streams】
DynamoDB Streamsは、テーブルに対して行われた直近24時間の変更(追加・更新・削除)をログとして保持する機能です。ストリームを利用することで、いつ・どのような更新が行われたかを追跡できます。
ログはアプリケーションからリアルタイムに参照可能で、変更に応じたイベント駆動処理を構築できます。たとえば、特定の更新をトリガーにアラートを発報する、プロフィール画像の変更をフレンドに通知するといったユースケースが考えられます。
なお、Streamsは非同期で動作するため、元のテーブルのパフォーマンスに影響を与えることはありません。


【DynamoDB Accelerator(DAX)】
DynamoDB Accelerator(DAX)は、DynamoDB向けのインメモリキャッシュサービスです。DAXを利用することで、通常ミリ秒単位のレスポンスを、マイクロ秒レベルまで短縮できます。
DAXのキャッシュからデータを取得できる場合、DynamoDB自体への読み込みリクエスト回数が減少するため、パフォーマンス向上とコスト削減の両立が可能です。


Amazon DAXクラスターでは、保管時の暗号化と転送中の暗号化の両方とも、クラスター作成時にのみ設定できます。既存のクラスターに対して後から暗号化設定を変更することはできません。そのため、暗号化を実装するには、既存のクラスターを削除し、必要な暗号化設定を有効にして新しいクラスターを作成する必要があります。

【グローバルテーブル】
DynamoDBのグローバルテーブルは、DynamoDBテーブルを複数のリージョンにまたがって運用できるサービスです。複数のリージョンにDynamoDBテーブルが自動的にレプリケートされ、ユーザーは地理的に近いリージョンのDynamoDBテーブルへ高速な読み込みと書き込みが可能です。データのレプリケーションは通常1秒以内に完了し、リージョン間のデータ冗長化によって高可用性が確保されます。
グローバルテーブルのレプリケート先のリージョンはユーザーが指定します。
上に戻る

解説文の誤字

投稿日 2023/07/04

・オンデマンドモード
DynamoDBの利用料金に関連するモードですので誤りです。オンデマンドモードは、テーブルに対する読み込み・書き込みのリクエスト単位で料理料金がかかります。

解説にある、上記の「料理料金」の箇所は「利用料金」の誤字かと思いますので、指摘させていただきました。

スタッフからの返信

s staff_satomi

2023/07/05 10:28

Pnt713_019様 ご指摘の点を修正いたしました。 ご報告いただきまして、誠にありがとうございます。

この投稿に対して返信しませんか?