【问题标题】:Error creating table in local DynamoDB在本地 DynamoDB 中创建表时出错
【发布时间】:2017-04-27 12:55:33
【问题描述】:

我已经下载了 Amazon DynamoDB 的本地版本。我正在尝试使用 shell 创建一个表。当我从 shell 运行代码时,它给了我一个错误:

"message":"The security token included in the request is invalid."
"code":"UnrecognizedClientException"
"time":"2017-04-27T12:50:35.880Z"
"statusCode":400
"retryable":false

创建代码是:

var dynamodb = new AWS.DynamoDB();
var params = {
    "AttributeDefinitions": [
        {
            "AttributeName": "UserId",
            "AttributeType": "N"
        },
        {
            "AttributeName": "FirstName",
            "AttributeType": "S"
        },
        {
            "AttributeName": "LastName",
            "AttributeType": "S"
        },
        {
            "AttributeName": "CellPhoneNumber",
            "AttributeType": "N"
        }
    ],
    "TableName": "Users",
    "KeySchema": [
        {
            "AttributeName": "UserId",
            "KeyType": "HASH"
        },
        {
            "AttributeName": "CellPhoneNumber",
            "KeyType": "RANGE"
        }
    ],
    "LocalSecondaryIndexes": [
        {
            "IndexName": "UserIndex",
            "KeySchema": [
                {
                    "AttributeName": "UserId",
                    "KeyType": "HASH"
                },
                {
                    "AttributeName": "CellPhoneNumber",
                    "KeyType": "RANGE"
                }
            ],
            "Projection": {
                "ProjectionType": "KEYS_ONLY"
            }
        }
    ],
    "ProvisionedThroughput": {
        "ReadCapacityUnits": 5,
        "WriteCapacityUnits": 5
    }
}

dynamodb.createTable(params, function(err, data) {
    if (err) ppJson(err); // an error occurred
    else ppJson(data); // successful response

});

如何在本地 DynamoDB 中创建表?我需要先创建数据库吗?我问这个是因为我一直在研究 SQL,这是我第一次使用 NoSQL

【问题讨论】:

    标签: amazon-dynamodb dynamo-local nosql


    【解决方案1】:

    无需创建数据库。只需要创建表。

    对本地 dynamodb 使用以下配置。端点 URL 很重要。其他属性是虚拟值(即它可以是任何值)。

    var creds = new AWS.Credentials('akid', 'secret', 'session');
    
    AWS.config.update({
      region: "us-west-2",
      endpoint: "http://localhost:8000",
      credentials : creds
    });
    

    另外,创建表时无需定义所有属性。只需要定义关键属性。否则会报错。

    创建表的完整代码(应该在http://localhost:8000/shell/):-上执行

    var dynamodb = new AWS.DynamoDB({
        region: 'us-east-1',
        endpoint: "http://localhost:8000"
    });
    var tableName = "Movies";
    
    var params = {
        "AttributeDefinitions": [
            {
                "AttributeName": "UserId",
                "AttributeType": "N"
            },
            {
                "AttributeName": "CellPhoneNumber",
                "AttributeType": "N"
            }
        ],
        "TableName": "PBUsers",
        "KeySchema": [
            {
                "AttributeName": "UserId",
                "KeyType": "HASH"
            },
            {
                "AttributeName": "CellPhoneNumber",
                "KeyType": "RANGE"
            }
        ],
        "LocalSecondaryIndexes": [
            {
                "IndexName": "UserIndex",
                "KeySchema": [
                    {
                        "AttributeName": "UserId",
                        "KeyType": "HASH"
                    },
                    {
                        "AttributeName": "CellPhoneNumber",
                        "KeyType": "RANGE"
                    }
                ],
                "Projection": {
                    "ProjectionType": "KEYS_ONLY"
                }
            }
        ],
        "ProvisionedThroughput": {
            "ReadCapacityUnits": 5,
            "WriteCapacityUnits": 5
        }
    }
    
    dynamodb.createTable(params, function(err, data) {
        if (err) {
            if (err.code === "ResourceInUseException" && err.message === "Cannot create preexisting table") {
                console.log("message ====>" + err.message);
            } else {
                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));
        }
    }); 
    

    【讨论】:

    • 当我在 shell(localhost:8000/shell) 中执行上面的代码时,我得到这个错误:“ReferenceError: require is not defined”
    • 更新了脚本。
    【解决方案2】:
    var params = {
    TableName: 'student',
    KeySchema: [ 
        { 
            AttributeName: 'sid',
            KeyType: 'HASH',
        },
    ],
    AttributeDefinitions: [ 
        {
            AttributeName: 'sid',
            AttributeType: 'N', 
        },
    ],
    ProvisionedThroughput: { 
        ReadCapacityUnits: 10, 
        WriteCapacityUnits: 10, 
    },
    };
    dynamodb.createTable(params, function(err, data) {
        if (err) ppJson(err); // an error occurred
        else ppJson(data); // successful response
    
    });
    

    【讨论】:

      【解决方案3】:

      您还需要在本地安装 aws-amplify cli,然后才能创建本地 DynamoDB 表。

      npm install -g @aws-amplify/cli
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-18
        • 2016-04-08
        • 1970-01-01
        • 1970-01-01
        • 2021-07-24
        • 1970-01-01
        • 2022-08-22
        • 1970-01-01
        相关资源
        最近更新 更多