MENU

DynamoDB Streamsは「変更の記録」、TTLは「期限切れの自動削除」

DynamoDB Streamsは「変更の記録」、TTLは「期限切れの自動削除」を説明する画像

おはようございます、YASUです。

DynamoDBのQuery/Scan、GSIとLSI、スロットリングと整理してきましたが、DVAにはもう2つ、「DynamoDB Streams」と「TTL」が出てきます。名前だけでは、何をするものか分かりにくかったので、シンプルに整理しました。

目次

結論

DynamoDB Streamsは「テーブルの変更の記録」、TTLは「期限切れの項目の自動削除」です。2つは別の機能ですが、TTLによる削除も、Streamsに流れてくる、という関係があります。

DynamoDB Streams:変更の記録

DynamoDB Streamsは、テーブルの項目に加えられた変更を、時間順に記録して、最大24時間保存する機能です。記録されるイベントは、3種類です。

  • INSERT:項目が追加された
  • MODIFY:項目の属性が変更された
  • REMOVE:項目が削除された

何を記録するかは、ストリームのビュータイプで選びます。

  • KEYS_ONLY:変更された項目のキーだけ
  • NEW_IMAGE:変更後の項目全体
  • OLD_IMAGE:変更前の項目全体
  • NEW_AND_OLD_IMAGES:変更前と変更後の両方

この記録を、Lambdaで処理すると、「データが変更されたら、何かを実行する」という仕組みを作れます。前に整理したとおり、DynamoDB Streamsは、Lambdaが自分から取りに行く、プル型のイベントソースです。

TTL:期限切れの自動削除

TTL(Time to Live)は、テーブルの1つの属性を「有効期限」に指定すると、その値が現在時刻を過ぎた項目を、DynamoDBが自動で削除してくれる機能です。値は、Unix時間(秒)の数値で保存します。

  • 期限切れの項目の削除では、書き込みキャパシティを消費しない
  • 期限が過ぎたら、すぐに削除されるわけではなく、バックグラウンドで削除される
  • セッション情報や、一時的なデータの掃除に向いている

2つの関係:TTLの削除もStreamsに流れる

TTLによって削除された項目は、DynamoDB Streamsに、REMOVEのイベントとして流れます。AWSの公式ドキュメントでは、このレコードのユーザーIDの項目が、種類は「Service」、プリンシパルIDは「dynamodb.amazonaws.com」になる、と説明されています。つまり、ユーザーが削除したのか、TTLによる自動削除なのかを、見分けられます。

この仕組みと、Lambdaを組み合わせると、期限切れの項目を、削除される前にアーカイブする、といった使い方ができます。

気をつけたいのは、REMOVEのイベントが、ユーザー操作による削除だけではない、という点です。TTLによる削除を想定せずに作ると、意図しないタイミングで、処理が動くことがあります。

試験での見分け方

  • 「テーブルの変更を検知して、何かを実行したい」→ DynamoDB Streams + Lambda
  • 「期限切れのデータを、自動で削除したい」→ TTL
  • 「削除前の内容も、取得したい」→ ストリームのビュータイプで、OLD_IMAGEかNEW_AND_OLD_IMAGES

まとめ

  • DynamoDB Streamsは、項目の変更(INSERT、MODIFY、REMOVE)を、時間順に最大24時間記録する
  • ビュータイプは、KEYS_ONLY、NEW_IMAGE、OLD_IMAGE、NEW_AND_OLD_IMAGESの4種類
  • TTLは、有効期限を過ぎた項目を自動で削除し、書き込みキャパシティを消費しない
  • TTLによる削除も、Streamsに、REMOVEとして流れる

「変更の記録」と「期限切れの自動削除」を、別々に理解したうえで、2つがつながっていると分かり、すっきりしました。それでは、また明日!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次