

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

# Lambda용AWS AppSync JavaScript 해석기 함수 참조
<a name="resolver-reference-lambda-js"></a>

 AWS AppSync 함수 및 해석기를 사용하여 계정에 있는 Lambda 함수를 호출할 수 있습니다. 클라이언트에 반환하기 전에 요청 페이로드와 Lambda 함수의 응답을 구성할 수 있습니다. 요청 객체에서 수행할 작업 유형을 지정할 수도 있습니다. 이 단원에서는 지원되는 Lambda 작업에 대한 요청에 대해 설명합니다.

## 요청 객체
<a name="request-object-js"></a>

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",
      }
    }
  }
}
```

### 연산
<a name="operation-js"></a>

Lambda 데이터 소스를 사용하면 `operation` 필드에서 `Invoke` 및 `BatchInvoke`의 두 가지 작업을 정의할 수 있습니다. `Invoke` 작업을 통해 AWS AppSync는 모든 GraphQL 필드 해석기에 대해 Lambda 함수를 호출하도록 알 수 있습니다.는 현재 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`의 경우 배치의 모든 필드 해석기에 요청이 적용됩니다. 간결성을 위해 AWS AppSync는 모든 요청 `payload` 값을 요청 객체와 일치하는 단일 객체 아래의 목록에 병합합니다. 다음 예제 요청 핸들러는 병합을 보여줍니다.

```
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
<a name="payload-js"></a>

`payload` 필드는 데이터를 Lambda 함수로 전달하는 데 사용되는 컨테이너입니다. `operation` 필드가 `BatchInvoke`로 설정된 경우 AWS AppSync는 기존 `payload` 값을 목록으로 래핑합니다. `payload` 필드는 선택 사항입니다.

### 간접 호출 유형
<a name="async-invocation-type-js"></a>

Lambda 데이터 소스를 사용하면 `RequestResponse` 및 `Event`의 두 가지 간접 호출 유형을 정의할 수 있습니다. 간접 호출 유형은 [Lambda API](https://docs.aws.amazon.com//lambda/latest/api/API_Invoke.html)에 정의된 호출 유형과 동의어입니다. `RequestResponse` 호출 유형은 AWS AppSync가 Lambda 함수를 동기적으로 호출하여 응답을 기다리도록 합니다. `Event` 간접 호출을 사용하면 Lambda 함수를 비동기적으로 간접 호출할 수 있습니다. Lambda가 `Event` 간접 호출 유형 요청을 처리하는 방법에 대한 자세한 내용은 [비동기식 간접 호출](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html)을 참조하세요. `invocationType` 필드는 선택 사항입니다. 이 필드가 요청에 포함되지 않은 경우 AWS AppSync는 기본적으로 `RequestResponse` 호출 유형으로 설정됩니다.

`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
  }
}
```

캐시 적중이 발생하면 Lambda로 전송되지 않으므로 `Event` 간접 호출 유형 해석기에 대한 해석기 캐싱을 비활성화하는 것이 좋습니다.

## 응답 객체
<a name="response-object-js"></a>

다른 데이터 소스와 마찬가지로 Lambda 함수는 GraphQL 유형으로 변환해야 하는 응답을 AWS AppSync에 전송합니다. Lambda 함수의 결과는 `context` 결과 속성(`context.result`)에 포함됩니다.

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

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

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

## Lambda 함수 일괄 처리 응답
<a name="aws-appsync-resolver-reference-lambda-batched-response-js"></a>

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