

# Python에 대한 Lambda SnapStart 런타임 후크
<a name="snapstart-runtime-hooks-python"></a>

Lambda가 스냅샷을 생성하기 전이나 Lambda가 스냅샷에서 함수를 재개한 후에 런타임 후크를 사용하여 코드를 구현할 수 있습니다. Python 런타임 후크는 Python 관리형 런타임에 포함된 오픈 소스 [Snapshot Restore for Python 라이브러리](https://pypi.org/project/snapshot-restore-py/)의 일부로 사용할 수 있습니다. 이 라이브러리에서는 런타임 후크를 정의하는 데 사용할 수 있는 두 가지 데코레이터를 제공합니다.
+ `@register_before_snapshot`: Lambda가 스냅샷을 생성하기 전에 실행할 함수의 경우.
+ `@register_after_restore`: Lambda가 스냅샷에서 함수를 재개하는 경우 실행할 함수의 경우.

또는 다음 방법을 사용하여 런타임 후크에 대한 직접 호출 가능 항목을 등록할 수 있습니다.
+ `register_before_snapshot(func, *args, **kwargs)`
+ `register_after_restore(func, *args, **kwargs)`

## 런타임 후크 등록 및 실행
<a name="runtime-hooks-registration-python"></a>

Lambda에서 런타임 후크를 실행하는 순서는 등록 순서에 따라 결정됩니다.
+ 스냅샷 이전: 등록의 역순으로 실행됨
+ 스냅샷 이후: 등록 순서대로 실행됨

런타임 후크 등록 순서는 후크를 정의하는 방법에 따라 달라집니다. 데코레이터(`@register_before_snapshot` 및 `@register_after_restore`)를 사용하는 경우 등록 순서는 코드의 가져오기, 정의 또는 실행 순서를 따릅니다. 등록 순서를 더 제어해야 하는 경우 데코레이터 대신 `register_before_snapshot()` 및 `register_after_restore()` 메서드를 사용합니다.

등록된 모든 후크를 올바르게 가져와서 함수 코드에 포함했는지 확인합니다. 별도의 파일 또는 모듈에 런타임 후크를 등록하는 경우 모듈을 함수의 핸들러 파일에 직접 가져오거나 더 큰 패키지의 일부로 가져와야 합니다. 함수 핸들러에 파일 또는 모듈을 가져오지 않으면 Lambda는 런타임 후크를 무시합니다.

**참고**  
Lambda가 스냅샷을 생성할 때 초기화 코드를 최대 15분 동안 실행할 수 있습니다. 시간 제한은 130초 또는 [구성된 함수 제한 시간](configuration-timeout.md)(최대 900초) 중 더 높은 값입니다. `@register_before_snapshot` 런타임 후크는 초기화 코드 시간 제한에 포함됩니다. Lambda에서 스냅샷을 복원하는 경우 런타임이 로드되고 `@register_after_restore` 런타임 후크가 제한 시간(10초) 내에 완료되어야 합니다. 그렇지 않으면 SnapStartTimeoutException이 발생합니다.

## 예제
<a name="runtime-hooks-python-code-sample"></a>

다음 예제 핸들러는 체크포인트 생성 전(`@register_before_snapshot`)과 복원 후(`@register_after_restore`)에 코드를 실행하는 방법을 보여줍니다.

```
from snapshot_restore_py import register_before_snapshot, register_after_restore

def lambda_handler(event, context):
    # Handler code

@register_before_snapshot
def before_checkpoint():
    # Logic to be executed before taking snapshots

@register_after_restore
def after_restore():
    # Logic to be executed after restore
```

추가 예제는 AWS GitHub 리포지토리의 [Snapshot Restore for Python](https://github.com/aws/snapshot-restore-py/tree/main/examples)을 참조하세요.