AWS Dynamo DB - 如何将 TTL 设置为默认值 7 天

问题描述 投票:0回答:3

我希望在 DynamoDB 上设置 TTL,以便我可以使某些表中的项目过期。

我弄清楚了如何启用 TTL 并在表上设置一个属性,其中包含 TTL 何时过期的纪元值并且它可以工作,但是这是不可管理的,因为我认为这需要我手动添加此属性和纪元值每次?

任何人都可以建议是否可以将 TTL 设置为默认值 7 天,以及如何在 7 天后自动删除表中的项目?

谢谢

埃蒙

amazon-web-services amazon-dynamodb
3个回答
5
投票

任何人都可以建议是否可以将 TTL 设置为默认值 7 天...

否 - 您每次都必须在 DynamoDB 请求中进行设置(计算起来应该很简单)。


0
投票

您可以向表中创建的每个新项目添加一个值为当前时间戳加 7 天的属性。配置 DynamoDB 以使用该属性作为 TTL 属性。


0
投票

正如已接受的答案中提到的,您每次都必须创建它,但是当然,您可以使用 Lambda 函数自动执行此过程。

在将项目插入 dynamo 表之前,我已使用此 Lambda 函数作为层:

import json
import logging
import boto3
from datetime import datetime, timedelta

# Set up logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
    # Initialize DynamoDB client
    dynamodb = boto3.client('dynamodb', region_name='YOUR_REGION')

    table_name = 'YOUR_TABLE_NAME'

    try:
        # Build the item dynamically
        item = {}
        for key, value in event.items():
            if isinstance(value, bool):
                item[key] = {'BOOL': value}  # Convert boolean value to DynamoDB Boolean
            elif isinstance(value, str):
                item[key] = {'S': value}  # String value
            else:
                item[key] = {'N': str(value)}  # Numeric value
                
        # Add the expireAt data 7 days from now:
        expire_at = int((datetime.now() + timedelta(days=7)).timestamp())
        item['expireAt'] = {'N': str(expire_at)}  
    

        # Insert the item into DynamoDB table
        response = dynamodb.put_item(
            TableName=table_name,
            Item=item
        )

        logger.info("Item inserted successfully: %s", response)
    except Exception as e:
        logger.error("Error inserting item: %s", e)
        return {
            'statusCode': 500,
            'body': json.dumps('Error: Failed to insert item into DynamoDB')
        }

    return {
        'statusCode': 200,
        'body': json.dumps('Item inserted successfully')
    }

此代码有一个简单的任务,获取 JSON 对象形式的项目(Python 中的字典),将“expireAt”列附加到它并将其插入到 DynamoDB 表中。

备注:

expireAt 是应在 DynamoDB 表中配置的 TTL 列的名称,在代码中设置为 7 天,请随意将其更改为最适合您的值。

动态构建项目时,我仅处理 String、Number 和 Bool,如果需要,您可能需要添加其他类型。

不要忘记为您的函数授予正确的权限,以便能够将项目插入到 DynamoDB。

© www.soinside.com 2019 - 2024. All rights reserved.