У меня есть машинопись реагирующего приложения, которая использует сервисы DynamoDB для хранения данных. У меня есть javascript промежуточное ПО, которое управляет операциями доступа к БД. Я разработал локально операции scan и put и delete без ошибок. После настройки производственной среды возникает ошибка. Если я выполняю код локально в производственной среде, у меня возникает та же ошибка.
Я заметил, что операция scan завершается неудачно. На самом деле это происходит странным образом, потому что я видел, что запрос к aws серверу выполняется дважды.
Чтобы упростить мою жизнь отладки, я перешел для отладки всего доступа к базе данных в моем методе реагирования на клик, чтобы изолировать операцию от жизненного цикла приложения.
Я заметил, что
- операция извлечения onClick действительно вызывается один раз (как и ожидалось)
- операция сканирования DynamoDB действительно вызывается один раз (как и ожидалось)
- обратный вызов scann выполняется дважды (не так, как ожидалось)
- при первом получении данных, и я могу их записать (идеально)
- второй вызов выполняется с ошибкой
aws код конфигурации
const awsConfig = {
accessKeyId: process.env.REACT_APP_AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.REACT_APP_AWS_SECRET_ACCESS_KEY,
region: process.env.REACT_APP_AWS_REGION,
endpoint: process.env.REACT_APP_AWS_ENDPOINT
}
new AWS.Endpoint(awsConfig.endpoint || '')
AWS.config.update({
region: awsConfig.region,
//endpoint: awsConfig.endpoint || '',
credentials: new AWS.Credentials(awsConfig.accessKeyId || '', awsConfig.secretAccessKey || ''),
sslEnabled: false,
maxRetries: 5
})
const dynamoDbClient = new AWS.DynamoDB.DocumentClient()
примечание к этой части кода, Typescript выдает мне ошибку, если я оставляю конечную точку в AWS .config.update , поэтому я устанавливаю ее по-другому new AWS .Endpoint (awsConfig.endpoint || ' ')
Argument of type '{ region: string | undefined; endpoint: string; credentials: Credentials; sslEnabled: false; maxRetries: number; }' is not assignable to parameter of type 'ConfigurationOptions & ConfigurationServicePlaceholders & APIVersions'.
Object literal may only specify known properties, and 'endpoint' does not exist in type 'ConfigurationOptions & ConfigurationServicePlaceholders & APIVersions'.ts(2345)
aws код доступа
const searchParams = { TableName: 'table' }
let dataItems: DateFields[] = []
await dynamoDbClient
.scan(searchParams, (error: any, data: any) => {
if (error) {
console.error(`Error fetchCategories: `, JSON.stringify(error, null, 2))
return
}
dataItems = data.Items
})
.promise()
со следующей ошибкой
Error fetchCategories: {
"message": "The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.",
"code": "InvalidSignatureException",
"time": "2020-04-29T08:39:14.449Z",
"requestId": "xxxxxxxxxxxxxxxxxxx",
"statusCode": 400,
"retryable": false,
"retryDelay": 15.082420221534553
}
{"__type":"com.amazon.coral.service#InvalidSignatureException","message":"The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details."}
Есть идеи, почему это происходит? Большое спасибо