0

Dynamodb のグローバルセカンダリインデックスのページネーションに問題があります:/

私の DynamoDB スキーマは次のとおりです。

Resources:
  ImportsTable:
    Type: AWS::DynamoDB::Table
    Properties:
      # Generate a name based on the stage
      TableName: ${self:service}-${self:custom.stage}-imports
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
        - AttributeName: fixedKey
          AttributeType: S
        - AttributeName: timestamp
          AttributeType: N
      KeySchema:
        - AttributeName: id
          KeyType: HASH
      StreamSpecification:
        StreamViewType: NEW_IMAGE
      ProvisionedThroughput:
        ReadCapacityUnits: ${self:custom.app.tableThroughput.imports}
        WriteCapacityUnits: ${self:custom.app.tableThroughput.imports}
      TimeToLiveSpecification:
        AttributeName: expirationTime
        Enabled: true
      GlobalSecondaryIndexes:
        - IndexName: time-index
          KeySchema:
            - AttributeName: fixedKey
              KeyType: HASH
            - AttributeName: timestamp
              KeyType: RANGE
          Projection:
            ProjectionType: ALL
          ProvisionedThroughput:
            ReadCapacityUnits: ${self:custom.app.tableThroughput.imports}
            WriteCapacityUnits: ${self:custom.app.tableThroughput.imports}
      SSESpecification:
        SSEEnabled: true

私のクエリパラメータ:

let params = {
            TableName: process.env.importsTableName,
            IndexName: 'time-index',
            KeyConditionExpression: 'fixedKey = :fk',
            Limit: 5,
            ProjectionExpression: "timeBasedId, importFileS3Key, meta, #st, #ch, success, errors, #ty, #id, email",
            ScanIndexForward: true,
            ExpressionAttributeNames: {
                "#ch": "Attributes",
                "#st": "status",
                "#ty": "type",
                "#id": "identity",
            },
            ExpressionAttributeValues: {
                ":fk" : "fixedKey",
            },
 };

これを実行すると、次の応答が返されます。

   LastEvaluatedKey: {
    id: 88de14a0-2475-11e9-a0ee-d317558aa61b
    fixedKey: fixedKey
    timestamp: 1548842283754
}

したがって、次の呼び出しのために、これを params に追加しました:

ExclusiveStartKey: {
                    id: event.queryStringParameters.id,
                }

event.queryStringParameters.idは適切なキーのようです

88de14a0-2475-11e9-a0ee-d317558aa61b

しかし、実行すると、500 エラーと次のメッセージが表示されます。

The provided starting key is invalid

LastEvaluatedKey全体をリクエストに追加するように指示するリードを見つけましたが、これを使用してクエリを実行すると:

ExclusiveStartKey: {
                    id: event.queryStringParameters.id,
                    fixedKey: event.queryStringParameters.fixedKey,
                    timestamp: event.queryStringParameters.timestamp
                }

event.queryStringParameters が次のようになっている場合:

{ fixedKey: 'fixedKey',
id: '88de14a0-2475-11e9-a0ee-d317558aa61b',
timestamp: '1548842283754' }

このエラーが発生します:

The provided key element element does not math the schema
4

1 に答える 1