1

AWSで新しく、Lambda経由でDynamoDBのアイテム属性を更新しようとしています。私はNode.JSとPythonでコードを試してみましたが、両方の試みが返されます:コンポジットの主キーを使用すると、AWS Lambdaが「指定されたキー要素がスキーマと一致しません」を返すのはなぜですか?

module initialization error: An error occurred (ValidationException) when calling the UpdateItem operation: The provided key element does not match the schema

なぜこれは起こりますか?ここに私のテーブルの情報です:

  • テーブル名: High_Holiday_Auctions
  • プライマリパーティション・キー: Aliyah_ID(String)を
  • 次ソートキー:

HighestBidder(文字列)だから私は私のコードでは、パーティションキーとソートキーの両方を使用しているので、私はエラーの原因を把握することはできません

ラムダは、Pythonでしようとします。

from __future__ import print_function # Python 2/3 compatibility 
      import boto3 
    import json 
    import decimal 

    # Helper class to convert a DynamoDB item to JSON. 
    class DecimalEncoder(json.JSONEncoder): 
     def default(self, o): 
      if isinstance(o, decimal.Decimal): 
       if o % 1 > 0: 
        return float(o) 
       else: 
        return int(o) 
      return super(DecimalEncoder, self).default(o) 

    dynamodb = boto3.resource('dynamodb', region_name='us-east-1') 

      table = dynamodb.Table('High_Holiday_Auctions') 

      AliyahID = "YK_MaftirHaftarah" 
      HighestBidder = "unclaimed" 

      response = table.update_item(
       Key={ 
        'AliyahID': AliyahID, 
        'HighestBidder': HighestBidder 
       }, 
       UpdateExpression="set HighestBidder = :h, CurrentHighBid =:c,        
    LastHighestBidder=:l", 
       ExpressionAttributeValues={ 
        ':h': "Harry S Truman", 
        ':c': "100", 
        ':l': "unclaimed" 
       }, 
       ReturnValues="UPDATED_NEW" 
      ) 

      print("UpdateItem succeeded:") 
      print(json.dumps(response, indent=4, cls=DecimalEncoder)) 

ラムダは、Node.jsのにしようとします。かなり私の問題に答えていません

const AWS = require('aws-sdk'); 
    const docClient = new AWS.DynamoDB.DocumentClient({region: 'us-east-1'}); 

    exports.handler = function index(event, context, callback) { 
     var table = 'High_Holiday_Auctions'; 
     var AliyahID = "YK_MaftirHaftarah"; 
     var HighestBidder ="unclaimed" 

      //updaate item unconditinoally 
     var params ={ 
      TableName:table, 
      Key:{ 
       "AliyahID": AliyahID, 
      "HighestBidder": HighestBidder 
      }, 
      UpdateExpression: "set HighestBidder =:h, CurrentHighBid =:c, LastHighestBidder=:l", 
      ExpressionAttributeValues:{ 
       ":h":"George Burdell", 
       ":c": "1000", 
       ":l": "moe syslak" 
      }, 

       ReturnValues:"UPDATED_NEW" 
    }; 

    console.log("Updating the item..."); 
    docClient.update(params, function(err, data) { 
     if (err) { 
      console.error("Unable to update item. Error JSON:", JSON.stringify(err, null, 2)); 
     } else { 
      console.log("UpdateItem succeeded:", JSON.stringify(data, null, 2)); 
     } 
    }); 
    }; 

同様に、既存の質問:

答えて

1

あなたのテーブルに複合主キーを使用しない限り、更新するアイテムを取得するためにKey分野で唯一のプライマリパーティション・キーを使用する必要があります。

私の推測では、そのアイテムを更新しようとしているテーブルが単純な主キーで構成されていると思います。

+0

ありがとう!私は新しいエラーを持っていますが、少なくともこれは解決されています – JokerG

関連する問題