Python Lambda 함수를 위한 계층 작업 - AWS Lambda

Python Lambda 함수를 위한 계층 작업

Lambda 계층을 사용하여 여러 함수에서 재사용하려는 코드와 종속성을 패키징합니다. 계층에는 일반적으로 라이브러리 종속 항목, 사용자 지정 런타임 또는 구성 파일이 포함됩니다. 계층을 생성하려면 세 가지 일반적인 단계를 거칩니다.

  1. 계층 콘텐츠를 패키징합니다. 즉, 함수에 사용하려는 종속성이 포함된 .zip 파일 아카이브를 생성합니다.

  2. Lambda에서 계층을 생성합니다.

  3. 계층을 함수에 추가합니다.

이 주제에서는 Python 계층을 생성하고 Lambda 함수에 연결하는 방법을 설명합니다.

계층 콘텐츠 패키징

계층을 생성하려면 다음 요구 사항을 충족하는 .zip 파일 아카이브로 패키지를 번들링합니다.

  • Lambda 함수에 사용하려는 것과 동일한 Python 버전을 사용하여 계층을 빌드합니다. 예를 들어, Python 3.13을 사용하여 계층을 빌드하는 경우 함수에 Python 3.13 런타임을 사용합니다.

  • .zip 파일에는 루트 수준의 python 디렉터리가 포함되어야 합니다.

  • 계층의 패키지는 Linux와 호환되어야 합니다. Lambda 함수는 Amazon Linux에서 실행됩니다.

pip를 사용하여 설치한 타사 Python 라이브러리(requests, pandas 등)나 자체 Python 모듈과 패키지를 포함하는 계층을 생성할 수 있습니다.

pip 패키지를 사용하여 계층을 생성하려면 다음을 수행하세요.
  1. 다음 방법 중 하나를 선택하여 필요한 최상위 디렉터리(python/)에 pip 패키지를 설치합니다.

    pip install

    순수 Python 패키지(예: 요청 또는 boto3)의 경우

    pip install requests -t python/

    NumPy, Pandas 등의 일부 Python 패키지에는 컴파일된 C 구성 요소가 포함됩니다. macOS 또는 Windows에서 이러한 패키지로 계층을 구축하는 경우 이 명령을 사용하여 Linux 호환 휠을 설치해야 할 수 있습니다.

    pip install numpy --platform manylinux2014_x86_64 --only-binary=:all: -t python/

    컴파일된 구성 요소가 포함된 Python 패키지 작업에 대한 자세한 내용은 네이티브 라이브러리로 .zip 배포 패키지 생성 섹션을 참조하세요.

    requirements.txt

    requirements.txt 파일을 사용하면 패키지 버전을 관리하고 일관된 설치를 보장하는 데 도움이 됩니다.

    예 requirements.txt
    requests==2.31.0 boto3==1.37.34 numpy==1.26.4

    requirements.txt 파일에 순수 Python 패키지(예: 요청 또는 boto3)만 포함된 경우

    pip install -r requirements.txt -t python/

    NumPy, Pandas 등의 일부 Python 패키지에는 컴파일된 C 구성 요소가 포함됩니다. macOS 또는 Windows에서 이러한 패키지로 계층을 구축하는 경우 이 명령을 사용하여 Linux 호환 휠을 설치해야 할 수 있습니다.

    pip install -r requirements.txt --platform manylinux2014_x86_64 --only-binary=:all: -t python/

    컴파일된 구성 요소가 포함된 Python 패키지 작업에 대한 자세한 내용은 네이티브 라이브러리로 .zip 배포 패키지 생성 섹션을 참조하세요.

  2. 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.x/site-packages). .zip 파일에 루트 수준의 python 디렉터리가 포함되어 있는 한 Lambda는 패키지를 찾아서 가져올 수 있습니다.

자체 코드를 사용하여 계층을 생성하려면 다음을 수행하세요.
  1. 계층에 필요한 최상위 디렉터리를 생성합니다.

    mkdir python
  2. 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) }
  3. python 디렉터리의 내용을 압축합니다.

    zip -r layer.zip python/

    .zip 파일의 디렉터리 구조는 다음과 같아야 합니다.

    python/     # Required top-level directory
    └── validator.py
  4. 함수에서 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 콘솔을 사용하여 계층을 게시할 수 있습니다.

AWS CLI

publish-layer-version AWS CLI 명령을 실행하여 Lambda 계층을 생성합니다.

aws lambda publish-layer-version \ --layer-name my-layer \ --zip-file fileb://layer.zip \ --compatible-runtimes python3.13

호환되는 런타임 파라미터는 선택 사항입니다. 지정된 경우 Lambda는 이 파라미터를 사용하여 Lambda 콘솔에서 계층을 필터링합니다.

Console
계층을 생성하려면(콘솔)
  1. Lambda 콘솔의 계층 페이지를 엽니다.

  2. 계층 생성을 선택합니다.

  3. .zip 파일 업로드를 선택한 다음 이전에 생성한 .zip 아카이브를 업로드합니다.

  4. (선택 사항) 호환되는 런타임에서 계층을 빌드하는 데 사용한 Python 버전에 해당하는 Python 런타임을 선택합니다.

  5. 생성(Create)을 선택합니다.

함수에 계층 추가

AWS CLI

함수에 계층을 연결하려면 update-function-configuration AWS CLI 명령을 실행합니다. --layers 파라미터의 경우 계층 ARN을 사용합니다. ARN은 버전을 지정해야 합니다(예: arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1). 자세한 내용은 계층 및 계층 버전 섹션을 참조하세요.

aws lambda update-function-configuration \ --function-name my-function \ --cli-binary-format raw-in-base64-out \ --layers "arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1"
Console
함수에 계층을 추가하려면 다음을 수행하세요.
  1. Lambda 콘솔의 함수 페이지를 엽니다.

  2. 함수를 선택합니다.

  3. 아래로 스크롤하여 계층 섹션으로 이동하고 계층 추가를 선택하세요.

  4. 계층 선택에서 사용자 지정 계층을 선택하고 계층을 선택합니다.

    참고

    계층을 생성할 때 호환되는 런타임을 추가하지 않은 경우 여기에 계층이 나열되지 않습니다. 대신 계층 ARN을 지정할 수 있습니다.

  5. 추가를 선택합니다.

샘플 애플리케이션

Lambda 계층을 사용하는 방법의 자세한 예는 AWS Lambda Developer Guide GitHub 리포지토리의 layer-python 샘플 애플리케이션을 참조하세요. 이 애플리케이션에는 Python 라이브러리가 포함된 두 개의 계층이 있습니다. 계층을 생성한 후 해당 함수를 배포하고 간접적으로 호출하여 계층이 예상대로 작동하는지 확인할 수 있습니다.