DynamoDBは古くなった項目を自動的に削除してくれます。
詳細な説明については以下を参照して下さい。
今回は実際に属性へTTLを設定して、期限が切れた項目が自動的に削除されること確認します。
TTL属性の設定
Musics テーブルのTTLを有効にし、expDate という属性をTTL属性とします。
実行
const DynamoDbSetter = require("./DynamoDbSetter");
module.exports = class DynamoDbOperator extends DynamoDbSetter{
async exec(event) {
// 実行内容
let params = {
TableName : "Musics",
TimeToLiveSpecification: {
AttributeName: "expDate",
Enabled: true
}
};
// 実行
return await this.dynamodb.updateTimeToLive(params).promise();
}
}
結果
{
"TimeToLiveSpecification": {
"Enabled": true,
"AttributeName": "expDate"
}
}
TTLの登録
expDate に有効期限タイムスタンプを登録します。20分後に削除されるように有効期限を登録します。
実行
const DynamoDbSetter = require("./DynamoDbSetter");
module.exports = class DynamoDbOperator extends DynamoDbSetter{
async exec(event) {
// 20分後
let date = new Date();
date.setMinutes( date.getMinutes() + 20);
let expDate = Math.floor(date.getTime() / 1000);
let params = {
TableName : "Musics",
Item:{
"artist": {"S":"B'z"},
"title": {"S": "GREEN"},
"expDate": {"N": String(expDate)},
},
ReturnValues: "ALL_OLD",
ReturnConsumedCapacity: "INDEXES"
};
return await this.dynamodb.putItem(params).promise();
}
}
結果
{
"Attributes": {
"artist": {
"S": "B'z"
},
"expDate": {
"N": "1630206147"
},
"title": {
"S": "GREEN"
}
},
"ConsumedCapacity": {
"TableName": "Musics",
"CapacityUnits": 1,
"Table": {
"CapacityUnits": 1
}
}
}
TTL属性の設定情報確認
TTL属性の情報を確認できます。
実行
const DynamoDbSetter = require("./DynamoDbSetter");
module.exports = class DynamoDbOperator extends DynamoDbSetter{
async exec(event) {
// 実行内容
let params = {
TableName : "Musics",
};
// 実行
return await this.dynamodb.describeTimeToLive(params).promise();
}
}
結果
{
"TimeToLiveDescription": {
"TimeToLiveStatus": "ENABLED",
"AttributeName": "expDate"
}
}
TTL属性の設定削除
先ほど設定したTTLの設定を削除します。
実行
const DynamoDbSetter = require("./DynamoDbSetter");
module.exports = class DynamoDbOperator extends DynamoDbSetter{
async exec(event) {
// 実行内容
let params = {
TableName : "Musics",
TimeToLiveSpecification: {
AttributeName: "expDate",
Enabled: false
}
};
// 実行
return await this.dynamodb.updateTimeToLive(params).promise();
}
}
結果
{
"TimeToLiveSpecification": {
"Enabled": false,
"AttributeName": "expDate"
}
}
最後に
特にありません。