Python용 Lambda SnapStart 런타임 훅
Python용 Lambda SnapStart 런타임 훅
런타임 훅(runtime hook)을 사용해 Lambda가 스냅샷을 만들기 전이나 Lambda가 스냅샷에서 함수를 재개한 후에 실행할 코드를 구현할 수 있어요. Python 런타임 훅은 오픈소스 Snapshot Restore for Python 라이브러리의 일부로 제공되며, 이 라이브러리는 Python 관리형 런타임에 포함되어 있습니다. 이 라이브러리는 런타임 훅을 정의하는 데 사용할 수 있는 두 가지 데코레이터를 제공합니다:
본문
@register_before_snapshot: Lambda가 스냅샷을 만들기 전에 실행하려는 함수용입니다.@register_after_restore: Lambda가 스냅샷에서 함수를 재개할 때 실행하려는 함수용입니다.
또는 다음 메서드를 사용해 런타임 훅에 콜러블을 등록할 수도 있어요:
register_before_snapshot(func, *args, **kwargs)register_after_restore(func, *args, **kwargs)
런타임 훅 등록 및 실행
Lambda가 런타임 훅을 실행하는 순서는 등록 순서에 따라 결정됩니다:
- 스냅샷 전: 등록 순서의 역순으로 실행됩니다.
- 스냅샷 후: 등록 순서대로 실행됩니다.
런타임 훅 등록 순서는 훅을 어떻게 정의하느냐에 따라 달라요. 데코레이터(@register_before_snapshot과 @register_after_restore)를 사용할 때 등록 순서는 코드에서의 import, 정의, 실행 순서를 따릅니다. 등록 순서를 더 세밀하게 제어해야 한다면 데코레이터 대신 register_before_snapshot()과 register_after_restore() 메서드를 사용하세요.
등록된 모든 훅이 함수 코드에 제대로 import되고 포함되는지 확인하세요. 별도의 파일이나 모듈에 런타임 훅을 등록한다면, 그 모듈이 함수의 핸들러 파일에서 직접 또는 더 큰 패키지의 일부로 import되어야 해요. 파일이나 모듈이 함수 핸들러에서 import되지 않으면 Lambda는 런타임 훅을 무시합니다.
참고
Lambda가 스냅샷을 만들 때 초기화 코드는 최대 15분 동안 실행할 수 있어요. 시간 제한은 130초 또는 구성된 함수 타임아웃(최대 900초) 중 더 높은 값입니다. @register_before_snapshot 런타임 훅은 초기화 코드 시간 제한에 포함됩니다. Lambda가 스냅샷을 복원할 때 런타임은 로드되고 @register_after_restore 런타임 훅은 타임아웃 제한(10초) 내에 완료되어야 합니다. 그렇지 않으면 SnapStartTimeoutException이 발생합니다.
예시
다음 예시 핸들러는 체크포인트 전(@register_before_snapshot)과 복원 후(@register_after_restore)에 코드를 실행하는 방법을 보여줘요.
from snapshot_restore_py import register_before_snapshot, register_after_restore
def lambda_handler(event, context):
# Handler code
pass
@register_before_snapshot
def before_checkpoint():
# Logic to be executed before taking snapshots
pass
@register_after_restore
def after_restore():
# Logic to be executed after restore
pass
더 많은 예시는 Snapshot Restore for Python GitHub 저장소를 참고하세요.