Автоматическое добавление метки времени через резольвер AWS Appsync с помощью Dynamodb - PullRequest
0 голосов
/ 04 мая 2018

Я попытался добавить метку времени автоматически, когда создаю какое-то сообщение. Но это не работает на примере appsync resolver-context-reference.

https://docs.aws.amazon.com/appsync/latest/devguide/resolver-context-reference.html#time-helpers-in-util-time

{
    "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 ]

0 голосов
/ 08 мая 2018

Это рабочий пример того, что вы хотите сделать (взято из моего распознавателя API AppSync). Обратите внимание на атрибуты «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())
  }
}
0 голосов
/ 09 мая 2018

Измените свой преобразователь на следующий

{
    "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()

0 голосов
/ 04 мая 2018

Для DynamoDB String должен измениться на тип DynamodB через $util. Таким образом, это будет работать после изменения временной строки на тип DynamoDB.

#set( $myFoo.timestamp = $util.time.nowISO8601() )
=>  
#set( $myFoo.timestamp = $util.dynamodb.toDynamoDB($util.time.nowISO8601())
...