Platform/AWS

AWS - Lambda Runtime 실행환경

wave35 2024. 8. 28. 09:15

 

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