エラーと原因
- エラーメッセージ
[ERROR] ClientError: An error occurred (ValidationException) when calling the DeleteItem operation: The provided key element does not match the schema
- 原因
DynamoDB.Table()
クラスの delete_item()
メソッドの Key
引数にプライマリキー以外のキーを指定していた
- 関連するドキュメント
A map of attribute names to AttributeValue objects, representing the primary key of the item to delete.
For the primary key, you must provide all of the attributes. For example, with a simple primary key, you only need to provide a value for the partition key. For a composite primary key, you must provide values for both the partition key and the sort key.
例
プライマリキーと削除したい項目
- プライマリキー
パーティションキー | ソートキー |
---|---|
year | title |
- 削除したい項目
{
"year": {
"N": "2000"
},
"title": {
"S": "sample movie"
}
"director": {
"S": "sample director"
}
}
コード例
うまくいかないコード
lambda_function.py
import json
import boto3
import decimal
dynamodb = boto3.resource('dynamodb')
def delete_movie(item):
"""
項目削除メソッド
"""
table = dynamodb.Table('sample-table')
table.delete_item(
Key={
'year': decimal.Decimal(item['year']),
'title': item['title'],
'director': item['director']
}
)
def lambda_handler(event, context):
item = {
'year': event['year'],
'title': event['title'],
'director': event['director']
}
delete_movie(item)
うまくいくコード
lambda_function.py
import json
import boto3
import decimal
dynamodb = boto3.resource('dynamodb')
def delete_movie(item):
"""
項目削除メソッド
"""
table = dynamodb.Table('sample-table')
# Key にはパーティションキーとソートキーのみ指定する
table.delete_item(
Key={
'year': decimal.Decimal(item['year']),
'title': item['title']
}
)
def lambda_handler(event, context):
item = {
'year': event['year'],
'title': event['title'],
'director': event['director']
}
delete_movie(item)
参考記事