내용으로 건너뛰기

Amazon DynamoDB에서 TransactWriteItems API 호출이 실패하는 이유는 무엇입니까?

4분 분량
0

Amazon DynamoDB에서 TransactWriteItems API 호출이 실패합니다. 문제의 근본 원인을 알고 싶습니다.

해결 방법

TransactWriteItems API 요청은 여러 가지 이유로 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 요청은 여러 테이블에 있는 항목으로 작업할 수 있습니다. 하지만 요청을 보낸 동일한 AWS 리전 및 계정에 있는 테이블에서만 작업할 수 있습니다. 이 문제를 해결하려면 TransactWriteItems 요청을 보낸 AWS 계정과 동일한 AWS 리전에 있는 테이블만 사용하십시오.

동일한 항목이 TransactWriteItems 작업의 여러 작업에 의해 처리됨

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

"Transaction request cannot include multiple operations on one item"

예를 들어 TransactWriteItems가 동일한 항목에 대해 ConditionCheck 작업과 Put 작업을 모두 실행하려고 하면 TransactionConflictException이 발생하면서 요청이 실패합니다. Amazon CloudWatch에서 DynamoDB 테이블의 TransactionConflict 지표를 사용하여 이 예외를 모니터링할 수 있습니다.

동시 TransactWriteItems 요청 간의 충돌

여러 트랜잭션 내에서 한 항목에 대해 동시에 항목 수준 요청을 하면 트랜잭션 충돌이 발생합니다. 트랜잭션 충돌은 다음과 같은 이유로 발생할 수 있습니다.

  • 항목에 대한 PutItem, UpdateItem 또는 DeleteItem 요청이 동일한 항목을 포함하는 진행 중인 TransactWriteItems 요청과 충돌합니다.
  • TransactWriteItems 요청 내의 항목이 진행 중인 다른 TransactWriteItems 요청의 일부입니다.

이 이유로 인해 PutItem, UpdateItem 또는 DeleteItem 요청이 거부되면 TransactionConflictException과 함께 요청이 실패합니다. 그러나 TransactWriteItems 또는 TransactGetItems 내의 항목 수준 요청이 다른 이유로 거부된 경우 해당 요청은 TransactionCanceledException과 함께 실패합니다.

프로비저닝된 용량이 충분하지 않아 트랜잭션을 완료할 수 없음

프로비저닝된 용량이 충분하지 않을 때 TransactWriteItems 요청을 호출하면 DynamoDB 테이블이 스로틀링됩니다. 스로틀링에 대한 자세한 내용은 온디맨드 DynamoDB 테이블이 스로틀링되는 이유는 무엇입니까?Amazon DynamoDB 프로비저닝된 테이블에 스로틀링이 발생하는 이유는 무엇입니까?를 참조하십시오.

IdempotentParameterMismatch 예외로 인해 트랜잭션 실패

TransactWriteItems 요청에 선택적 클라이언트 토큰을 포함하여 요청이 멱등성인지 확인할 수 있습니다. 멱등성 트랜잭션은 연결 시간 초과 또는 기타 연결 문제로 인해 동일한 작업이 여러 번 제출될 때 애플리케이션 오류를 방지하는 데 도움이 될 수 있습니다.

클라이언트 토큰은 해당 토큰을 사용하는 요청이 완료된 후 10분 동안 유효합니다. 해당 토큰을 사용한 요청이 10분 이내에 반복되지만 트랜잭션 내의 일부 파라미터가 변경되는 경우 DynamoDB는 IdempotentParameterMismatch 예외를 반환합니다.

ValidationError 발생

항목의 크기가 400KB보다 커지거나 로컬 보조 인덱스(LSI)가 너무 커지면 ValidationError가 발생합니다. DynamoDB는 테이블에 저장할 수 있는 각 항목의 크기를 제한합니다. 애플리케이션이 크기 제한에서 허용하는 것보다 더 많은 데이터를 항목에 저장해야 하는 경우 하나 이상의 큰 속성을 압축하십시오. 또는 큰 항목을 정렬 키로 인덱싱된 여러 작은 항목으로 나눌 수도 있습니다. 항목을 Amazon Simple Storage Service(Amazon S3) 버킷에 객체로 저장할 수도 있습니다. 그런 다음 Amazon S3 객체 식별자를 DynamoDB 항목에 저장할 수 있습니다. 자세한 내용은 큰 항목 및 속성 저장에 대한 모범 사례를 참조하십시오.

트랜잭션으로 인한 변경으로 인해 유효성 검사 오류가 발생할 수도 있습니다. 이는 요청의 파라미터가 DynamoDB 서비스에서 지정한 하나 이상의 제약 조건을 충족하지 않음을 의미합니다. 제약 조건의 유형과 이에 관련된 오류 메시지에 대한 자세한 내용은 클래스 TransactionCanceledException에 대한 문서를 참조하십시오.

트랜잭션에 있는 항목의 총 크기가 4MB 초과

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

4xx 오류 발생

유효하지 않은 데이터 형식과 같은 사용자 오류는 여러 가지 이유로 발생할 수 있습니다. 예를 들어, TransactWriteItems 작업이 기본 DynamoDB 테이블 또는 인덱스를 찾을 수 없어 ResourceNotFoundException 오류로 인해 4xx 오류가 발생할 수 있습니다. 또는 DynamoDB 테이블 또는 인덱스가 ACTIVE 상태가 아닐 수도 있습니다.

참고: AWS SDK for Java를 사용하는 경우 DynamoDB는 CancellationReasons 속성에 취소 이유를 나열합니다. 이 속성은 다른 SDK 언어에는 설정되지 않습니다. 트랜잭션 취소 이유는 요청된 항목의 순서대로 나열됩니다.

5xx 오류 발생

5xx 오류로 기록되는 시스템 오류로 인해 트랜잭션이 실패할 수도 있습니다. 서비스가 요청을 처리할 수 없는 경우 이러한 오류가 발생합니다. 이러한 오류는 플릿의 일시적인 네트워크 문제, 인프라 문제, 스토리지 노드 관련 문제 등 다양한 이유로 발생할 수 있습니다. 자세한 내용은 Amazon DynamoDB의 내부 서버 오류 문제 해결을 참조하십시오.

관련 정보

일반적인 오류

TransactWriteItems API

AWS 공식업데이트됨 일 년 전