仕組み: DynamoDB の有効期限 (TTL)
DynamoDB テーブルで TTL を有効にする場合、項目が有効期限切れになるかどうかを判断するときにサービスが検索する特定の属性名を指定する必要があります。テーブルで TTL を有効にすると、パーティションごとのスキャナーのバックグラウンド処理によって、テーブル内の項目の有効期限ステータスが自動的かつ継続的に評価されます。
スキャナーのバックグラウンド処理では、Unix エポック時間形式Number
データ型の場合、属性の値は Unix エポック時間形式
項目がテーブルから削除されると、2 つのバックグラウンドオペレーションが同時に実行されます。
-
項目は、DeleteItem オペレーションと同じ方法で、ローカルセカンダリインデックスおよびグローバルセカンダリインデックスから削除されます。このオペレーションに追加コストは発生しません。
-
各項目の削除オペレーションは DynamoDB ストリームに入りますが、通常の削除ではなく、システム削除のタグが付けられます。このシステム削除の使用方法の詳細については、「DynamoDB ストリームと Time to Live」を参照してください。
重要
-
通常、TTL は期限が切れた項目を数日以内に削除します。テーブルのサイズとアクティビティレベルによっては、期限切れの項目の実際の削除オペレーションが異なる場合があります。TTL はバックグラウンドプロセスであることを意図しているため、TTL を介して項目の有効期限切れや削除に使用される容量の性質は可変です (無料)。
-
有効期限が切れているものの、TTL によってまだ削除されていない項目は、読み取り、クエリ、およびスキャンに表示されます。結果セットが期限切れの項目を含まないようにする場合には、除外する必要があります。そのためには、Time to Live の有効期限の値が現在の時間 (エポック形式) よりも大きい場合にのみ項目を返すフィルタ式を使用します。詳細については、「」を参照してくださいScan のフィルタ式
-
有効期限を過ぎたものの、まだ削除されていない項目は更新でき、有効期限属性を変更または削除するための正常な更新が適用されます。
テーブルの CloudWatch メトリクスタブで TTL レートをモニタリングし、項目が削除されるタイミングとレートを確認できます。

有効期限 (TTL) の例
たとえば、ユーザーのセッション履歴を追跡する SessionData という名前のテーブルについて考えてみます。SessionData
の各項目は、パーティションキー (UserName
) とソートキー (SessionId
) によって識別されます。UserName
、SessionId
、CreationTime
、ExpirationTime
といった追加の属性はセッション情報を追跡します。ExpirationTime
属性は、テーブルの TTL 属性として設定されます (一部表示されていない各項目の属性もあります)。
SessionData | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ユーザーネーム | SessionId | CreationTime | ExpirationTime (TTL) | SessionInfo | … | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
user1 | 74686572652773 | 1571820360 | 1571827560 | {JSON ドキュメント} | ... | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
user2 | 6e6f7468696e67 | 1571820180 | 1571827380 | {JSON ドキュメント} | ... | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
user3 | 746f2073656520 | 1571820923 | 1571828123 | {JSON ドキュメント} | ... | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
user4 | 68657265212121 | 1571820683 | 1571827883 | {JSON ドキュメント} | … | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
user5 | 6e6572642e2e2e | 1571820743 | 1571831543 | {JSON ドキュメント} | ... | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
... | ... | ... | ... | ... | … |
この例で、各項目には作成時に設定される ExpirationTime
属性値があります。次のテーブルの項目を考慮します。
SessionData | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ユーザーネーム | SessionId | CreationTime | ExpirationTime (TTL) | SessionInfo | … | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
user1 | 74686572652773 | 1571820360 | 1571827560 | {JSON ドキュメント} | ... |
この例では、項目 CreationTime
は 2019 年 10 月 23 日、水曜日、午前 08:46 (UTC) に設定され、ExpirationTime
は 2 時間後の、2019 年 10 月 23 日、水曜日、午前 10:46 (UTC) に設定されます。現在の時刻 (エポック形式) が ExpirationTime
属性の時間よりも大きくなると、項目が期限切れになります。この場合、キー { Username: user1, SessionId:
74686572652773}
を持つ項目は午前 10:46 (1571827560) を経過すると期限切れになります。