You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过AWS AppSync解析器结合DynamoDB自动添加时间戳失败求助

AWS AppSync解析器自动添加时间戳失效的排查与修复方案

先梳理你代码里的几个关键问题,这些正是导致时间戳没生效的核心原因:


问题排查点

  • 变量大小写不匹配:你定义了$myfoo(全小写),但后续赋值用的是$myFoo(驼峰格式),Velocity模板是大小写敏感的,这会导致你对version和timestamp的赋值根本没作用在原来的对象上。
  • 时间戳工具调用不完整:你的代码里$ut...明显截断了,需要用正确的util.time方法来生成合法的时间戳。
  • 未将修改后的对象绑定到操作:你修改了$myFoo但没把它放到PutItem的attributeValues字段里,DynamoDB无法自动读取这个变量的内容。

修复后的完整解析器代码

{
  "version" : "2017-02-28",
  "operation" : "PutItem",
  "key": {
    "id" : $util.dynamodb.toDynamoDBJson($util.autoId())
  },
  "attributeValues": #set( $myFoo = $util.dynamodb.toMapValues($ctx.args) )
    #set( $myFoo.version = $util.dynamodb.toNumber(1) )
    #set( $myFoo.timestamp = $util.dynamodb.toNumber($util.time.nowEpochSeconds()) )
    $util.toJson($myFoo)
}

关键细节说明

  • 统一变量名:把初始定义的$myfoo改成和后续一致的$myFoo,确保所有赋值操作都作用在同一个对象上。
  • 正确生成时间戳:用$util.time.nowEpochSeconds()生成Unix时间戳(数字类型,适合DynamoDB的Number类型字段);如果需要ISO格式的字符串时间,改用$util.time.nowISO8601(),记得对应使用$util.dynamodb.toStr()做类型转换。
  • 绑定到attributeValues:修改后的$myFoo必须通过$util.toJson()传入attributeValues字段,这样DynamoDB才能接收到包含时间戳和版本号的完整数据。

如果后续需要实现更新操作时自动递增版本号,还可以结合DynamoDB的条件表达式做进一步优化,不过这属于额外需求啦。

内容的提问来源于stack exchange,提问作者Jeff Gu Kang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:54:14