AWS CLI를 사용한 DynamoDB 조건부 쓰기
조건부 쓰기는 put-item, update-item, 또는 delete-item에 --condition-expression을 붙입니다: DynamoDB는 현재 항목에 대해 이를 평가하고 조건이 참일 때만 쓰기를 적용합니다 — 원자적으로, 읽기-수정-쓰기 경합 없이. 이것이 DynamoDB의 낙관적 잠금 프리미티브입니다. 이 예제는 버전 검사로 업데이트를 가드합니다.
Code
aws dynamodb update-item \
--table-name 'Music' \
--key '{"Artist":{"S":"Arturo Sandoval"},"SongTitle":{"S":"Cubano Chant"}}' \
--update-expression 'SET #upd0 = :updValue0, #version = :newVersion' \
--condition-expression 'attribute_exists(#cond0) AND #version = :expectedVersion' \
--expression-attribute-names '{"#upd0":"Genre","#version":"Version","#cond0":"Artist"}' \
--expression-attribute-values '{":updValue0":{"S":"Latin Jazz"},":expectedVersion":{"N":"7"},":newVersion":{"N":"8"}}'성공하면 명령은 아무것도 출력하지 않고 0으로 종료합니다. 다른 라이터가 먼저 도달했다면 조건이 실패합니다:
An error occurred (ConditionalCheckFailedException) when calling the UpdateItem operation:
The conditional request failedExplanation
--condition-expression— 쓰기와 원자적으로 저장된 항목에 대해 검사됩니다. 사용 가능한 함수:attribute_exists,attribute_not_exists,attribute_type,contains,begins_with,size, 그리고 비교 연산자(=,<>,<,>,<=,>=,BETWEEN,IN)와AND/OR/NOT.- 두 가지 핵심 관용구:
- 업데이트에서의
attribute_exists(#key)= "업데이트만, 절대 생성 안 함". 이것이 없으면 없는 키에 대한update-item이 항목을 조용히 생성합니다(우발적 upsert 버그). - put에서의
attribute_not_exists(#key)= "생성만, 절대 덮어쓰기 안 함" — PutItem 페이지에 나와 있습니다.
- 업데이트에서의
- 낙관적 잠금 — 항목을 읽고(버전 7),
#version = :expectedVersion으로 쓰면서 8로 올립니다. 두 개의 동시 라이터가 모두 이길 수는 없습니다. 진 쪽은ConditionalCheckFailedException과 함께 0이 아닌 값으로 종료하고, 다시 읽고, 새 버전에서 재시도합니다. --return-values-on-condition-check-failure ALL_OLD— DynamoDB에 현재 항목을 실패에 첨부하도록 요청합니다(유효 값ALL_OLD|NONE, 읽기 용량 소비 없음). SDK는 그 항목을 예외에 노출하지만, CLI의 기본 오류 출력은 메시지만 출력하므로 스크립트는 보통 실패 후get-item으로 다시 읽습니다.- 실패한 조건부 쓰기도 여전히 쓰기 시도 비용을 청구합니다 — 조건을 무료 존재 확인 수단으로 사용하지 마세요.
Do it visually
조건 표현식은 DynamoDB Expression Builder가 만드는 바로 그것입니다 — 함수를 고르면 표현식 + 이름/값 맵을 바로 실행 가능한 CLI 명령으로 얻습니다.
셸 인용된 자리 표시자 대신 생성되고 검토 가능한 표현식으로 항목을 편집하려면 — DynoTable을 다운로드하세요.
Related examples
- DynamoDB conditional write in Node.js — AWS SDK v3를 사용한 동일한 낙관적 잠금.
- DynamoDB conditional write in Python — boto3를 사용한 동일한 낙관적 잠금.
- DynamoDB PutItem with the AWS CLI — 생성 전용
attribute_not_existsput. - DynamoDB condition expressions — 모든 함수와 패턴.
- Understanding ReturnValues — 각 반환 옵션이 제공하는 것.
- DynamoDB ConditionalCheckFailedException — 실패한 검사가 예상되는 경우, 그리고 이를 저렴하게 처리하는 방법.
References
- UpdateItem — Amazon DynamoDB API Reference
- update-item — AWS CLI Command Reference
- Condition expressions — Amazon DynamoDB Developer Guide
- DynamoDB read and write operations (capacity unit consumption) — Amazon DynamoDB Developer Guide
Last verified 2026-07-13 against the official AWS documentation linked above.