我希望在 DynamoDB 上设置 TTL,以便我可以使某些表中的项目过期。
我弄清楚了如何启用 TTL 并在表上设置一个属性,其中包含 TTL 何时过期的纪元值并且它可以工作,但是这是不可管理的,因为我认为这需要我手动添加此属性和纪元值每次?
任何人都可以建议是否可以将 TTL 设置为默认值 7 天,以及如何在 7 天后自动删除表中的项目?
谢谢
埃蒙
任何人都可以建议是否可以将 TTL 设置为默认值 7 天...
否 - 您每次都必须在 DynamoDB 请求中进行设置(计算起来应该很简单)。
您可以向表中创建的每个新项目添加一个值为当前时间戳加 7 天的属性。配置 DynamoDB 以使用该属性作为 TTL 属性。
正如已接受的答案中提到的,您每次都必须创建它,但是当然,您可以使用 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。