如何在Lambda函数中为AWS AppSync Mutation创建的项设置TTL值?
在Lambda中通过AppSync Mutation创建带TTL的临时项
核心解决方案
要实现创建1小时后自动删除的项,需要修改GraphQL Schema暴露TTL字段、开启DynamoDB表的TTL功能,再在Lambda中调用Mutation时传入计算好的TTL值,具体步骤如下:
- 修改GraphQL Schema,暴露
_ttl字段
Amplify默认用_ttl作为DynamoDB的TTL字段名,你需要在对应的模型中显式声明该字段,让Amplify生成包含它的Mutation输入类型。示例schema:
type TemporaryItem @model { id: ID! content: String! _ttl: Int # 允许创建时手动指定TTL值 }
修改后运行amplify push更新API,此时生成的CreateTemporaryItemInput会包含_ttl参数。
- 开启DynamoDB表的TTL功能
登录AWS控制台,找到对应DynamoDB表:
- 进入「TTL」标签页
- 开启TTL功能,选择
_ttl作为TTL属性字段
这样DynamoDB会自动删除_ttl值小于当前时间的项。
- 在Lambda中构造Mutation请求并传入TTL值
计算1小时后的秒级Unix时间戳(注意必须是秒,不是毫秒),然后在Mutation变量中传入该值。示例JavaScript代码:
// 计算1小时后的时间戳(秒级) const ttl = Math.floor(Date.now() / 1000) + 3600; // 构造AppSync Mutation const mutationDocument = ` mutation CreateTemporaryItem($input: CreateTemporaryItemInput!) { createTemporaryItem(input: $input) { id content _ttl } } `; const variables = { input: { content: "你的临时内容", _ttl: ttl } }; // 调用AppSync API(示例使用AWS AppSync SDK) import { AppSyncClient, gql } from '@aws-amplify/api'; const client = new AppSyncClient({ url: process.env.APPSYNC_API_URL, region: process.env.AWS_REGION, auth: { type: 'AWS_IAM', credentials: { accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, } } }); const response = await client.mutate({ mutation: gql(mutationDocument), variables });
额外说明
- Amplify Studio的软删除逻辑是设置
_deleted: true并给_ttl设一个默认过期时间(通常7天),如果你不需要软删除,直接设置_ttl即可,无需处理_deleted字段。 - 确保
_ttl传入的是秒级Unix时间戳,如果传入毫秒级,项会立即被标记为过期删除。
内容的提问来源于stack exchange,提问作者tamptek
相关产品推荐
相关产品推荐

