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
블록이 채워집니다. 요청 항목의 조건 검사에 실패한 동시에returnValuesOnConditionCheckFailure
를false
로 지정하지 않은 경우, 테이블에 있는 항목이 검색되고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 트랜잭션 자습서를 따라해 보세요.