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 failed

Explanation

  • --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을 다운로드하세요.

References

Last verified 2026-07-13 against the official AWS documentation linked above.

Console 없이 DynamoDB 작업하기

DynoTable은 DynamoDB를 위한 빠른 데스크톱 클라이언트입니다 — 테이블을 탐색하고, SQL 스타일 쿼리를 실행하고, 항목을 로컬에서 편집하세요.