AWS CLI를 사용한 DynamoDB TransactWriteItems
aws dynamodb transact-write-items는 최대 100개 쓰기를 하나의 전부 아니면 전무 연산으로 묶습니다 — 모든 액션이 커밋되거나, 하나도 커밋되지 않습니다. 액션은 Put, Update, Delete, ConditionCheck를 섞은 JSON 배열로, 각각 선택적 조건과 함께 --transact-items에 들어갑니다.
Code
aws dynamodb transact-write-items \
--transact-items '[
{
"Update": {
"TableName": "Music",
"Key": {"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}},
"UpdateExpression": "SET #upd0 = #upd0 - :one",
"ConditionExpression": "#upd0 >= :one",
"ExpressionAttributeNames": {"#upd0": "Awards"},
"ExpressionAttributeValues": {":one": {"N": "1"}}
}
},
{
"Update": {
"TableName": "Music",
"Key": {"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "A Mis Abuelos"}},
"UpdateExpression": "SET #upd0 = if_not_exists(#upd0, :zero) + :one",
"ExpressionAttributeNames": {"#upd0": "Awards"},
"ExpressionAttributeValues": {":one": {"N": "1"}, ":zero": {"N": "0"}}
}
}
]'성공하면 명령은 아무것도 출력하지 않고 0으로 종료합니다. 조건이 하나라도 실패하면 트랜잭션 전체가 취소됩니다:
An error occurred (TransactionCanceledException) when calling the TransactWriteItems
operation: Transaction cancelled, please refer cancellation reasons for specific
reasons [ConditionalCheckFailed, None]Explanation
--transact-items— 최대 100개의Put/Update/Delete/ConditionCheck액션, 합계 4 MB, 값은 DynamoDB JSON입니다. 액션은 여러 테이블에 걸칠 수 있지만(동일 계정 + 리전), 두 액션이 동일한 항목을 대상으로 할 수 없습니다 — 그것만으로도 트랜잭션이 취소됩니다.- 취소 사유는 오류 메시지에 액션 순서대로 실려 옵니다 — 코드에는
ConditionalCheckFailed,TransactionConflict(다른 트랜잭션이 진행 중에 항목을 건드림 — 재실행해도 안전),ProvisionedThroughputExceeded,ValidationError가 포함되며,None은 무고한 액션을 표시합니다. 여기서는 첫 번째 업데이트의 조건(Awards >= 1)이 실패했고, 두 번째 액션은 괜찮았습니다. ConditionCheck— 트랜잭션이 수정하지 않는 항목에 조건을 단언하고, 실패하면 트랜잭션 전체를 거부합니다.--client-request-token— 재실행을 10분 동안 멱등적으로 만들려면 고정된 토큰을 전달하세요. 타임아웃 후 정확한 명령을 재실행해도 쓰기를 두 번 적용할 수 없게 됩니다.- 비용 — 트랜잭션 쓰기는 일반 쓰기의 약 2배 WCU를 청구합니다(준비 + 커밋). 단일 항목에 대한 원자성에는 조건부 쓰기가 더 저렴한 도구입니다.
- 팁: 액션 배열을 파일에 두고
--transact-items file://transaction.json으로 전달하세요.
Do it visually
각 액션 안의 조건 및 업데이트 표현식이 까다로운 부분입니다 — DynamoDB Expression Builder가 이름/값 맵과 함께 이를 조립하고 바로 실행 가능한 명령을 복사해 줍니다.
GUI에서 항목을 편집하고 생성된 표현식을 검토하려면 — DynoTable을 다운로드하세요.
Related examples
- DynamoDB TransactWriteItems in Node.js — AWS SDK v3를 사용한 동일한 트랜잭션.
- DynamoDB TransactWriteItems in Python — boto3를 사용한 동일한 트랜잭션.
- DynamoDB BatchWriteItem with the AWS CLI — 원자성이 필요 없을 때의 대량 쓰기.
- DynamoDB transactions — 격리, 멱등성, 그리고 트랜잭션이 그만한 가치가 있는 경우.
- DynamoDB TransactionCanceledException — 모든 취소 사유 코드를 풀어서 설명.
- "Too many actions in a TransactWriteItems call" — 100개 액션 및 4 MB 트랜잭션 한도.
- "Transaction request cannot include multiple operations on one item" — 트랜잭션당 항목당 하나의 액션.
References
- TransactWriteItems — Amazon DynamoDB API Reference
- transact-write-items — AWS CLI Command Reference
- Amazon DynamoDB transactions: how it works — 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.