Автоматическое добавление метки времени через резольвер AWS Appsync с помощью Dynamodb
Я пытался добавить метку времени автоматически, когда я создаю какой-то пост. Но это не работает на примере appsync resolver-context-reference.
https://docs.aws.amazon.com/appsync/latest/devguide/resolver-context-reference.html
{
"version" : "2017-02-28",
"operation" : "PutItem",
"key": {
"id" : $util.dynamodb.toDynamoDBJson($util.autoId())
},
#set( $myfoo = $util.dynamodb.toMapValues($ctx.args) )
#set( $myFoo.version = $util.dynamodb.toNumber(1) )
#set( $myFoo.timestamp = $util.time.nowISO8601() )
"attributeValues" : $util.toJson($myFoo)
}
3 ответа
Решение
Для DynamoDB, String
следует изменить на тип DynamodB через $util
, Таким образом, это будет работать после изменения временной строки на тип DynamoDB.
#set( $myFoo.timestamp = $util.time.nowISO8601() )
=>
#set( $myFoo.timestamp = $util.dynamodb.toDynamoDB($util.time.nowISO8601())
Это рабочий пример того, что вы хотите сделать (взято из моего распознавателя AppSync API). Обратите внимание на атрибуты "messageId" и "creationDate". Вот как вы можете добавить дату при записи в DDB.
{
"version": "2017-02-28",
"operation": "PutItem",
"key": {
"eventId": $util.dynamodb.toDynamoDBJson($ctx.args.input.eventId),
"messageId": $util.dynamodb.toDynamoDBJson("$util.time.nowISO8601()$util.autoId()"),
},
"attributeValues": {
"message": $util.dynamodb.toDynamoDBJson($ctx.args.input.message),
"createdDate": $util.dynamodb.toDynamoDBJson($util.time.nowISO8601())
}
}
Измените свой преобразователь на следующий
{
"version" : "2017-02-28",
"operation" : "PutItem",
"key": {
"id" : $util.dynamodb.toDynamoDBJson($util.autoId())
},
#set( $myfoo = $util.dynamodb.toMapValues($ctx.args) )
#set( $myFoo.version = $util.dynamodb.toNumber(1) )
#set( $myFoo.timestamp = $util.dynamodb.toDynamoDB($util.time.nowISO8601()) )
"attributeValues" : $util.toJson($myFoo)
}
Обратите внимание на изменение, заключающее вызов $util.time.nowISO8601()
с $util.dynamodb.toDynamoDB()