Как обновить таблицу DynamoDB с PROVISIONED до PAY_PER_REQUEST в узле? - PullRequest
1 голос
/ 23 мая 2019

У меня есть таблица DDB, в которой используются BillingMode: PROVISIONED и ProvisionedThroughput:{...}. Я хочу изменить его на использование BillingMode: PAY_PER_REQUEST, но при этом я получаю следующую ошибку:

TypeError: Cannot read property 'ReadCapacityUnits' of undefined

Параметры, которые я отправляю на вызов updateTable:

{
  "TableName": "my-table-name",
  "AttributeDefinitions": [
    {
      "AttributeType": "S",
      "AttributeName": "name"
    }
  ],
  "BillingMode": "PAY_PER_REQUEST"
}

Я также попытался отправить поле ProvisionedThroughput с ReadCapacityUnits и WriteCapacityUnits, но это вернуло:

ValidationException: One or more parameter values were invalid: ProvisionedThroughput cannot be specified when BillingMode is PAY_PER_REQUEST

... это то, что я ожидал бы от прочтения документов .

Есть идеи, что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 25 мая 2019

Оказывается, это была моя ошибка ... чтобы ответить на вопрос, вы отправляете именно то, что я написал выше, или просто

{
  "TableName": "my-table-name",
  "BillingMode": "PAY_PER_REQUEST"
}

... «Определение атрибутов» не нужно, как указал Надав Хар'Эль.

Проблема заключалась в том, что в моей лямбда-версии я создавал объект для отправки на основе того, что изменилось, включая ProvisionedThroughput: undefined, что заставило SDK попытаться проверить этот объект. Я давно не видел проблемы, потому что console.log(JSON.stringify()) удаляет все ключи, значение которых undefined. Чтобы проиллюстрировать это другим способом:

$ node
> var a = {foo:1, bar:undefined}
undefined
> a
{ foo: 1, bar: undefined }
> console.log(JSON.stringify(a))
{"foo":1}
undefined
0 голосов
/ 23 мая 2019

Это должно работать для вас, в https://docs.amazonaws.cn/en_us/amazondynamodb/latest/developerguide/WorkingWithTables.Basics.html есть пример:

aws dynamodb update-table --table-name Music --billing-mode PAY_PER_REQUEST

Часть "AttributeDefinitions" в вашем запросекажется лишним, ты пробовал без него?

...