TransactWriteItems - AWS AppSync

TransactWriteItems

TransactWriteItems 요청 매핑 문서를 사용하면 AWS AppSync DynamoDB 해석기에 DynamoDB에 TransactWriteItems 요청을 하여 잠재적으로 여러 테이블에 걸쳐 여러 항목을 쓰도록 지시할 수 있습니다. 이 요청 템플릿에 대해 다음을 지정해야 합니다.

  • 각 요청 항목의 대상 테이블 이름

  • 수행할 각 요청 항목의 작업입니다. 지원되는 작업에는 PutItem, UpdateItem, DeleteItem, ConditionCheck의 네 가지 유형이 있습니다.

  • 작성할 각 요청 항목의 키

DynamoDB TransactWriteItems 제한이 적용됩니다.

TransactWriteItems 매핑 문서의 구조는 다음과 같습니다.

{ "version": "2018-05-29", "operation": "TransactWriteItems", "transactItems": [ { "table": "table1", "operation": "PutItem", "key": { "foo": ... typed value, "bar": ... typed value }, "attributeValues": { "baz": ... typed value }, "condition": { "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": true|false } }, { "table":"table2", "operation": "UpdateItem", "key": { "foo": ... typed value, "bar": ... typed value }, "update": { "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value } }, "condition": { "expression": "someExpression", "expressionNames": { "#foo":"foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": true|false } }, { "table": "table3", "operation": "DeleteItem", "key":{ "foo": ... typed value, "bar": ... typed value }, "condition":{ "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": true|false } }, { "table": "table4", "operation": "ConditionCheck", "key":{ "foo": ... typed value, "bar": ... typed value }, "condition":{ "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": true|false } } ] }

TransactWriteItems 필드

필드는 다음과 같이 정의됩니다.
version

템플릿 정의 버전. 2018-05-29만 지원됩니다. 이 값은 필수입니다.

operation

수행할 DynamoDB 작업입니다. TransactWriteItems DynamoDB 작업을 수행하려면 이 값을 TransactWriteItems으로 설정해야 합니다. 이 값은 필수입니다.

transactItems

포함할 요청 항목입니다. 이 값은 요청 항목의 배열입니다. 하나 이상의 요청 항목이 제공되어야 합니다. 이 transactItems 값은 필수입니다.

PutItem의 필드는 다음과 같이 정의됩니다.

table

대상 DynamoDB 테이블입니다. 이 값은 테이블 이름의 문자열입니다. 이 table 값은 필수입니다.

operation

수행할 DynamoDB 작업입니다. PutItem DynamoDB 작업을 수행하려면 이 값을 PutItem으로 설정해야 합니다. 이 값은 필수입니다.

key

입력할 항목의 프라이머리 키를 나타내는 DynamoDB 키입니다. DynamoDB 항목은 테이블 구조에 따라 단일 해시 키 또는 해시 키와 정렬 키를 가질 수 있습니다. '입력된 값'을 지정하는 방법에 대한 자세한 내용은 유형 시스템(요청 매핑)을 참조하세요. 이 값은 필수입니다.

attributeValues

DynamoDB에 저장할 항목의 나머지 속성. '입력된 값'을 지정하는 방법에 대한 자세한 내용은 유형 시스템(요청 매핑)을 참조하세요. 이 필드는 선택 사항입니다.

condition

DynamoDB에 이미 있는 객체의 상태를 기반으로 요청의 성공 여부를 결정하는 조건. 조건을 지정하지 않으면 PutItem 요청이 해당 항목에 대한 기존 입력을 덮어씁니다. 조건 검사에 실패할 경우 기존 항목을 다시 가져올지 여부를 지정할 수 있습니다. 트랜잭션 조건에 대한 자세한 내용은 트랜잭션 조건 표현식을 참조하세요. 이 값은 선택 사항입니다.

UpdateItem의 필드는 다음과 같이 정의됩니다.

table

업데이트할 DynamoDB 테이블입니다. 이 값은 테이블 이름의 문자열입니다. 이 table 값은 필수입니다.

operation

수행할 DynamoDB 작업입니다. UpdateItem DynamoDB 작업을 수행하려면 이 값을 UpdateItem으로 설정해야 합니다. 이 값은 필수입니다.

key

업데이트할 항목의 프라이머리 키를 나타내는 DynamoDB 키입니다. DynamoDB 항목은 테이블 구조에 따라 단일 해시 키 또는 해시 키와 정렬 키를 가질 수 있습니다. '입력된 값'을 지정하는 방법에 대한 자세한 내용은 유형 시스템(요청 매핑)을 참조하세요. 이 값은 필수입니다.

update

update 섹션에서는 DynamoDB의 항목 업데이트 방법을 설명하는 업데이트 표현식을 지정합니다. 업데이트 표현식을 작성하는 방법에 대한 자세한 내용은 DynamoDB UpdateExpressions 문서를 참조하십시오. 이 섹션은 필수입니다.

condition

DynamoDB에 이미 있는 객체의 상태를 기반으로 요청의 성공 여부를 결정하는 조건. 조건을 지정하지 않으면 UpdateItem 요청이 현재 상태와 상관 없이 기존 항목을 업데이트합니다. 조건 검사에 실패할 경우 기존 항목을 다시 가져올지 여부를 지정할 수 있습니다. 트랜잭션 조건에 대한 자세한 내용은 트랜잭션 조건 표현식을 참조하세요. 이 값은 선택 사항입니다.

DeleteItem의 필드는 다음과 같이 정의됩니다.

table

항목을 삭제할 DynamoDB 테이블입니다. 이 값은 테이블 이름의 문자열입니다. 이 table 값은 필수입니다.

operation

수행할 DynamoDB 작업입니다. DeleteItem DynamoDB 작업을 수행하려면 이 값을 DeleteItem으로 설정해야 합니다. 이 값은 필수입니다.

key

삭제할 항목의 프라이머리 키를 나타내는 DynamoDB 키입니다. DynamoDB 항목은 테이블 구조에 따라 단일 해시 키 또는 해시 키와 정렬 키를 가질 수 있습니다. '입력된 값'을 지정하는 방법에 대한 자세한 내용은 유형 시스템(요청 매핑)을 참조하세요. 이 값은 필수입니다.

condition

DynamoDB에 이미 있는 객체의 상태를 기반으로 요청의 성공 여부를 결정하는 조건. 조건을 지정하지 않으면 DeleteItem 요청이 현재 상태와 상관 없이 항목을 삭제합니다. 조건 검사에 실패할 경우 기존 항목을 다시 가져올지 여부를 지정할 수 있습니다. 트랜잭션 조건에 대한 자세한 내용은 트랜잭션 조건 표현식을 참조하세요. 이 값은 선택 사항입니다.

ConditionCheck의 필드는 다음과 같이 정의됩니다.

table

조건을 검사할 DynamoDB 테이블입니다. 이 값은 테이블 이름의 문자열입니다. 이 table 값은 필수입니다.

operation

수행할 DynamoDB 작업입니다. ConditionCheck DynamoDB 작업을 수행하려면 이 값을 ConditionCheck으로 설정해야 합니다. 이 값은 필수입니다.

key

조건을 확인할 항목의 프라이머리 키를 나타내는 DynamoDB 키입니다. DynamoDB 항목은 테이블 구조에 따라 단일 해시 키 또는 해시 키와 정렬 키를 가질 수 있습니다. '입력된 값'을 지정하는 방법에 대한 자세한 내용은 유형 시스템(요청 매핑)을 참조하세요. 이 값은 필수입니다.

condition

DynamoDB에 이미 있는 객체의 상태를 기반으로 요청의 성공 여부를 결정하는 조건. 조건 검사에 실패할 경우 기존 항목을 다시 가져올지 여부를 지정할 수 있습니다. 트랜잭션 조건에 대한 자세한 내용은 트랜잭션 조건 표현식을 참조하세요. 이 값은 필수입니다.

기억해야 할 내용:

  • 성공할 경우 요청 항목의 키만 응답에 반환됩니다. 키 순서는 요청 항목의 순서와 동일합니다.

  • 트랜잭션은 전부 또는 전무 방식으로 수행됩니다. 요청 항목에 오류가 발생하면 전체 트랜잭션이 수행되지 않고 오류 세부 정보가 반환됩니다.

  • 두 개의 요청 항목이 동일한 항목을 대상으로 할 수 없습니다. 그렇지 않으면 TransactionCanceledException 오류가 발생합니다.

  • 트랜잭션의 오류가 TransactionCanceledException인 경우 cancellationReasons 블록이 채워집니다. 요청 항목의 조건 검사에 실패한 동시에 returnValuesOnConditionCheckFailurefalse로 지정하지 않은 경우, 테이블에 있는 항목이 검색되고 item에서 cancellationReasons 블록의 해당 위치에 저장됩니다.

  • TransactWriteItems는 100개의 요청 항목으로 제한됩니다.

  • 충돌 감지와 함께 사용할 때 이 작업은 지원되지 않습니다. 두 가지를 동시에 사용하면 오류가 발생할 수 있습니다.

다음과 같은 요청 매핑 템플릿 예제가 있습니다.

{ "version": "2018-05-29", "operation": "TransactWriteItems", "transactItems": [ { "table": "posts", "operation": "PutItem", "key": { "post_id": { "S": "p1" } }, "attributeValues": { "post_title": { "S": "New title" }, "post_description": { "S": "New description" } }, "condition": { "expression": "post_title = :post_title", "expressionValues": { ":post_title": { "S": "Expected old title" } } } }, { "table":"authors", "operation": "UpdateItem", "key": { "author_id": { "S": "a1" }, }, "update": { "expression": "SET author_name = :author_name", "expressionValues": { ":author_name": { "S": "New name" } } }, } ] }

트랜잭션이 성공하면 $ctx.result에서 사용할 수 있는 호출 결과는 다음과 같습니다.

{ "keys": [ // Key of the PutItem request { "post_id": "p1", }, // Key of the UpdateItem request { "author_id": "a1" } ], "cancellationReasons": null }

PutItem 요청의 조건 검사 실패로 인해 트랜잭션이 실패할 경우 $ctx.result에서 사용할 수 있는 간접 호출 결과는 다음과 같습니다.

{ "keys": null, "cancellationReasons": [ { "item": { "post_id": "p1", "post_title": "Actual old title", "post_description": "Old description" }, "type": "ConditionCheckFailed", "message": "The condition check failed." }, { "type": "None", "message": "None" } ] }

$ctx.error에는 오류에 대한 세부 정보가 포함됩니다. cancellationReasons 키는 $ctx.result에 있습니다.

보다 완벽한 예제를 찾아보려면 자습서: DynamoDB 트랜잭션 해석기에서 AppSync 관련 DynamoDB 트랜잭션 자습서를 따라해 보세요.