🐡

図解で理解するAmazon MemoryDB

に公開

Amazon MemoryDB for Redisとは

Redis互換の高速インメモリデータベースで、マルチAZ構成や永続化機能を備えた本番向けのフルマネージドサービス。キャッシュ用途だけでなく、信頼性の高いリアルタイムデータストアとして利用可能。

Redisとは

キーと値のペアでデータを管理する、インメモリ型の高性能NoSQLデータベース。

特徴 内容
インメモリ データをディスクではなくメモリに置くので高速
キー・バリュー型 key→valueのシンプルな形式でデータを管理
多様な構造 文字列だけでなく、リストやセットなども扱える

コマンド集(別記事):
https://zenn.dev/junc/articles/c5bd551af2ed40

MemoryDB for Redisの構成要素

①クラスター

  • MemoryDBの最上位の論理単位
  • 1つのクラスターには複数のシャードを持つことが可能。
  • クラスターは自動的にマルチAZ対応(高可用性)されるように構成可能。

②シャード

  • データの分割単位(水平スケーリング)
  • クラスターは1つ以上のシャードを持ち、それぞれのシャードが異なるキー範囲のデータを担当。
  • 1つのシャードは、1つのプライマリノードと0個以上のレプリカノードで構成。

③プライマリノード

  • 各シャード内に1つだけ存在するリーダーノード
  • 全ての書き込み・更新処理はこのノードを経由
  • 他のノード(レプリカ)に対してデータを同期する役割も担う

④レプリカノード

  • プライマリノードの読み取り専用のコピー
  • 高可用性のために使われ、プライマリが障害時には自動で昇格(フェイルオーバー)
  • 読み取りスループット向上のためにも活用

⑤エンドポイント

MemoryDBには用途に応じた複数の接続エンドポイントがある。

種類 用途
クラスターエンドポイント クラスター全体へのルーティング(読み取り時に便利)
シャードエンドポイント 特定のシャードのノードに接続(高度な制御が必要な時)
ノードエンドポイント 特定のプライマリまたはレプリカノードに直接接続

⑥スナップショット

  • バックアップ/復元用途の自動スナップショット
  • 毎日1回の自動スナップショットをスケジューリング可能
  • 任意のタイミングで手動スナップショットも取得可能

特徴

項目 内容
Redis互換のインメモリDB Redis OSS(オープンソース)と高い互換性を持ち、既存の Redisクライアントライブラリやコマンドをそのまま利用可能
高速アクセスと低レイテンシ 全てのデータをインメモリで処理するため、1ミリ秒未満の応答速度を実現。
永続化と高可用性を両立 AOF(Append-Only File)方式での永続化に対応。マルチAZ対応によりノード障害やAZ障害が発生しても、自動でフェイルオーバー。
スケーラブルなクラスタ管理 クラスタ構成をサポートしており、シャード単位で水平スケーリングが可能

MemoryDBのセキュリティ設定

Redis AUTH(ユーザー認証)

  • Redis標準のAUTHコマンド(パスワード認証)をサポート
  • クライアント接続時に認証を要求することで、不正アクセスを防止
  • パスワードはMemoryDBクラスター作成時に設定可能(後から変更も可)

TLS通信

  • クライアント〜MemoryDB間の通信を暗号化するためのTLS(SSL)をサポート。
  • TLSが有効なクラスターでは、クライアントもTLS対応で接続する必要あり
  • デフォルトでは有効推奨

データの保存時暗号化

  • MemoryDBはKMSと連携して、保存データを暗号化可能。
  • 暗号鍵は以下のどちらかを選択
    • AWS管理のデフォルトキー(aws/memorydb)
    • カスタマー管理キー(CMK)

料金モデル

①インスタンス使用料金(時間単位)

  • 料金の基本はノード単位での時間課金
  • インスタンスタイプごとに料金が異なり、プライマリノードもレプリカノードも課金対象
  • クラスターがシャード2つ+レプリカ各1台なら、合計4ノード分が課金される

②スナップショットストレージ料金

  • 自動・手動問わず、スナップショット(バックアップ)に使用するストレージにも課金される。
  • 初期の一定容量までは無料ですが、それを超えるとGB単位で料金が発生。

③データ転送料金

VPC内通信(同一AZ)

無料(同一VPC内のEC2などとの接続)

AZ間通信・インターネット転送

異なるAZ間のレプリケーション通信や、外部へのデータ転送には料金がかかる。
(料金最適化には、クライアント(EC2など)をMemoryDBと同じAZに配置するのが理想)

Discussion