BatchPutItem - AWS AppSync

BatchPutItem

BatchPutItem 요청 객체를 사용하면 AWS AppSync DynamoDB 함수에 DynamoDB에 BatchWriteItem 요청을 하여 잠재적으로 여러 테이블에 걸쳐 여러 항목을 입력하도록 지시할 수 있습니다. 이 요청 객체에 대해 다음을 지정해야 합니다.

  • 항목을 저장할 테이블 이름

  • 각 테이블에 저장할 전체 항목

DynamoDB BatchWriteItem 한도가 적용되고 표현식 없음이 제공될 수 있습니다.

BatchPutItem 요청 객체는 다음과 같은 구조입니다.

type DynamoDBBatchPutItemRequest = { operation: 'BatchPutItem'; tables: { [tableName: string]: { [key: string]: any}[]; }; };

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

BatchPutItem 필드

operation

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

tables

항목을 넣을 DynamoDB 테이블입니다. 각 테이블 항목은 이 특정 테이블에 삽입할 DynamoDB 항목 목록을 나타냅니다. 테이블이 하나 이상 제공되어야 합니다. 이 값은 필수입니다.

기억해야 할 내용:

  • 성공하면, 완전히 삽입된 항목이 응답에서 반환됩니다.

  • 테이블에 항목이 삽입되지 못하면 해당 테이블의 데이터 블록에 null 요소가 표시됩니다.

  • 삽입된 항목은 요청 객체 내에 제공된 순서에 따라 테이블별로 정렬됩니다.

  • BatchPutItem 내부의 각 Put 명령은 원자성이지만 배치는 부분적으로 처리될 수 있습니다. 오류로 인해 배치가 부분적으로 처리된 경우 처리되지 않은 키는 unprocessedKeys 블록 내에 호출 결과의 일부로 반환됩니다.

  • BatchPutItem은 25개의 항목으로 제한됩니다.

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

다음은 함수 요청 핸들러 예시입니다.

import { util } from '@aws-appsync/utils'; export function request(ctx) { const { authorId, postId, name, title } = ctx.args; return { operation: 'BatchPutItem', tables: { authors: [util.dynamodb.toMapValues({ authorId, name })], posts: [util.dynamodb.toMapValues({ authorId, postId, title })], }, }; }

ctx.result에서 사용할 수 있는 호출 결과는 다음과 같습니다.

{ "data": { "authors": [ null ], "posts": [ // Was inserted { "authorId": "a1", "postId": "p2", "title": "title" } ] }, "unprocessedItems": { "authors": [ // This item was not processed due to an error { "authorId": "a1", "name": "a1_name" } ], "posts": [] } }

ctx.error에는 오류에 대한 세부 정보가 포함됩니다. 키 data, unprocessedItems 및 요청 객체에서 제공된 각 테이블 키는 호출 결과에 표시됩니다. 삽입된 항목은 데이터 블록에 나타납니다. 처리되지 않은 항목은 데이터 블록 내에서 null로 표시되고 unprocessedItems 블록 내에 배치됩니다.