Amazon DynamoDB에서 TransactWriteItems API 호출이 실패하는 이유는 무엇인가요?

최종 업데이트 날짜: 2022년 9월 7일

TransactWriteItems API 호출이 실패했는데 문제의 근본 원인을 알고 싶습니다.

해결 방법

TransactWriteItems 요청이 Amazon DynamoDB에서 실패하거나 거부되는 데에는 여러 가지 이유가 있습니다.

조건 표현식 중 하나의 조건이 충족되지 않음

TransactWriteItems 요청에서 작업 중 하나에 대해 설정한 조건이 충족되지 않으면 모든 작업이 실패합니다. TransactWriteItems는 최대 25개의 작업 요청을 그룹화하는 동기식 쓰기 작업입니다. 따라서 모든 작업 요청이 성공하거나 모든 작업 요청이 실패합니다.

이 문제가 발생하면 다음과 유사한 오류 메시지가 표시됩니다.

"message": "Transaction cancelled, please refer cancellation reasons for specific reasons [ConditionalCheckFailed, None, None, None] (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: TransactionCanceledException;..."

이 문제를 해결하려면 요청에 대해 설정한 모든 조건을 충족하는지 확인하세요.

TransactWriteItems 요청의 테이블이 다른 리전 또는 계정에 있습니다.

TransactWriteItems 요청을 통해 서로 다른 테이블의 항목에 대해 작업을 수행할 수 있습니다. 하지만 다른 리전 또는 계정에 있는 테이블에 대해서는 작업을 수행할 수 없습니다. TransactWriteItems 요청을 수행하는 계정과 동일한 리전에 있는 테이블로 작업하고 있는지 확인합니다.

TransactWriteItems 작업에서 둘 이상의 작업이 동일한 항목을 처리합니다.

TransactWriteItems 작업에서 둘 이상의 작업이 동일한 항목을 처리하는 경우 요청이 실패하고 다음과 유사한 메시지가 표시됩니다.

“트랜잭션 요청에는 한 항목에 대해 여러 작업이 포함될 수 없습니다.”

따라서 TransactWriteItems가 동일한 항목에 대해 ConditionCheckPut 작업을 실행하려고 하는 등의 경우에는 요청이 실패합니다. Amazon CloudWatch에서 DynamoDB 테이블에 대한 TransactionConflict 지표를 사용하여 이 TransactionConflict 예외를 모니터링할 수 있습니다.

프로비저닝된 용량이 부족하여 트랜잭션을 완료할 수 없음

다른 작업과 마찬가지로 TransactWriteItems 작업을 호출할 때 DynamoDB 테이블도 병목 현상이 발생할 수 있습니다. 이 문제를 해결하는 방법에 대한 자세한 내용은 온디맨드 Amazon DynamoDB 테이블이 제한되는 이유는 무엇인가요?Amazon DynamoDB 테이블이 제한되는 이유는 무엇입니까?를 참조하세요.

ValidationError 발생

항목 크기가 400KB보다 커지거나 로컬 보조 인덱스 (LSI)가 너무 커지면 ValidationErrror가 발생합니다. 마찬가지로 트랜잭션의 변경 사항으로 인해 검증 오류가 발생할 수 있습니다. 이는 입력이 DynamoDB 서비스에서 지정한 하나 이상의 제약 조건을 충족하지 못함을 의미합니다. 충족하지 않은 제약 조건에 따라 다음 메시지 중 하나가 검증 오류와 함께 표시됩니다.

  • 하나 이상의 파라미터 값이 잘못되었습니다.
  • 업데이트 표현식이 허용된 크기 제한을 초과하여 보조 인덱스 키를 업데이트하려고 시도합니다.
  • 업데이트 표현식이 보조 인덱스 키를 지원되지 않는 유형으로 업데이트하려고 시도합니다.
  • 업데이트 표현식의 피연산자에 잘못된 데이터 유형이 있습니다.
  • 업데이트할 항목이 허용되는 최대 크기를 초과했습니다.
  • 지원되는 범위보다 크기가 큰 숫자 또는 숫자 오버플로를 저장하려고 합니다.
  • 업데이트할 속성의 유형이 일치하지 않습니다.
  • 중첩 수준이 지원되는 한도를 초과했습니다.
  • 업데이트 표현식에 제공된 문서 경로가 업데이트에 유효하지 않습니다.
  • 제공된 표현식이 항목에 없는 속성을 참조합니다.

DynamoDB는 테이블에 저장할 수 있는 각 항목의 크기를 제한합니다. 애플리케이션이 크기 제한에서 허용하는 것보다 많은 데이터를 항목에 저장해야 하는 경우 크기가 이 한도보다 큰 속성을 하나 이상 압축하세요. 또는 항목을 정렬 키로 인덱싱된 여러 항목으로 나눌 수 있습니다. 또한 Amazon Simple Storage Service(S3)에 항목을 객체로 저장할 수 있습니다. 그런 다음 Amazon S3 객체 식별자를 DynamoDB 항목에 저장합니다. 자세한 내용은 Best practices for storing large items and attributes(큰 항목 및 속성 저장에 대한 모범 사례)를 참조하세요.

트랜잭션에서 항목의 총 크기가 4MB를 초과합니다.

TransactWriteItems 작업은 4MB를 초과할 수 없습니다. 이는 엄격한 제한입니다. 자세한 내용은 DynamoDB 트랜잭션을 참조하세요.

사용자 오류 발생

잘못된 데이터 형식과 같은 사용자 오류는 여러 가지 이유로 발생할 수 있습니다. 예를 들어 TransactWriteItems 작업에서 기본 DynamoDB 테이블 또는 인덱스를 찾을 수 없기 때문에 ResourceNotFoundException로 인해 4xx 오류가 표시될 수 있습니다. 또는 DynamoDB 테이블이나 인덱스가 활성 상태가 아닐 수 있습니다.

참고: AWS SDK for Java를 사용하는 경우 DynamoDB는 CancellationReasons 속성에 취소 사유를 나열합니다. 다른 언어에 대해서는 이 속성이 설정되지 않습니다. 트랜잭션 취소 사유는 요청된 항목의 순서대로 나열됩니다. 항목에 오류가 없는 경우 NONE 코드와 null 메시지가 나열됩니다. 자세한 내용은 쓰기 TransactWriteItems를 참조하세요.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?