AWS - Lambda Runtime 실행환경
Lambda 실행 환경
- Lambda는 안전하고 격리된 런타임 환경을 제공하는 실행 환경에서 함수를 호출
- 실행 환경은 함수를 실행하는 데 필요한 리소스를 관리
- 내/외부 익스텐션(extension)을 통해 실행환경 수명주기 지원
실행환경 수명주기(Lifecycle) 3단계
Init
리소스로 실행 환경을 만듬
함수와 모든 계층(Layer)을 로드하고 S3에서 함수의 코드를 다운로드
런타임&익스텐션을 초기화, 함수의 초기화 코드(기본 핸들러 외부의 코드)를 실행
Invoke
함수 핸들러를 호출, 함수의 실행 완료 시킴
Shutdown
Lambda 함수가 일정 기간 동안 호출을 받지 않으면 이 단계가 트리거 됨
Lambda는 런타임을 종료하고 익스텐션이 완전히 중지되도록 알림을 보낸 다음 환경을 제거
모든 메모리와 시스템 리소스가 해제되고, 컨테이너가 제거하여 리소스 정리
모니터링 테스트
Lambda Insights
- CloudWatch Lambda Insights는 AWS Lambda에서 실행되는 서버리스 애플리케이션에 대한 모니터링 솔루션
- 콜드/웜 스타트 및 Lambda 작업자 종료와 같은 진단 정보를 수집, 집계 및 요약
- Lambda 계층(Layer)으로 제공 가능, CloudWatch Lambda 익스텐션을 사용
Code
- Lambda Insights 추가하여 cloudwatch에서 실행환경 로그 모니터링
- python signal 모듈을 통해 Lambda가 종료될 때(shutdown) exit_gracefully 함수 실행
- signal.SIGTERM은 프로세스 종료를 요청하는 신호로, Lambda는 실행 환경을 종료할 때 해당 신호 반환
- warm start 일 경우 종료시 실행
import json
import signal
import sys
import time
def exit_gracefully(signum, frame):
print("[runtime] SIGTERM received")
print("[runtime] cleaning up") # perform actual clean up work here.
time.sleep(0.2)
print("[runtime] exiting")
sys.exit(0)
signal.signal(signal.SIGTERM, exit_gracefully)
def lambda_handler(event, context):
return {
"statusCode": 200,
"body": json.dumps({
"message": "hello world",
}),
}
Lambda Log
Tested Runtimes