React Native搭配AWS后端实现DynamoDB与关联S3资源同步定时删除问询
适配过期时间变更的DynamoDB与S3同步删除方案
你可以直接用「EventBridge定时触发Lambda」的轻量方案实现需求,全程无复杂配置,完全适配expirationDate手动更新的场景,具体步骤如下:
- 第一步:先关闭你当前配置的DynamoDB TTL自动删除规则,后续删除逻辑统一由Lambda执行
- 第二步:创建一个Lambda处理函数,核心逻辑如下:
- 调用DynamoDB的查询接口,过滤出所有
expirationDate值小于当前时间戳的记录 - 遍历符合条件的记录:
- 若记录存在
image字段,先从S3地址中解析出bucket名称和对象key,调用deleteObject接口删除对应的S3资源 - 调用DynamoDB的删除接口清除本条记录
极简Python版Lambda示例:
- 若记录存在
import boto3 import time # 替换为你实际的DynamoDB表名 dynamodb = boto3.resource('dynamodb').Table('MyObject表名') s3 = boto3.client('s3') def lambda_handler(event, context): current_ts = int(time.time()) # 查询所有已过期的记录 res = dynamodb.scan( FilterExpression='expirationDate < :curr', ExpressionAttributeValues={':curr': current_ts} ) for item in res['Items']: # 先删除关联的S3图片 if item.get('image'): # 此处解析逻辑根据你实际存储的image地址格式调整,示例默认image格式为s3://bucket-name/object-key s3_path = item['image'].replace('s3://', '') bucket, key = s3_path.split('/', 1) s3.delete_object(Bucket=bucket, Key=key) # 再删除DynamoDB记录 dynamodb.delete_item(Key={'id': item['id']}) - 调用DynamoDB的查询接口,过滤出所有
- 第三步:给Lambda配置对应的IAM权限,至少包含:
- DynamoDB表的
scan、deleteItem权限 - 对应S3 bucket的
deleteObject权限 - Lambda基础运行权限(CloudWatch日志写入权限)
- DynamoDB表的
- 第四步:配置EventBridge定时规则,触发频率根据你的业务需求设置即可,比如每天凌晨触发一次即可满足14天过期的粒度要求,触发目标选择你刚才创建的Lambda函数。
方案优势
- 天然适配过期时间变更场景:用户手动更新expirationDate延长有效期后,只要更新后的时间戳大于当前时间,下次Lambda扫描时就不会命中该记录,无需额外做适配开发
- 配置极简:全程仅涉及3个AWS服务,没有复杂的流处理、状态机等组件,后端经验少也能快速配置完成
- 成本极低:EventBridge定时触发几乎无成本,Lambda每日调用一次、运行时长通常在百毫秒级,基本都在AWS免费额度覆盖范围内
如果你是用Amplify开发(你的Schema用了Amplify的@model等指令),可以直接用Amplify的定时函数能力,不用手动配置EventBridge,直接在项目中执行amplify add function选择定时触发类型,把上述逻辑写进去即可完成部署。
内容的提问来源于stack exchange,提问作者Jacki
相关产品推荐
相关产品推荐

