기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS AppSync JavaScript Lambda에 대한 해석기 함수 참조
AWS AppSync 함수와 해석기를 사용하여 계정에 있는 Lambda 함수를 호출할 수 있습니다. Lambda 함수의 요청 페이로드와 응답을 구성한 후 클라이언트에 반환할 수 있습니다. 요청 객체에서 수행할 작업 유형을 지정할 수도 있습니다. 이 단원에서는 지원되는 Lambda 작업에 대한 요청에 대해 설명합니다.
요청 객체
Lambda 요청 객체는 Lambda 함수와 관련된 필드를 처리합니다.
export type LambdaRequest = { operation: 'Invoke' | 'BatchInvoke'; invocationType?: 'RequestResponse' | 'Event'; payload: unknown; };
다음은 컨텍스트의 인수와 함께 GraphQL 스키마의 getPost
필드가 되는 페이로드 데이터가 있는 invoke
작업을 사용하는 예제입니다.
export function request(ctx) { return { operation: 'Invoke', payload: { field: 'getPost', arguments: ctx.args }, }; }
이전 예제가 이제 다음과 같이 보이도록 전체 매핑 문서가 Lambda 함수에 입력으로 전달됩니다.
{ "operation": "Invoke", "payload": { "field": "getPost", "arguments": { "input": { "id": "postId1", } } } }
Operation
Lambda 데이터 소스를 사용하면 operation
필드에서 Invoke
및 의 두 가지 작업을 정의할 수 있습니다BatchInvoke
. Invoke
작업을 통해 모든 GraphQL 필드 해석기에 대해 Lambda 함수를 호출하도록 AWS AppSync 알 수 있습니다. 는 현재 GraphQL 필드에 대한 AWS AppSync 일괄 요청을 BatchInvoke
지시합니다. operation
필드는 필수 사항입니다.
Invoke
의 경우 확인된 요청은 Lambda 함수의 입력 페이로드와 일치합니다. 위의 예를 수정해 보겠습니다.
export function request(ctx) { return { operation: 'Invoke', payload: { field: 'getPost', arguments: ctx.args }, }; }
이 문제는 해결되어 Lambda 함수로 전달되며 다음과 같을 수 있습니다.
{ "operation": "Invoke", "payload": { "arguments": { "id": "postId1" } } }
BatchInvoke
의 경우 요청은 배치의 모든 필드 해석기에 적용됩니다. 간결성을 위해 는 모든 요청 payload
값을 요청 객체와 일치하는 단일 객체 아래의 목록으로 AWS AppSync 병합합니다. 다음 예제 요청 핸들러는 병합을 보여줍니다.
export function request(ctx) { return { operation: 'Invoke', payload: ctx, }; }
이 요청은 평가되어 다음 매핑 문서로 해결됩니다.
{ "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 ]
페이로드
payload
필드는 Lambda 함수에 데이터를 전달하는 데 사용되는 컨테이너입니다. operation
필드가 로 설정된 경우 는 기존 payload
값을 목록으로 BatchInvoke
AWS AppSync 래핑합니다. payload
필드는 선택 사항입니다.
호출 유형
Lambda 데이터 소스를 사용하면 RequestResponse
및 의 두 가지 호출 유형을 정의할 수 있습니다Event
. 호출 유형은 Lambda API에 정의된 호출 유형과 동의어입니다. RequestResponse
호출 유형을 사용하면 Lambda 함수를 동기적으로 AWS AppSync 호출하여 응답을 기다릴 수 있습니다. Event
호출을 사용하면 Lambda 함수를 비동기적으로 호출할 수 있습니다. Lambda가 Event
호출 유형 요청을 처리하는 방법에 대한 자세한 내용은 비동기 호출을 참조하세요. invocationType
필드는 선택 사항입니다. 이 필드가 요청에 포함되지 않은 경우 RequestResponse
기본적으로 호출 유형이 AWS AppSync 됩니다.
모든 invocationType
필드에 대해 확인된 요청은 Lambda 함수의 입력 페이로드와 일치합니다. 위의 예를 수정해 보겠습니다.
export function request(ctx) { return { operation: 'Invoke', invocationType: 'Event', payload: { field: 'getPost', arguments: ctx.args }, }; }
이 문제는 해결되어 Lambda 함수로 전달되며 다음과 같을 수 있습니다.
{ "operation": "Invoke", "invocationType": "Event", "payload": { "arguments": { "id": "postId1" } } }
Event
호출 유형 필드와 함께 BatchInvoke
작업을 사용하는 경우 는 위에서 언급한 것과 동일한 방식으로 필드 해석기를 AWS AppSync 병합하고 요청은 값 payload
목록이 인 비동기 이벤트로 Lambda 함수로 전달됩니다. Event
호출 유형 요청의 응답은 응답 핸들러가 없는 null
값을 생성합니다.
{ "data": { "field": null } }
Event
호출 유형 해석기에 대한 해석기 캐싱은 캐시 적중이 발생한 경우 Lambda로 전송되지 않으므로 비활성화하는 것이 좋습니다.
응답 객체
다른 데이터 소스와 마찬가지로 Lambda 함수는 GraphQL 유형으로 변환해야 AWS AppSync 하는 응답을 에 전송합니다. Lambda 함수의 결과는 context
결과 속성()에 포함됩니다context.result
.
Lambda 함수 응답의 모양이 GraphQL 유형의 모양과 일치하는 경우 다음 함수 응답 핸들러를 사용하여 응답을 전달할 수 있습니다.
export function response(ctx) { return ctx.result }
응답 객체에 적용되는 필수 필드 또는 모양 제한이 없습니다. 하지만 GraphQL은 강력한 형식이므로 해석된 응답이 필요한 GraphQL 유형과 일치해야 합니다.
Lambda 함수 일괄 처리 응답
operation
필드가 AWS AppSync로 설정된 경우 는 Lambda 함수에서 항목 목록을 다시 BatchInvoke
예상합니다. 각 결과를 원래 요청 항목에 다시 AWS AppSync 매핑하려면 응답 목록이 크기와 순서로 일치해야 합니다. 응답 목록에 null
항목이 있는 것은 유효하며, ctx.result
는 그에 따라 null로 설정됩니다.