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