如何将Node中的DynamoDB表从PROVISIONED更新为PAY_PER_REQUEST?

时间:2019-05-23 14:51:26

标签: javascript node.js amazon-web-services amazon-dynamodb aws-sdk

我有一个现有的DDB表,该表使用BillingMode: PROVISIONEDProvisionedThroughput:{...}。我想将其更改为使用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"
}

我还尝试发送一个ProvisionedThroughputReadCapacityUnits的{​​{1}}字段,但这返回了:

WriteCapacityUnits

...这是我从阅读the docs中学到的期望。

有什么想法我在做什么错吗?

3 个答案:

答案 0 :(得分:0)

应该对您有用,在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”部分似乎是多余的,您是否尝试了不使用它?

答案 1 :(得分:0)

事实证明,这是我的错误...要回答这个问题,您只需发送我上面发布的内容,或者只是

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

... Nadav Har'El指出,不需要“ AttributeDefinitions”。

问题在于,在我的lambda版本中,我基于更改的内容构建了要发送的对象,并包含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

答案 2 :(得分:0)

我遇到这个问题是因为我有一个类似的问题。 原来,我使用的是CDK watchful,它需要PROVISIONING MODE,并且为发电机表定义了readCapacitywriteCapacity。完成此操作后,cdk diffcdk synth再次感到高兴。