一个或多个参数值无效:dynamodb

One or more parameter values were invalid: dynamodb

const dynamoDBConfig = require("../../config/dynamodb");
var AWS = require("aws-sdk");
AWS.config.update(dynamoDBConfig.aws_remote_config);
var dynamodb = new AWS.DynamoDB();

var params = {
    TableName : "year",
    KeySchema: [       
        { AttributeName: "year", KeyType: "HASH"},  //Partition key
        { AttributeName: "title", KeyType: "RANGE" }  //Sort key
    ],
    // other properties, it is the same every time
};
dynamodb.createTable(params, function(err, data) {
    if (err) {
        console.error("Unable to create table. Error JSON:", JSON.stringify(err, null, 2));
    } else {
        console.log("Created table. Table description JSON:", JSON.stringify(data, null, 2));
    }
});

你可以注意到我的主键是 year, AttributeName: "year", KeyType: "HASH"。如果我只是更改 table 名称也可以正常工作。但是,当我将 AttributeName: "year", KeyType: "HASH" 更改为 AttributeName: "anything", KeyType: "HASH" 时,它会产生错误。

Unable to create table. Error JSON: {
  "message": "One or more parameter values were invalid: Some index key attributes are not defined in AttributeDefinitions. Keys: [test, title], AttributeDefinitions: [title, year]",
  "code": "ValidationException",
  "time": "2021-01-28T05:33:33.723Z",
  "requestId": "H4S1BQ5LB4G46S594UTBK4QMVRVVASDASSFGFGF4KQNSO5AEMVJF66Q9ASUAAJG",
  "statusCode": 400,
  "retryable": false,
  "retryDelay": 4.143072370771728
}

当我更改主键属性的名称时出了什么问题?

完整参数

var params = {
    TableName : "iam",
    KeySchema: [       
        { AttributeName: "test", KeyType: "HASH"},  //Partition key
        { AttributeName: "title", KeyType: "RANGE" }  //Sort key
    ],
    AttributeDefinitions: [       
        { AttributeName: "year", AttributeType: "N" },
        { AttributeName: "title", AttributeType: "S" }
    ],
    ProvisionedThroughput: {       
        ReadCapacityUnits: 10, 
        WriteCapacityUnits: 10
    }
};

问题是由于您的 KeySchema 不匹配 AttributeDefinitions.

KeySchema 中你有 test,而在你的 AttributeDefinitions 中你有 year。这显然会导致您的问题,因为您不能拥有不属于 KeySchemaAttributeDefinitions,也不属于本地或全球二级指数架构的一部分。