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_NEW

GenreAwards도 없던 항목을 상대로 실행하면 이 명령은 다음을 출력합니다:

{
    "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 :updValue2Awards에 대한 원자적 증가이며, 전체 절 문법은 업데이트 표현식에 있습니다.

  • 숫자는 따옴표로 감싼 문자열이며, 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: Year

    252는 언제나 여러분 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을 다운로드하세요.

관련 가이드

참고 자료

위에 링크된 공식 AWS 문서를 기준으로 2026-07-28에 마지막으로 검증했습니다.

Console 없이 DynamoDB 작업하기

DynamoDB로는 실행할 수 없는 진짜 SQL(JOINs, GROUP BY, 집계)을 실행하는 빠른 DynamoDB 데스크톱 클라이언트. 시각적 편집과 여러분 자신의 Bedrock 키로 동작하는 AI 에이전트를 제공합니다.

30일 무료 체험, 신용카드 불필요 — 이후 기간 제한 없는 무료 요금제.