AWS

【DynamoDB】AWS SDK を使用した項目の有効期限の設定

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"
    }
}

最後に

特にありません。

© DeNnie.Lab All Rights Reserved.