DynamoDB TTL コンバーター
DynamoDB の TTL 値を読みやすい日付にデコードするか、日付を保存用の epoch 秒に変換します — 値がミリ秒のように見える場合は警告します。
時刻は UTC で表示されます。TTL による削除は有効期限からおよそ48時間以内に行われます。
DynamoDB の TTL の仕組み
Time to Live (TTL) を使うと、DynamoDB は追加コストなしでアイテムを自動的に期限切れにできます。1つの Number 属性を TTL 属性として指定します。その値は秒単位の Unix epoch タイムスタンプです。バックグラウンドプロセスが各アイテムの TTL を現在時刻と比較し、時刻が過ぎたアイテムを削除します — 通常はベストエフォートで48時間以内です。
値が秒であるため、ミリ秒のタイムスタンプは TTL の最も多いバグです。JavaScript の Date.now() の値は1000倍大きいため、アイテムの有効期限が遠い未来になり、決して削除されません。このコンバーターは単位を自動検出し、そのケースを指摘するので、リリース前に気づけます。
アイテムを自動的に期限切れにすることは、テーブルのサイジングの一部です — DynamoDB TTL ガイド では、その有効化、値のバックフィル、読み取りからの期限切れアイテムのフィルタリングを解説しています。
よくある質問
DynamoDB の TTL 属性はどの形式を使いますか?
DynamoDB の Time to Live (TTL) 属性は、秒単位で表された Unix epoch タイムスタンプを保持する Number でなければなりません — 1970-01-01 UTC からの秒数です。DynamoDB はその値を現在時刻と比較し、過去になった時点でアイテムを削除します。ミリ秒ではなく秒でなければならず、ISO 8601 の日付文字列であってもいけません。
DynamoDB の TTL がアイテムを削除しないのはなぜですか?
最も多い原因は、秒の代わりにミリ秒を保存していることです。1700000000000 のようなミリ秒値を秒として読むと、数万年先の日付になり、アイテムが決して期限切れになりません。1000 で割ってください。また、テーブルで TTL が有効になっていて、正しい属性を指していることも確認してください — その属性に値がないアイテムは決して期限切れになりません。
TTL の時刻からどのくらい経つと DynamoDB はアイテムを削除しますか?
DynamoDB は通常、有効期限の時刻から数日以内に期限切れのアイテムを削除します — AWS は最大48時間、負荷が高い場合はさらに長いというベストエフォートのウィンドウを文書化しています。期限切れのアイテムは、バックグラウンドプロセスが削除するまで、読み取りや Scan、Query に依然として現れることがあります。すぐに隠す必要がある場合は TTL 属性でフィルタしてください。
TTL の時刻は未来でなければなりませんか?
いいえ。すでに過去の TTL 値を書き込むと、アイテムはただちに削除の対象となり、次のバックグラウンドスイープで削除されます。TTL を現在の epoch 秒に設定するのは、アイテムを近いうちに削除するようスケジュールする一般的な方法です。