Azure Cosmos DBで既存コンテナにTTLを設定する

2024/08/12に公開

Azure Cosmos DB には Time-to-Live(TTL)の機能があります。
これは Cosmos DB に保存されているアイテムに有効期限を設け、一定時間が経過したアイテムを自動で削除する機能です。

https://learn.microsoft.com/ja-jp/azure/cosmos-db/nosql/time-to-live

既存のアイテムが存在するコンテナへの TTL の設定

今回は、既存のアイテムが存在する状態でコンテナに TTL の設定を追加した場合に、既存のアイテムがどのように処理されるかを試してみようと思います。

アイテムの作成

TTL の設定をする前にコンテナにアイテムを作成しておきます。
画像のように 3 つのアイテムがある状態にしておきます。

TTL の設定

対象のコンテナに TTL を設定します。

今回は 10 秒とします。

TTL 設定後のアイテムの確認

もともと投入されていたアイテムは作成時から 10 秒が経過しているため、既に削除されています。

MongoDB API での TTL の設定

おまけ的な要素ですが、RU ベースの MongoDB API でも TTL が利用できるので、こちらでも試してみようと思います。

ドキュメントの作成

こちらでも同様に TTL の設定をする前にコレクションにドキュメントを作成しておきます。

TTL の設定

MongoDB API の場合は、Azure Portal の GUI からではなく、Mongo Shell を介して操作する必要があります。
以下のコマンドで同様に 10 秒間でコレクション単位に TTL を設定します。

db['test-container'].createIndex({ _ts: 1 }, { expireAfterSeconds: 10 });

TTL 設定後のドキュメントの確認

MongoDB API の場合でも、もともと投入されていたアイテムは作成時から 10 秒が経過しているため、既に削除されています。

まとめ

Azure Cosmos DB の Time-to-Live(TTL)機能を利用することで、一定期間が経過したアイテムを自動で削除できることを確認しました。
TTL 機能では_tsという各アイテムが更新された時刻の情報から削除対象のアイテムを判断しています。
そのため、既存のアイテムが存在するコンテナに対しても後から TTL を有効にすることで、有効期限切れのアイテムを自動で削除します。

TTL を上手に使うことで、バッチジョブなどに頼らずに一定期間が経過したアイテムをまとめて削除することができたりするので、知っておくと便利な場面もあるかと思います。

Discussion