我有一个现有的 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"
}
我还尝试发送带有 ReadCapacityUnits
和 WriteCapacityUnits
的 ProvisionedThroughput
字段,但返回了:
ValidationException: One or more parameter values were invalid: ProvisionedThroughput cannot be specified when BillingMode is PAY_PER_REQUEST
...这是我从阅读 the docs 中所期望的.
知道我做错了什么吗?
事实证明这是我的错误...为了回答这个问题,你发送的正是我上面发布的内容,或者只是
{
"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
我是一名优秀的程序员,十分优秀!