Open2

DynamoDB ClientError: ValidationException - Invalid ConditionExpression: Attribute name is a reserve

issyissy

問題の原因

DynamoDBのConditionExpressionでurlを使用した際に以下のエラーが発生した。

DynamoDB ClientError: ValidationException - Invalid ConditionExpression:
 Attribute name is a reserved keyword; reserved keyword: url

エラーの詳細

DynamoDBではurlが予約キーワードのため、ConditionExpressionで直接使用できません。

該当するLambda(Python)のコードはこちら。

table.put_item(Item=item, ConditionExpression="attribute_not_exists(url)")
issyissy

解決方法

ExpressionAttributeNamesを使用して予約語を回避する

DynamoDB予約語公式リスト:
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html
Expression Attribute Names(解決方法):
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ExpressionAttributeNames.html

# エラーが発生するコード
table.put_item(Item=item, ConditionExpression="attribute_not_exists(url)")

# 修正版
table.put_item(
    Item=item, 
    ConditionExpression="attribute_not_exists(#url)",
    ExpressionAttributeNames={
        "#url": "url"
    }
)