DynamoDBのTTL(Time to Live)のAttribute Nameに「ttl(予約語)」を使っても動作するか試してみた
Amazon DynamoDBには、TTL(Time to Live)があります。 これは、Unixtimeで指定した時刻になると、48時間以内にデータを削除してくれる便利機能です。
このTTL機能に使う属性名をいろいろ悩んでいたところ、「もうttl
で良いのでは?」と考えました。
しかし、DynamoDBの予約語にはttl
があります。この予約語は「更新式などを書くときに直接使えないから、#付きのプレースホルダーを使ってね」の意図です。
そこで、「DynamoDBの予約語にttl
はあるけど、TTL機能の属性名に使っても動作するよね?」を確認してみました。
おすすめの方
- DynamoDBのTTLの属性名に迷っている方
- DynamoDBのTTLを知りたい方
DynamoDBテーブルを作成して、TTLを設定する
DynamoDBテーブルを作成する
適当なDynamoDBテーブルを作成します。
実験用のデータを追加する
実験用のデータを追加します。
- ttl: 2022-09-27T09:00:00
aws dynamodb put-item \ --table-name ttl-test \ --item '{"deviceId":{"S":"device1"}, "ttl": {"N":"1664236800"}}'
- ttl: 2022-09-28T09:00:00
aws dynamodb put-item \ --table-name ttl-test \ --item '{"deviceId":{"S":"device2"}, "ttl": {"N":"1664323200"}}'
DynamoDBにTTLを設定する
TTLの属性名を「ttl」として設定します。
ついでに、任意の時間でプレビュー確認してみると、削除されそうでした。
TTLを設定した時刻まで待って、結果を確認する
無事に削除されました
2件あったデータが1件になりました。
TTL設定を確認すると、1件削除されたことが分かります。
さいごに
DynamoDBのTTL機能の属性名に「ttl」を使っても大丈夫でした。 ただし、更新式などを書くときは、#付きのプレースホルダーを使うのを忘れないように注意ですね。