AWS CLI를 사용한 DynamoDB UpdateItem
인자 다섯 개, 그중 셋은 DynamoDB JSON, 그리고 전부가 여러분의 셸과 싸웁니다. aws dynamodb update-item을 성가시게 만드는 것은 업데이트 자체가 아니라 이것입니다. CLI가 다른 모든 클라이언트 위에 더하는 것은 요청이 거부될 수 있는 두 번째 지점, 그리고 그중 어느 쪽이었는지 알려줄 만큼 정밀한 종료 코드 집합입니다.
코드
aws dynamodb update-item \
--table-name 'Music' \
--key '{"Artist":{"S":"Arturo Sandoval"},"SongTitle":{"S":"Cubano Chant"}}' \
--update-expression 'SET #upd0 = :updValue0, #upd1 = :updValue1 ADD #upd2 :updValue2' \
--expression-attribute-names '{"#upd0":"Genre","#upd1":"Year","#upd2":"Awards"}' \
--expression-attribute-values '{":updValue0":{"S":"Latin Jazz"},":updValue1":{"N":"1994"},":updValue2":{"N":"1"}}' \
--return-values ALL_NEWGenre도 Awards도 없던 항목을 상대로 실행하면 이 명령은 다음을 출력합니다:
{
"Attributes": {
"Artist": {
"S": "Arturo Sandoval"
},
"Awards": {
"N": "1"
},
"Genre": {
"S": "Latin Jazz"
},
"Year": {
"N": "1994"
},
"SongTitle": {
"S": "Cubano Chant"
}
}
}없던 Awards에 대한 ADD는 0에서 시작했고, 속성은 표현식이 쓴 순서가 아니라 서비스의 순서로 돌아왔습니다. 이것을 위치에 의존하는 무언가로 파이프하지 마세요.
설명
--key— DynamoDB JSON으로 표현한 전체 기본 키입니다. 복합 키 테이블에 파티션 키만 전달하면 부분 일치가 아니라ValidationException: The number of conditions on the keys is invalid를 받습니다.--update-expression—--expression-attribute-names로 별칭 처리된SET,ADD,REMOVE,DELETE절입니다. 여기서ADD #upd2 :updValue2는Awards에 대한 원자적 증가이며, 전체 절 문법은 업데이트 표현식에 있습니다.숫자는 따옴표로 감싼 문자열이며, DynamoDB보다 CLI가 먼저 검사합니다.
{"N":"1994"}대신{"N":1994}라고 쓰면 아무것도 여러분의 컴퓨터를 떠나지 않습니다:aws: [ERROR]: An error occurred (ParamValidation): Parameter validation failed: Invalid type for parameter ExpressionAttributeValues.:y.N, value: 1994, type: <class 'int'>, valid types: <class 'str'>종료 코드가 어느 쪽이 실패했는지 알려줍니다. 그 클라이언트 측 거부는 252로 종료합니다. DynamoDB가 실제로 응답하고 거절한 요청은 254로 종료합니다:
aws: [ERROR]: An error occurred (ValidationException) when calling the UpdateItem operation: Invalid UpdateExpression: Attribute name is a reserved keyword; reserved keyword: Year252는 언제나 여러분 JSON의 버그입니다. 254는 일부러 실패하기를 기대한 조건일 수 있으므로, 스크립트는 0이 아님이 아니라 이 둘로 분기해야 합니다.
--return-values가 없으면 명령은 아무것도 출력하지 않고 0으로 종료합니다. grep할 "1 item updated" 같은 줄이 없으니 침묵이 곧 성공입니다.UPDATED_NEW는 표현식이 건드린 속성만 반환하며, 새 카운터 값만 필요할 때의 저렴한 선택지입니다.한 번만 따옴표 처리하고, 그다음엔 파일을 쓰세요. 셸이
"와$를 건드리지 않도록 각 JSON 인자를 작은따옴표로 감싸고, 긴 것은 두 번 이스케이프하기보다--expression-attribute-values file://values.json으로 옮기세요.업서트 동작 —
update-item은 키가 없으면 항목을 생성하며, 위에서Awards가 나타난 방식이 그것입니다. 업데이트 전용으로 만들려면--condition-expression "attribute_exists(Artist)"를 추가하세요.
여기서 표현식을 대신 만들어 주는 것은 없습니다
이 사이트에 문서화된 다섯 클라이언트 중 UpdateExpression을 생성해 주는 것은 정확히 하나, Go SDK의 expression 패키지입니다. Node, Python, Java는 모두 문자열을 여러분이 쓰라고 넘깁니다. CLI는 그 넷 중 최악입니다. 별칭 맵 둘과 DynamoDB JSON까지 손으로 쓰는 데다, 그것을 같은 문자들을 해석하려 드는 셸 안에서 해야 하기 때문입니다.
DynamoDB Expression Builder가 그 간극을 메웁니다. 브라우저에서 절을 조립하고, 따옴표까지 갖춘 aws dynamodb update-item 명령을 복사하세요. 작은따옴표 하나 이스케이프하지 않고 실제 테이블에 같은 편집을 하려면, DynoTable을 다운로드하세요.
관련 가이드
- DynamoDB 업데이트 표현식 —
SET,ADD,REMOVE,DELETE와 관용 패턴. - ReturnValues 이해하기 — 각
--return-values옵션이 무엇을 주는지. - "Attribute name is a reserved keyword" — 여기서 별칭 맵이 선택 사항이 아닌 이유.
- "Invalid UpdateExpression" 문법 오류 — 흔한 SET/ADD 문법 실수 해독하기.
참고 자료
- UpdateItem — Amazon DynamoDB API Reference
- update-item — AWS CLI Command Reference
- Update expressions — Amazon DynamoDB Developer Guide
위에 링크된 공식 AWS 문서를 기준으로 2026-07-28에 마지막으로 검증했습니다.