

# Lambda 확장 API를 사용하여 확장 생성
<a name="runtimes-extensions-api"></a>

Lambda 함수 작성자는 익스텐션을 사용하여 모니터링, 관찰, 보안 및 거버넌스를 위해 선호하는 도구와 Lambda를 통합합니다. 함수 작성자는 AWS, [AWS 파트너](extensions-api-partners.md) 및 오픈 소스 프로젝트의 익스텐션을 사용할 수 있습니다. 익스텐션 사용에 대한 자세한 내용은 AWS Lambda 컴퓨팅 블로그의 [AWS 익스텐션 소개](https://aws.amazon.com/blogs/aws/getting-started-with-using-your-favorite-operational-tools-on-aws-lambda-extensions-are-now-generally-available/)를 참조하세요. 이 섹션에서는 Lambda 확장 API, Lambda 실행 환경 수명 주기 및 Lambda 확장 API 참조를 사용하는 방법을 설명합니다.

![\[\]](http://docs.aws.amazon.com/ko_kr/lambda/latest/dg/images/telemetry-api-concept-diagram.png)


익스텐션 작성자는 Lambda 익스텐션 API를 사용하여 Lambda [실행 환경](lambda-runtime-environment.md)과 완전히 통합할 수 있습니다. 익스텐션은 함수 및 실행 환경 수명 주기 이벤트에 등록할 수 있습니다. 이러한 이벤트에 대한 응답으로 새 프로세스를 시작하고, 논리를 실행하고, Lambda 수명 주기의 모든 단계(초기화, 호출 및 종료)를 관리하고 참여할 수 있습니다. 또한 [런타임 로그 API](runtimes-logs-api.md)를 사용하여 로그 스트림을 수신할 수 있습니다.

익스텐션은 실행 환경에서 독립 프로세스로 실행되며 함수 호출이 완전히 처리된 후에도 계속 실행됩니다. 익스텐션은 프로세스로 실행되므로 함수와 다른 언어로 작성할 수 있습니다. 컴파일된 언어를 사용하여 익스텐션을 구현하는 것이 좋습니다. 이 경우 익스텐션은 지원되는 런타임과 호환되는 독립형 바이너리입니다. 모든 [Lambda 런타임](lambda-runtimes.md)은 익스텐션을 지원합니다. 컴파일되지 않은 언어를 사용하는 경우 호환되는 런타임을 익스텐션에 포함해야 합니다.

Lambda는 *내부 익스텐션*도 지원합니다. 내부 익스텐션은 런타임 프로세스에서 별도의 스레드로 실행됩니다. 런타임은 내부 익스텐션을 시작하고 중지합니다. Lambda 환경과 통합하는 다른 방법은 언어별 [환경 변수 및 래퍼 스크립트](runtimes-modify.md)를 사용하는 것입니다. 이 방법을 통해 런타임 환경을 구성하고 런타임 프로세스의 시작 동작을 수정할 수 있습니다.

두 가지 방법으로 익스텐션을 함수에 추가할 수 있습니다. [.zip 파일 아카이브](configuration-function-zip.md)로 배포된 함수의 경우 익스텐션을 [계층](chapter-layers.md)으로 배포합니다. 컨테이너 이미지로 정의된 함수의 경우 [익스텐션](extensions-configuration.md#invocation-extensions-images)을 컨테이너 이미지에 추가합니다.

**참고**  
예제 익스텐션 및 래퍼 스크립트에 대해서는 AWS Lambda 샘플 GitHub 리포지토리에서 [AWS 익스텐션](https://github.com/aws-samples/aws-lambda-extensions)을 참조하세요.

**Topics**
+ [Lambda 실행 환경 수명 주기](#runtimes-extensions-api-lifecycle)
+ [익스텐션 API 참조](#runtimes-extensions-registration-api)

## Lambda 실행 환경 수명 주기
<a name="runtimes-extensions-api-lifecycle"></a>

실행 환경의 수명 주기에는 다음 단계가 포함됩니다.
+ `Init`: 이 단계 중에 Lambda는 구성된 리소스로 실행 환경을 만들거나 고정 해제하고, 함수와 모든 계층의 코드를 다운로드하고, 모든 익스텐션을 초기화하고, 런타임을 초기화한 다음 함수의 초기화 코드(기본 핸들러 외부의 코드)를 실행합니다. `Init` 단계는 첫 번째 호출 중에 발생하거나, [프로비저닝된 동시성](provisioned-concurrency.md)을 사용하도록 설정한 경우 함수 호출 전에 발생합니다.

  `Init` 단계는 세 가지 하위 단계(`Extension init`, `Runtime init`, `Function init`.)로 나뉩니다. 이러한 하위 단계는 함수 코드가 실행되기 전에 모든 익스텐션과 런타임이 자신의 설정 작업을 완료하도록 보장합니다.
+ `Invoke`: 이 단계에서 Lambda는 함수 핸들러를 간접 호출합니다. 함수의 실행이 완료한 후 Lambda는 다른 함수 호출을 처리할 준비를 합니다.
+ `Shutdown`: Lambda 함수가 일정 기간 동안 호출을 받지 않으면 이 단계가 트리거됩니다. `Shutdown` 단계에서 Lambda는 런타임을 종료하고 익스텐션이 완전히 중지되도록 알림을 보낸 다음 환경을 제거합니다. Lambda는 각 익스텐션에 `Shutdown` 이벤트를 보냅니다. 이 이벤트는 환경이 곧 종료됨을 익스텐션에 알립니다.

각 단계는 Lambda에서 런타임 및 등록된 모든 익스텐션에 전송하는 이벤트로 시작됩니다. 런타임 및 각 익스텐션이 `Next` API 요청을 전송하여 완료 신호를 보냅니다. 각 프로세스가 완료되고 대기 중인 이벤트가 없으면 Lambda는 실행 환경을 중지합니다.

![\[\]](http://docs.aws.amazon.com/ko_kr/lambda/latest/dg/images/Overview-Full-Sequence.png)


 

**Topics**
+ [초기화 단계](#runtimes-extensions-api-reg)
+ [간접 호출 단계](#runtimes-lifecycle-extensions-invoke)
+ [종료 단계](#runtimes-lifecycle-extensions-shutdown)
+ [권한 및 구성](#runtimes-extensions-registration-api-e)
+ [장애 처리](#runtimes-extensions-api-failure)
+ [익스텐션 문제 해결](#runtimes-extensions-api-trbl)

### 초기화 단계
<a name="runtimes-extensions-api-reg"></a>

`Extension init` 단계 중에 이벤트를 수신하려면 각 익스텐션은 Lambda에 등록해야 합니다. Lambda는 익스텐션의 전체 파일 이름을 사용하여 익스텐션이 부트스트랩 시퀀스를 완료했는지 확인합니다. 따라서 각 `Register` API 호출에는 익스텐션의 전체 파일 이름이 있는 `Lambda-Extension-Name` 헤더를 포함해야 합니다.

각 함수에 최대 10개의 익스텐션을 등록할 수 있습니다. 이 제한은 `Register` API 호출을 통해 적용됩니다.

각 익스텐션이 등록되면 Lambda는 `Runtime init` 단계를 시작합니다. 런타임 프로세스는 `functionInit`를 호출하여 `Function init` 단계를 시작합니다.

`Init` 단계는 런타임 및 등록된 각 익스텐션이 `Next` API 요청을 전송하여 완료를 나타낸 후에 완료됩니다.

**참고**  
익스텐션은 `Init` 단계의 어느 지점에서나 초기화를 완료할 수 있습니다.

![\[\]](http://docs.aws.amazon.com/ko_kr/lambda/latest/dg/images/Init-Phase.png)


### 간접 호출 단계
<a name="runtimes-lifecycle-extensions-invoke"></a>

`Next` API 요청에 대한 응답으로 Lambda 함수가 간접 호출되면 Lambda는 런타임과 `Invoke` 이벤트에 등록된 각 익스텐션에 `Invoke` 이벤트를 전송합니다.

**참고**  
**Lambda 관리형 인스턴스:** Lambda 관리형 인스턴스 함수의 확장은 `Invoke` 이벤트에 등록할 수 없습니다. Lambda 관리형 인스턴스는 단일 실행 환경 내에서 동시 간접 호출을 지원하므로 `Invoke` 이벤트는 지원되지 않습니다. 확장은 `Shutdown` 이벤트에만 등록할 수 있습니다. 간접 호출 시작 및 완료 시기를 추적해야 하는 경우 [텔레메트리 API](telemetry-api.md)를 통해 `platform.report` 플랫폼 이벤트를 사용합니다.

호출하는 동안 외부 익스텐션은 함수와 동시에 실행됩니다. 또한 함수가 완료된 후에도 외부 익스텐션이 계속 실행됩니다. 따라서 진단 정보를 캡처하거나 로그, 지표 및 추적 정보를 선택한 위치로 보낼 수 있습니다.

런타임에서 함수 응답을 수신한 후 Lambda는 익스텐션이 여전히 실행 중이더라도 클라이언트에 대한 응답을 반환합니다.

`Invoke` 단계는 런타임 및 모든 익스텐션이 `Next` API 요청을 전송하여 완료되었음을 알린 후에 종료됩니다.

![\[\]](http://docs.aws.amazon.com/ko_kr/lambda/latest/dg/images/Invoke-Phase.png)


**이벤트 페이로드**: 런타임(및 Lambda 함수)으로 전송되는 이벤트에는 전체 요청, 헤더(예: `RequestId`) 및 페이로드가 포함됩니다. 각 익스텐션으로 전송되는 이벤트에는 이벤트 내용을 설명하는 메타데이터가 포함됩니다. 이 수명 주기 이벤트에는 이벤트 유형, 함수가 시간 초과되는 시간(`deadlineMs`), `requestId`, 간접 호출된 함수의 Amazon 리소스 이름(ARN) 및 추적 헤더가 포함됩니다.

함수 이벤트 본문에 액세스하려는 익스텐션은 익스텐션과 통신하는 런타임 내 SDK를 사용할 수 있습니다. 함수 개발자는 런타임 내 SDK를 사용하여 함수가 간접 호출될 때 익스텐션에 페이로드를 전송합니다.

다음은 페이로드의 예입니다.

```
{
    "eventType": "INVOKE",
    "deadlineMs": 676051,
    "requestId": "3da1f2dc-3222-475e-9205-e2e6c6318895",
    "invokedFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:ExtensionTest",
    "tracing": {
        "type": "X-Amzn-Trace-Id",
        "value": "Root=1-5f35ae12-0c0fec141ab77a00bc047aa2;Parent=2be948a625588e32;Sampled=1"
    }
 }
```

**기간 제한**: 함수의 제한 시간 설정은 전체 `Invoke` 단계의 기간을 제한합니다. 예를 들어 함수 제한 시간을 360초로 설정하면 함수와 모든 익스텐션이 360초 내에 완료되어야 합니다. 독립적인 간접 호출 후 단계는 없습니다. 기간은 런타임 및 모든 확장의 호출이 완료되는 데 걸리는 총 시간이며 함수와 모든 확장의 실행이 완료될 때까지 계산되지 않습니다.

**성능 영향 및 익스텐션 오버헤드**: 익스텐션은 함수 성능에 영향을 줄 수 있습니다. 익스텐션 작성자는 익스텐션이 성능에 미치는 영향을 제어할 수 있습니다. 예를 들어 익스텐션이 컴퓨팅 집약적 작업을 수행하는 경우 함수 소요 시간이 늘어납니다. 익스텐션과 함수 코드가 동일한 CPU 리소스를 공유하기 때문입니다. 또한 함수 호출이 완료된 후 익스텐션에서 대규모 연산을 수행하는 경우 모든 익스텐션이 완료되었음을 알릴 때까지 `Invoke` 단계가 계속되므로 함수 소요 시간이 늘어납니다.

**참고**  
Lambda는 함수의 메모리 설정에 비례하여 CPU 용량을 할당합니다. 함수 및 익스텐션 프로세스가 동일한 CPU 리소스를 놓고 경쟁하기 때문에 낮은 메모리 설정에서 실행 및 초기화 기간이 늘어날 수 있습니다. 실행 및 초기화 기간을 줄이려면 메모리 설정을 늘려보세요.

`Invoke` 단계에서 익스텐션에 의한 성능 영향을 식별할 수 있도록 Lambda는 `PostRuntimeExtensionsDuration` 지표를 출력합니다. 이 지표는 런타임 `Next` API 요청과 마지막 익스텐션 `Next` API 요청 사이의 누적 시간을 측정합니다. 사용된 메모리 증가를 측정하려면 `MaxMemoryUsed` 지표를 사용합니다. 함수 지표에 대한 자세한 내용은 [Lambda에서 CloudWatch 지표 사용](monitoring-metrics.md) 섹션을 참조하세요.

함수 개발자는 다양한 버전의 함수를 나란히 실행하여 특정 익스텐션의 영향을 파악할 수 있습니다. 익스텐션 작성자는 함수 개발자가 적합한 익스텐션을 쉽게 선택할 수 있도록 예상되는 리소스 소비를 게시하는 것이 좋습니다.

### 종료 단계
<a name="runtimes-lifecycle-extensions-shutdown"></a>

Lambda는 런타임을 종료하려고 할 때 `Shutdown`을 등록된 각 외부 익스텐션에 전송합니다. 익스텐션은 이 시간 동안 최종 정리 작업을 수행할 수 있습니다. `Shutdown` 이벤트는 `Next` API 요청에 대한 응답으로 전송됩니다.

**기간 제한**: `Shutdown` 단계의 최대 기간은 등록된 익스텐션 구성에 따라 다릅니다.
+ 0밀리초 - 등록된 익스텐션이 없는 함수
+ 500밀리초 - 등록된 내부 익스텐션이 하나 있는 함수
+ 2,000밀리초 - 등록된 외부 익스텐션이 하나 이상 있는 함수

런타임 또는 익스텐션이 제한 시간 내에 `Shutdown` 이벤트에 응답하지 않는 경우 Lambda는 `SIGKILL` 신호를 사용하여 프로세스를 종료합니다.

![\[\]](http://docs.aws.amazon.com/ko_kr/lambda/latest/dg/images/Shutdown-Phase.png)


**이벤트 페이로드**: `Shutdown` 이벤트에는 종료 이유와 남은 시간(밀리초)이 포함됩니다.

 `shutdownReason`에는 다음과 같은 값이 포함됩니다.
+ SPINDOWN - 정상 종료
+ TIMEOUT - 기간 제한 초과
+ FAILURE - 오류 상태(예: `out-of-memory` 이벤트)

```
{ 
  "eventType": "SHUTDOWN", 
  "shutdownReason": "reason for shutdown", 
  "deadlineMs": "the time and date that the function times out in Unix time milliseconds" 
}
```

### 권한 및 구성
<a name="runtimes-extensions-registration-api-e"></a>

익스텐션은 Lambda 함수와 동일한 실행 환경에서 실행됩니다. 익스텐션은 CPU, 메모리, `/tmp` 디스크 스토리지와 같은 리소스를 함수와 공유합니다. 또한 익스텐션은 함수와 동일한 AWS Identity and Access Management(IAM) 역할 및 보안 컨텍스트를 사용합니다.

**파일 시스템 및 네트워크 액세스 권한**: 익스텐션은 함수 런타임과 동일한 파일 시스템 및 네트워크 이름 네임스페이스에서 실행됩니다. 따라서 익스텐션은 해당 운영 체제와 호환되어야 합니다. 익스텐션에 추가 아웃바운드 네트워크 트래픽 규칙이 필요한 경우 이러한 규칙을 함수 구성에 적용해야 합니다.

**참고**  
함수 코드 디렉터리는 읽기 전용이므로 익스텐션에서 함수 코드를 수정할 수 없습니다.

**환경 변수**: 익스텐션은 런타임 프로세스와 관련된 다음 변수를 제외하고 함수의 [환경 변수](configuration-envvars.md)에 액세스할 수 있습니다.
+ `AWS_EXECUTION_ENV`
+ `AWS_LAMBDA_LOG_GROUP_NAME`
+ `AWS_LAMBDA_LOG_STREAM_NAME`
+ `AWS_XRAY_CONTEXT_MISSING`
+ `AWS_XRAY_DAEMON_ADDRESS`
+ `LAMBDA_RUNTIME_DIR`
+ `LAMBDA_TASK_ROOT`
+ `_AWS_XRAY_DAEMON_ADDRESS`
+ `_AWS_XRAY_DAEMON_PORT`
+ `_HANDLER`

**참고**  
**Lambda 관리형 인스턴스 감지:** 확장은 `AWS_LAMBDA_INITIALIZATION_TYPE` 환경 변수를 확인하여 Lambda 관리형 인스턴스 또는 Lambda(기본값) 함수에서 실행 중인지 여부를 확인할 수 있습니다. 확장이 실행 환경 유형에 따라 동작을 조정하는 데 권장되는 방법입니다.

### 장애 처리
<a name="runtimes-extensions-api-failure"></a>

**초기화 오류**: 익스텐션에 오류가 발생하면 Lambda는 실행 환경을 다시 시작하여 일관된 동작을 적용하고 익스텐션에 대해 빠른 실패(fast fail)를 장려합니다. 또한 일부 고객의 경우 익스텐션이 로깅, 보안, 거버넌스 및 텔레메트리 수집과 같은 미션 크리티컬한 요구 사항을 충족해야 합니다.

**간접 호출 오류**(예: 메모리 부족, 함수 시간 초과): 익스텐션은 런타임과 리소스를 공유하므로 메모리 부족의 영향을 받습니다. 런타임에 오류가 발생하면 모든 익스텐션과 런타임 자체가 `Shutdown` 단계에 참여합니다. 또한 런타임은 현재 호출의 일부로 자동으로 다시 시작되거나 지연된 재초기화 메커니즘을 통해 다시 시작됩니다.

함수 시간 초과 또는 런타임 오류와 같은 오류가 발생하면 `Invoke` 시 Lambda 서비스가 재설정을 수행합니다. 재설정은 `Shutdown` 이벤트처럼 동작합니다. 먼저 Lambda는 런타임을 종료한 다음 등록된 각 외부 익스텐션에 `Shutdown` 이벤트를 전송합니다. 이벤트에는 종료 이유가 포함됩니다. 이 환경이 새 호출에 사용되는 경우 익스텐션 및 런타임은 다음 호출의 일부로 다시 초기화됩니다.

![\[실행 환경 예시: 초기화, 간접 호출, 오류가 있는 간접 호출, 간접 호출, 종료\]](http://docs.aws.amazon.com/ko_kr/lambda/latest/dg/images/Overview-Invoke-with-Error.png)


이전 다이어그램에 대한 자세한 설명은 [간접 호출 단계 중 실패](lambda-runtime-environment.md#runtimes-lifecycle-invoke-with-errors)을 참조하십시오.

**익스텐션 로그**: Lambda가 익스텐션의 로그 출력을 CloudWatch Logs에 보냅니다. Lambda는 `Init` 시 각 익스텐션에 대한 추가 로그 이벤트도 생성합니다. 로그 이벤트에는 성공 시 이름 및 등록 기본 설정(이벤트, 구성)과 실패 시 실패 이유가 기록됩니다.

### 익스텐션 문제 해결
<a name="runtimes-extensions-api-trbl"></a>
+ `Register` 요청이 실패할 경우 `Lambda-Extension-Name` API 호출의 `Register` 헤더에 익스텐션의 전체 파일 이름이 포함되어 있는지 확인합니다.
+ 내부 익스텐션에 대한 `Register` 요청이 실패할 경우 요청이 `Shutdown` 이벤트에 등록되지 않았는지 확인합니다.

## 익스텐션 API 참조
<a name="runtimes-extensions-registration-api"></a>

익스텐션 API 버전 **2020-01-01**에 대한 OpenAPI 사양은 [extensions-api.zip](samples/extensions-api.zip)에서 사용할 수 있습니다.

`AWS_LAMBDA_RUNTIME_API` 환경 변수에서 API 엔드포인트의 값을 검색할 수 있습니다. `Register` 요청을 보내려면 각 API 경로 앞에 접두사 `2020-01-01/`을 사용합니다. 예:

```
http://${AWS_LAMBDA_RUNTIME_API}/2020-01-01/extension/register 
```

**Topics**
+ [등록](#extensions-registration-api-a)
+ [다음](#extensions-api-next)
+ [초기화 오류](#runtimes-extensions-init-error)
+ [종료 오류](#runtimes-extensions-exit-error)

### 등록
<a name="extensions-registration-api-a"></a>

`Extension init` 중에 이벤트를 수신하려면 모든 익스텐션은 Lambda에 등록해야 합니다. Lambda는 익스텐션의 전체 파일 이름을 사용하여 익스텐션이 부트스트랩 시퀀스를 완료했는지 확인합니다. 따라서 각 `Register` API 호출에는 익스텐션의 전체 파일 이름이 있는 `Lambda-Extension-Name` 헤더를 포함해야 합니다.

내부 익스텐션은 런타임 프로세스에 의해 시작 및 중지되므로 `Shutdown` 이벤트에 등록할 수 없습니다.

**경로** – `/extension/register`

**메서드** – **POST**

**요청 헤더**
+ `Lambda-Extension-Name` - 익스텐션의 전체 파일 이름입니다. 필수 항목 여부: 예. 유형: 문자열.
+ `Lambda-Extension-Accept-Feature` - 이 옵션을 사용하여 등록 시 선택적 확장 기능을 지정할 수 있습니다. 필수 항목 여부: 아니요 유형: 쉼표로 구분된 문자열입니다. 이 설정을 사용하여 지정할 수 있는 기능은 다음과 같습니다.
  + `accountId` - 지정된 경우 확장 등록 응답에는 확장을 등록하려는 Lambda 함수와 연결된 계정 ID가 포함됩니다.

**요청 본문 파라미터**
+ `events` - 등록할 이벤트의 배열입니다. 필수 항목 여부: 아니요 유형: 문자열 배열 유효한 문자열: `INVOKE`, `SHUTDOWN`.
**참고**  
**Lambda 관리형 인스턴스:** Lambda 관리형 인스턴스 함수의 확장은 `SHUTDOWN` 이벤트에만 등록할 수 있습니다. `INVOKE` 이벤트에 등록하려고 하면 오류가 발생합니다. Lambda 관리형 인스턴스는 단일 실행 환경 내에서 동시 간접 호출을 지원하기 때문입니다.

**응답 헤더**
+ `Lambda-Extension-Identifier` - 모든 후속 요청에 필요한, 생성된 고유 에이전트 식별자(UUID 문자열)입니다.

**응답 코드**
+ 200 - 응답 본문에는 함수 이름, 함수 버전 및 핸들러 이름이 포함됩니다.
+ 400 - 잘못된 요청
+ 403 - 금지됨
+ 500 - 컨테이너 오류. 복구 불능 상태입니다. 익스텐션을 즉시 종료해야 합니다.

**Example 요청 본문의 예**  

```
{
    'events': [ 'INVOKE', 'SHUTDOWN']
}
```

**Example 응답 본문의 예**  

```
{
    "functionName": "helloWorld",
    "functionVersion": "$LATEST",
    "handler": "lambda_function.lambda_handler"
}
```

**Example 선택적 accountId 기능이 포함된 응답 본문의 예**  

```
{
    "functionName": "helloWorld",
    "functionVersion": "$LATEST",
    "handler": "lambda_function.lambda_handler",
    "accountId": "123456789012"
}
```

### 다음
<a name="extensions-api-next"></a>

익스텐션은 `Next` API 요청을 전송하여 다음 이벤트(`Invoke` 이벤트 또는 `Shutdown` 이벤트가 될 수 있음)를 수신합니다. 응답 본문에는 이벤트 데이터가 포함된 JSON 문서인 페이로드가 포함되어 있습니다.

익스텐션은 `Next` API 요청을 전송하여 새 이벤트를 수신할 준비가 되었음을 알립니다. 이는 차단 호출입니다.

반환할 이벤트가 발생할 때까지 일정 기간 동안 익스텐션이 일시 중단될 수 있으므로 GET 호출에 시간 제한을 설정하지 마세요.

**경로** – `/extension/event/next`

**매서드** – **GET**

**요청 헤더**
+ `Lambda-Extension-Identifier` - 익스텐션의 고유 식별자(UUID 문자열). 필수 항목 여부: 예. 유형: UUID 문자열.

**응답 헤더**
+ `Lambda-Extension-Event-Identifier` - 이벤트의 고유 식별자(UUID 문자열)입니다.

**응답 코드**
+ 200 - 응답에는 다음 이벤트(`EventInvoke` 또는 `EventShutdown`)에 대한 정보가 포함됩니다.
+ 403 - 금지됨
+ 500 - 컨테이너 오류. 복구 불능 상태입니다. 익스텐션을 즉시 종료해야 합니다.

### 초기화 오류
<a name="runtimes-extensions-init-error"></a>

익스텐션은 이 메서드를 사용하여 Lambda에 초기화 오류를 보고합니다. 익스텐션이 등록된 후 초기화에 실패할 경우 이 메서드를 호출합니다. Lambda가 오류를 수신하면 더 이상 API 호출이 성공하지 못합니다. 익스텐션은 Lambda로부터 응답을 수신한 후에 종료되어야 합니다.

**경로** – `/extension/init/error`

**메서드** – **POST**

**요청 헤더**
+ `Lambda-Extension-Identifier` - 익스텐션의 고유 식별자. 필수 항목 여부: 예. 유형: UUID 문자열.
+ `Lambda-Extension-Function-Error-Type` – 익스텐션에서 발생한 오류 유형입니다. 필수 항목 여부: 예. 이 헤더는 문자열 값으로 구성됩니다. Lambda는 모든 문자열을 허용하지만 <category.reason> 형식을 사용하는 것이 좋습니다. 예:
  + Extension.NoSuchHandler
  + Extension.APIKeyNotFound
  + Extension.ConfigInvalid
  + Extension.UnknownReason

**요청 본문 파라미터**
+ `ErrorRequest` – 오류에 대한 정보입니다. 필수 항목 여부: 아니요 

이 필드는 다음과 같은 구조의 JSON 객체입니다.

```
{
      errorMessage: string (text description of the error),
      errorType: string,
      stackTrace: array of strings
}
```

Lambda는 `errorType`에 대한 모든 값을 허용합니다.

다음 예제에서는 Lambda 함수가 호출에 제공된 이벤트 데이터를 구문 분석할 수 없는 함수 오류 메시지를 보여 줍니다.

**Example 함수 오류**  

```
{
      "errorMessage" : "Error parsing event data.",
      "errorType" : "InvalidEventDataException",
      "stackTrace": [ ]
}
```

**응답 코드**
+ 202 - 수락됨
+ 400 - 잘못된 요청
+ 403 - 금지됨
+ 500 - 컨테이너 오류. 복구 불능 상태입니다. 익스텐션을 즉시 종료해야 합니다.

### 종료 오류
<a name="runtimes-extensions-exit-error"></a>

익스텐션은 종료 전에 이 메서드를 사용하여 Lambda에 오류를 보고합니다. 예기치 않은 오류가 발생하면 이 메서드를 호출합니다. Lambda가 오류를 수신하면 더 이상 API 호출이 성공하지 못합니다. 익스텐션은 Lambda로부터 응답을 수신한 후에 종료되어야 합니다.

**경로** – `/extension/exit/error`

**메서드** – **POST**

**요청 헤더**
+ `Lambda-Extension-Identifier` - 익스텐션의 고유 식별자. 필수 항목 여부: 예. 유형: UUID 문자열.
+ `Lambda-Extension-Function-Error-Type` – 익스텐션에서 발생한 오류 유형입니다. 필수 항목 여부: 예. 이 헤더는 문자열 값으로 구성됩니다. Lambda는 모든 문자열을 허용하지만 <category.reason> 형식을 사용하는 것이 좋습니다. 예:
  + Extension.NoSuchHandler
  + Extension.APIKeyNotFound
  + Extension.ConfigInvalid
  + Extension.UnknownReason

**요청 본문 파라미터**
+ `ErrorRequest` – 오류에 대한 정보입니다. 필수 항목 여부: 아니요

이 필드는 다음과 같은 구조의 JSON 객체입니다.

```
{
      errorMessage: string (text description of the error),
      errorType: string,
      stackTrace: array of strings
}
```

Lambda는 `errorType`에 대한 모든 값을 허용합니다.

다음 예제에서는 Lambda 함수가 호출에 제공된 이벤트 데이터를 구문 분석할 수 없는 함수 오류 메시지를 보여 줍니다.

**Example 함수 오류**  

```
{
      "errorMessage" : "Error parsing event data.",
      "errorType" : "InvalidEventDataException",
      "stackTrace": [ ]
}
```

**응답 코드**
+ 202 - 수락됨
+ 400 - 잘못된 요청
+ 403 - 금지됨
+ 500 - 컨테이너 오류. 복구 불능 상태입니다. 익스텐션을 즉시 종료해야 합니다.

 