助け合いフォーラム

AWS

AWS ソリューションアーキテクト - アソシエイト(SAA-C03)
問題ID : 30285
問題を開く
Amazon DynamoDBについて正しく述べているものはどれか。(2つ選択)

正解

3つのAZにテーブルを保持することにより、可用性を向上させている

インデックスを持ったテーブルを構築することでスループットを向上させることができる

解説

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


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

以上より正解は
・3つのAZにテーブルを保持することにより、可用性を向上させている
・インデックスを持ったテーブルを構築することでスループットを向上させることができる
です。

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

・BIなどに活用できるデータウェアハウスとしての利用に向いている
BI:Business Intelligenceとは、大容量データを分析し経営に役立てることをいいます。
BI向けのデータウェアハウスサービスはRedshiftです。

・異なるリージョンにバックアップを作成することにより可用性を向上させている
Redshiftではデータベースのバックアップ(スナップショット)を異なるリージョンに作成することができます。
DynamoDBではバックアップの作成先のリージョンを指定することはできません。

・参照専用のテーブルを異なるAZに保持し、参照性能を向上させることができる
RDSではリードレプリカという参照専用のレプリカを作成することにより、パフォーマンスを向上させることができます。
DynamoDBが3つのAZに保存するテーブルは参照専用ではなく、パフォーマンス向上を目的とした仕組みではありませんので、リードレプリカとは別のものです。

参考

【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秒以内に完了し、リージョン間のデータ冗長化によって高可用性が確保されます。
グローバルテーブルのレプリケート先のリージョンはユーザーが指定します。
上に戻る

信頼性→可用性

投稿日 2022/11/09

3つのAZにデータが保存されることなので、信頼性ではなく可用性のような気がします。

2022/11/10 10:23

AWS Well-Architectedフレームワークの「信頼性の柱」に
https://wa.aws.amazon.com/wat.pillar.reliability.ja.html

水平方向にスケールしてワークロード全体の可用性を高める

とあるので、信頼性でも間違いではないのかなと思います。(信頼性を高める要因の一つに可用性がある)
しかしこの問題の場合は可用性の方がしっくりきますね。


コメント

この返信に対して
コメントを記入できます

2022/11/10 12:24

迅速な対応ありがとうございます。


コメント

この返信に対して
コメントを記入できます

スタッフからの返信

s staff_satomi

2022/11/10 11:37

hrmtr1ba様、birdpixy様 ご指摘の点を修正いたしました。 ご報告下さり、誠にありがとうございます。

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