1. ホーム
  2. amazon-web-services

[解決済み】DynamoDB - キー要素がスキーマと一致しない

2022-02-04 23:45:33

質問

Dynamodbのテーブル「Users+」のItemを更新しようとしています。様々な方法を試しましたが、いつも同じエラーメッセージが表示されます。

提供されたキーエレメントはスキーマにマッチしません。

アイテムの作成は、クエリーと同様に機能しますが、更新はできません。DynamoDBで確認すると、ユーザはちゃんと作成されています。

{
  "email": "[email protected]",
  "password": "123",
  "registration": 1460136902241,
  "verified": false
}

以下はテーブル情報です。 :

  • テーブル名 : ユーザー
  • プライマリー・パーティション・キー : 電子メール (文字列)
  • 主ソートキー 登録(番号)

以下はそのコードです(lambdaから呼び出されます)。

exports.handler = function(event, context)
{
    var AWS = require("aws-sdk");


    var docClient = new AWS.DynamoDB.DocumentClient();

    var params = {
        TableName: "Users",
        Item:{
            email: "[email protected]",
            password: "123",
            verified: false,
            registration: (new Date()).getTime(),
        }
    };

    // Create the user.

    docClient.put(params, function(err, data)
    {
        if (err)
        {
            context.fail("Put failed...");
            return;
        }

        var params = {
            TableName: "Users",
            Key: { email : "[email protected]" },
            AttributeUpdates: {
                verified: {
                    Action: "PUT",
                    Value: true
                }
            }
        };

        // Update the user.
        docClient.update(params, function(err, data)
        {
            if (err)
            {
                console.log(JSON.stringify(err));
                context.fail(JSON.stringify(err));
                return;
            }
            context.succeed("User successfully updated.");
        });


    });

};

私のコードの何が問題なのか、何か心当たりはありませんか?

解決方法を教えてください。

主キーの半分しか提供されていません。プライマリーキーはパーティションキーとレンジキーの組み合わせです。レンジ・キーは Key 属性を更新パラメータに追加します。