Python Lambda 함수를 위한 계층 작업
Lambda 계층을 사용하여 여러 함수에서 재사용하려는 코드와 종속성을 패키징합니다. 계층에는 일반적으로 라이브러리 종속 항목, 사용자 지정 런타임 또는 구성 파일이 포함됩니다. 계층을 생성하려면 세 가지 일반적인 단계를 거칩니다.
-
계층 콘텐츠를 패키징합니다. 즉, 함수에 사용하려는 종속성이 포함된 .zip 파일 아카이브를 생성합니다.
-
Lambda에서 계층을 생성합니다.
-
계층을 함수에 추가합니다.
이 주제에서는 Python 계층을 생성하고 Lambda 함수에 연결하는 방법을 설명합니다.
계층 콘텐츠 패키징
계층을 생성하려면 다음 요구 사항을 충족하는 .zip 파일 아카이브로 패키지를 번들링합니다.
-
Lambda 함수에 사용하려는 것과 동일한 Python 버전을 사용하여 계층을 빌드합니다. 예를 들어, Python 3.13을 사용하여 계층을 빌드하는 경우 함수에 Python 3.13 런타임을 사용합니다.
-
.zip 파일에는 루트 수준의
python
디렉터리가 포함되어야 합니다. -
계층의 패키지는 Linux와 호환되어야 합니다. Lambda 함수는 Amazon Linux에서 실행됩니다.
pip
를 사용하여 설치한 타사 Python 라이브러리(requests
, pandas
등)나 자체 Python 모듈과 패키지를 포함하는 계층을 생성할 수 있습니다.
pip 패키지를 사용하여 계층을 생성하려면 다음을 수행하세요.
-
다음 방법 중 하나를 선택하여 필요한 최상위 디렉터리(
python/
)에pip
패키지를 설치합니다. -
python
디렉터리의 내용을 압축합니다.zip -r layer.zip python/
.zip 파일의 디렉터리 구조는 다음과 같아야 합니다.
python/
# Required top-level directory └── requests/ └── boto3/ └── numpy/ └── (dependencies of the other packages)참고
Python 가상 환경(venv)을 사용하여 패키지를 설치하는 경우 디렉터리 구조가 달라집니다(예:
python/lib/python3.
). .zip 파일에 루트 수준의x
/site-packagespython
디렉터리가 포함되어 있는 한 Lambda는 패키지를 찾아서 가져올 수 있습니다.
자체 코드를 사용하여 계층을 생성하려면 다음을 수행하세요.
-
계층에 필요한 최상위 디렉터리를 생성합니다.
mkdir python
-
python
디렉터리에서 Python 모듈을 생성합니다. 다음 예시 모듈은 주문에 필수 정보가 포함되어 있는지 확인하여 주문을 검증합니다.예 사용자 지정 모듈: validator.py
import json def validate_order(order_data): """Validates an order and returns formatted data.""" required_fields = ['product_id', 'quantity'] # Check required fields missing_fields = [field for field in required_fields if field not in order_data] if missing_fields: raise ValueError(f"Missing required fields: {', '.join(missing_fields)}") # Validate quantity quantity = order_data['quantity'] if not isinstance(quantity, int) or quantity < 1: raise ValueError("Quantity must be a positive integer") # Format and return the validated data return { 'product_id': str(order_data['product_id']), 'quantity': quantity, 'shipping_priority': order_data.get('priority', 'standard') } def format_response(status_code, body): """Formats the API response.""" return { 'statusCode': status_code, 'body': json.dumps(body) }
-
python
디렉터리의 내용을 압축합니다.zip -r layer.zip python/
.zip 파일의 디렉터리 구조는 다음과 같아야 합니다.
python/
# Required top-level directory └── validator.py -
함수에서 Python 패키지와 마찬가지로 모듈을 가져와서 사용합니다. 예시:
from validator import validate_order, format_response
import json def lambda_handler(event, context): try: # Parse the order data from the event body order_data = json.loads(event.get('body', '{}')) # Validate and format the order validated_order = validate_order(order_data) return format_response(200, { 'message': 'Order validated successfully', 'order': validated_order }) except ValueError as e: return format_response(400, { 'error': str(e) }) except Exception as e: return format_response(500, { 'error': 'Internal server error' })다음 테스트 이벤트를 사용하여 함수를 간접적으로 호출할 수 있습니다.
{ "body": "{\"product_id\": \"ABC123\", \"quantity\": 2, \"priority\": \"express\"}" }
예상 응답:
{ "statusCode": 200, "body": "{\"message\": \"Order validated successfully\", \"order\": {\"product_id\": \"ABC123\", \"quantity\": 2, \"shipping_priority\": \"express\"}}" }
Lambda에서 계층 생성
AWS CLI 또는 Lambda 콘솔을 사용하여 계층을 게시할 수 있습니다.
함수에 계층 추가
샘플 애플리케이션
Lambda 계층을 사용하는 방법의 자세한 예는 AWS Lambda Developer Guide GitHub 리포지토리의 layer-python