Lambda용 JavaScript 해석기 함수 참조 - AWS AppSync

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Lambda용 JavaScript 해석기 함수 참조

AWS Lambda용 AWS AppSync 함수를 사용하여 AWS AppSync에서 계정에 있는 Lambda 함수로 요청을 구성하고 Lambda 함수에서 AWS AppSync로 다시 응답을 구성할 수 있습니다. 요청 객체에서 수행할 작업 유형을 지정할 수도 있습니다. 이 단원에서는 지원되는 Lambda 작업에 대한 요청에 대해 설명합니다.

요청 객체

Lambda 요청 객체는 매우 단순한 편이며 가능한 많은 컨텍스트 정보를 Lambda 함수에 전달할 수 있습니다.

type LambdaRequest = { operation: 'Invoke' | 'BatchInvoke'; payload: any; };

다음은 field 값과 컨텍스트의 GraphQL 필드 인수를 전달하는 경우를 보여주는 예제입니다.

export function request(ctx) { return { operation: 'Invoke', payload: { field: 'getPost', arguments: ctx.args }, }; }

전체 매핑 문서는 Lambda 함수에 입력으로 전달되므로 앞의 예제는 이제 다음과 같습니다.

{ "version": "2018-05-29", "operation": "Invoke", "payload": { "field": "getPost", "arguments": { "id": "postId1" } } }

작업

Lambda 데이터 소스를 사용하면 두 가지 작업인 InvokeBatchInvoke를 정의할 수 있습니다. Invoke 작업을 통해 AWS AppSync에 모든 GraphQL 필드 해석기에 대해 Lambda 함수를 호출함을 알릴 수 있습니다. BatchInvoke는 AWS AppSync에 현재 GraphQL 필드에 대한 요청을 일괄 처리하도록 지시합니다.

operation은 필수입니다.

Invoke의 경우 해석된 요청은 Lambda 함수의 입력 페이로드와 정확히 일치합니다. 따라서 요청 핸들러 예시는 다음과 같습니다.

export function request(ctx) { return { operation: 'Invoke', payload: { field: 'getPost', arguments: ctx.args }, }; }

다음과 같이 해석되어 Lambda 함수로 전달됩니다.

{ "version": "2018-05-29", "operation": "Invoke", "payload": { "arguments": { "id": "postId1" } } }

BatchInvoke의 경우, 요청은 일괄 처리의 모든 필드 해석기에 적용됩니다. 간결성을 위해 AWS AppSync는 모든 요청 payload 값을 요청 객체와 일치하는 단일 객체 아래의 목록으로 병합합니다.

다음 예제 요청 핸들러는 병합을 보여줍니다.

export function request(ctx) { return { operation: 'Invoke', payload: ctx, }; }

이 요청은 평가되어 다음 매핑 문서로 해결됩니다.

{ "version": "2018-05-29", "operation": "BatchInvoke", "payload": [ {...}, // context for batch item 1 {...}, // context for batch item 2 {...} // context for batch item 3 ] }

여기서 payload 목록의 각 요소는 단일 배치 항목에 해당합니다. Lambda 함수는 다음과 같이 요청에 전송된 항목 순서에 맞게 목록 형태의 응답을 반환해야 합니다.

[ { "data": {...}, "errorMessage": null, "errorType": null }, // result for batch item 1 { "data": {...}, "errorMessage": null, "errorType": null }, // result for batch item 2 { "data": {...}, "errorMessage": null, "errorType": null } // result for batch item 3 ]

operation은 필수입니다.

Payload

payload 필드는 데이터를 Lambda 함수로 전달하는 데 사용할 수 있는 컨테이너입니다.

operation 필드가 BatchInvoke로 설정된 경우 AWS AppSync는 기존 payload 값을 목록으로 래핑합니다.

payload는 선택 사항입니다.

응답 객체

다른 데이터 소스와 마찬가지로, Lambda 함수는 GraphQL 유형으로 변환해야 하는 응답을 AWS AppSync에 전송합니다.

Lambda 함수의 결과는 context 결과 속성(context.result)에 설정됩니다.

Lambda 함수 응답의 모양이 GraphQL 유형의 모양과 정확히 일치하는 경우 다음 함수 응답 핸들러를 사용하여 응답을 전달할 수 있습니다.

export function response(ctx) { return ctx.result }

응답 객체에 적용되는 필수 필드 또는 모양 제한이 없습니다. 하지만 GraphQL은 강력한 형식이므로 해석된 응답이 필요한 GraphQL 유형과 일치해야 합니다.

Lambda 함수 일괄 처리 응답

operation 필드가 BatchInvoke로 설정된 경우 AWS AppSync는 다시 Lambda 함수의 항목 목록을 필요로 합니다. AWS AppSync에서 각 결과를 다시 원래 요청 항목으로 매핑하도록 하려면 응답 목록의 크기와 순서가 일치해야 합니다. 응답 목록에 null 항목이 있어도 괜찮습니다. ctx.result가 적절히 null로 설정됩니다.