쿠키 기본 설정 선택

당사는 사이트와 서비스를 제공하는 데 필요한 필수 쿠키 및 유사한 도구를 사용합니다. 고객이 사이트를 어떻게 사용하는지 파악하고 개선할 수 있도록 성능 쿠키를 사용해 익명의 통계를 수집합니다. 필수 쿠키는 비활성화할 수 없지만 '사용자 지정' 또는 ‘거부’를 클릭하여 성능 쿠키를 거부할 수 있습니다.

사용자가 동의하는 경우 AWS와 승인된 제3자도 쿠키를 사용하여 유용한 사이트 기능을 제공하고, 사용자의 기본 설정을 기억하고, 관련 광고를 비롯한 관련 콘텐츠를 표시합니다. 필수가 아닌 모든 쿠키를 수락하거나 거부하려면 ‘수락’ 또는 ‘거부’를 클릭하세요. 더 자세한 내용을 선택하려면 ‘사용자 정의’를 클릭하세요.

Python Lambda 함수를 위한 계층 작업

포커스 모드
Python Lambda 함수를 위한 계층 작업 - AWS Lambda

Lambda 계층은 추가 코드 또는 데이터를 포함하는 .zip 파일 아카이브입니다. 계층에는 일반적으로 라이브러리 종속 항목, 사용자 지정 런타임 또는 구성 파일이 포함됩니다. 계층을 생성하려면 세 가지 일반적인 단계를 거칩니다.

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

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

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

이 주제에는 외부 라이브러리 종속성이 있는 Python Lambda 계층을 올바르게 패키징하고 생성하는 방법에 대한 단계와 지침이 포함되어 있습니다.

사전 조건

이 섹션의 단계를 수행하려면 다음이 필요합니다.

이 주제에서는 awsdocs GitHub 리포지토리에 있는 layer-python 샘플 애플리케이션을 참조합니다. 이 애플리케이션은 종속성을 다운로드하고 계층을 생성하는 스크립트를 포함합니다. 애플리케이션은 계층의 종속성을 사용하는 해당 함수도 포함합니다. 계층을 생성한 후 해당 함수를 배포하고 간접 호출하여 모든 것이 제대로 작동하는지 확인할 수 있습니다. 함수에 Python 3.11 런타임을 사용하므로 계층도 Python 3.11과 호환되어야 합니다.

layer-python 샘플 애플리케이션에는 두 가지 예제가 있습니다.

  • 첫 번째 예제는 requests 라이브러리를 Lambda 계층으로 패키징하는 것입니다. layer/ 디렉터리는 계층을 생성하는 스크립트를 포함합니다. function/ 디렉터리는 계층이 작동하는지 테스트하는 데 도움이 되는 샘플 함수를 포함합니다. 이 자습서의 대부분은 이 계층을 생성하고 패키징하는 방법을 안내합니다.

  • 두 번째 예제는 numpy 라이브러리를 Lambda 계층으로 패키징하는 것입니다. layer-numpy/ 디렉터리는 계층을 생성하는 스크립트를 포함합니다. function-numpy/ 디렉터리는 계층이 작동하는지 테스트하는 데 도움이 되는 샘플 함수를 포함합니다. 이 계층을 생성하고 패키징하는 방법에 대한 예제는 manylinux 휠 배포를 사용하여 작업 섹션을 참조하세요.

Amazon Linux와의 Python 계층 호환성

계층을 생성하는 첫 번째 단계는 모든 계층 콘텐츠를.zip 파일 아카이브로 번들링하는 것입니다. Lambda 함수는 Amazon Linux에서 실행되기 때문에 계층 콘텐츠는 Linux 환경에서 컴파일하고 빌드할 수 있어야 합니다.

Python에서는 대부분의 패키지를 소스 배포 외에 (.whl 파일)로도 사용할 수 있습니다. 각 휠은 Python 버전, 운영 체제, 머신 명령어 세트의 특정 조합을 지원하는 구축된 배포판의 일종입니다.

휠은 계층이 Amazon Linux와 호환되는지 확인하는 데 유용합니다. 종속 항목을 다운로드할 때 가능하면 유니버설 휠을 다운로드하세요. (기본적으로 pip은 유니버설 휠이 있는 경우 이를 설치합니다.) 유니버설 휠에는 플랫폼 태그로 any가 포함되어 있으며 이는 Amazon Linux를 포함한 모든 플랫폼과 호환됨을 나타냅니다.

다음 예제에서는 requests 라이브러리를 Lambda 계층으로 패키징합니다. requests 라이브러리는 유니버설 휠로 사용할 수 있는 패키지의 예입니다.

모든 Python 패키지가 유니버설 휠로 배포되는 것은 아닙니다. 예를 들어 numpy에는 각각 다른 플랫폼 세트를 지원하는 여러 휠 배포가 있습니다. 이러한 패키지의 경우 manylinux 배포판을 다운로드하여 Amazon Linux와의 호환성을 확인하세요. 이러한 계층을 패키징하는 방법에 대한 자세한 지침은 manylinux 휠 배포를 사용하여 작업 섹션을 참조하세요.

드물지만 Python 패키지를 휠로 사용할 수 없는 경우도 있습니다. 소스 배포(sdist)만 존재하는 경우 Amazon Linux 2023 기본 컨테이너 이미지를 기반으로 Docker 환경에 종속성을 설치하고 패키징하는 것이 좋습니다. C/C++와 같은 다른 언어로 작성된 사용자 지정 라이브러리를 포함하려는 경우에도 이 접근 방식을 권장합니다. 이 접근 방식은 Docker의 Lambda 실행 환경을 모방하며 Python이 아닌 패키지 종속성이 Amazon Linux와 호환되도록 보장합니다.

Python 런타임의 계층 경로

함수에 계층을 추가하면 Lambda는 계층 콘텐츠를 해당 실행 환경의 /opt 디렉터리로 추출합니다. 각 Lambda 런타임에 대해 PATH 변수에는 /opt 디렉터리 내의 특정 폴더 경로가 이미 포함되어 있습니다. Lambda가 계층 콘텐츠를 가져오도록 하려면 계층 .zip 파일의 종속성이 다음 폴더 경로에 있어야 합니다.

  • python

  • python/lib/python3.x/site-packages

예를 들어 이 자습서에서 생성하는 결과 레이어 .zip 파일의 디렉터리 구조는 다음과 같습니다.

layer_content.zip └ python └ lib └ python3.11 └ site-packages └ requests └ <other_dependencies> (i.e. dependencies of the requests package) └ ...

requests 라이브러리는 python/lib/python3.11/site-packages 디렉터리에 올바르게 위치합니다. 이렇게 하면 함수 호출 중에 Lambda가 라이브러리를 찾을 수 있습니다.

계층 콘텐츠의 패키징

이 예에서는 Python requests 라이브러리를 계층 .zip 파일로 패키징합니다. 다음 단계를 완료하여 계층 콘텐츠를 설치하고 패키징합니다.

계층 콘텐츠를 설치하고 패키징하려면 다음을 수행합니다.
  1. sample-apps/layer-python 디렉터리에 필요한 샘플 코드가 포함된 aws-lambda-developer-guide GitHub 리포지토리를 복제합니다.

    git clone https://github.com/awsdocs/aws-lambda-developer-guide.git
  2. layer-python 샘플 앱의 layer 디렉터리로 이동합니다. 이 디렉터리에는 계층을 올바르게 생성하고 패키징하는 데 사용하는 스크립트가 포함되어 있습니다.

    cd aws-lambda-developer-guide/sample-apps/layer-python/layer
  3. requirements.txt 파일을 검사합니다. 이 파일은 계층, 즉 requests 라이브러리에 포함하려는 종속성을 정의합니다. 이 파일을 업데이트하여 자체 계층에 포함하려는 종속성을 포함할 수 있습니다.

    예 requirements.txt
    requests==2.31.0
  4. 두 스크립트를 모두 실행할 수 있는 권한이 있는지 확인하세요.

    chmod 744 1-install.sh && chmod 744 2-package.sh
  5. 다음 명령을 사용하여 1-install.sh 스크립트를 실행하세요.

    ./1-install.sh

    이 스크립트는 venv를 사용하여 create_layer라는 이름의 Python 가상 환경을 생성합니다. 그런 다음 create_layer/lib/python3.11/site-packages 디렉터리에 필요한 모든 종속성을 설치합니다.

    예 1-install.sh
    python3.11 -m venv create_layer source create_layer/bin/activate pip install -r requirements.txt
  6. 다음 명령을 사용하여 2-package.sh 스크립트를 실행하세요.

    ./2-package.sh

    이 스크립트는 create_layer/lib 디렉터리의 내용을 python이라는 새 디렉터리에 복사합니다. 그런 다음 python 디렉터리의 내용을 layer_content.zip라는 파일로 압축합니다. 이는 계층의 .zip 파일입니다. Python 런타임의 계층 경로 섹션에 표시된 것처럼 파일의 압축을 풀고 올바른 파일 구조가 포함되어 있는지 확인할 수 있습니다.

    예 2-package.sh
    mkdir python cp -r create_layer/lib python/ zip -r layer_content.zip python

계층의 생성

이 섹션에서는 이전 섹션에서 생성한 layer_content.zip 파일을 가져와 Lambda 계층으로 업로드합니다. AWS Command Line Interface(AWS CLI)를 통해 AWS Management Console 또는 Lambda API를 사용하여 계층을 업로드할 수 있습니다. 계층 .zip 파일을 업로드할 때 다음 PublishLayerVersion AWS CLI 명령에서 python3.11을 호환 런타임으로, arm64를 호환 아키텍처로 지정합니다.

aws lambda publish-layer-version --layer-name python-requests-layer \ --zip-file fileb://layer_content.zip \ --compatible-runtimes python3.11 \ --compatible-architectures "arm64"

응답에서 arn:aws:lambda:us-east-1:123456789012:layer:python-requests-layer:1처럼 보이는 LayerVersionArn에 유의하세요. 이 자습서의 다음 단계인 함수에 계층을 추가할 때 이 Amazon 리소스 이름(ARN)이 필요합니다.

함수에 계층 추가

이 섹션에서는 함수 코드에 requests 라이브러리를 사용하는 샘플 Lambda 함수를 배포한 다음 계층을 연결합니다. 함수를 배포하려면 실행 역할이 필요합니다. 기존 실행 역할이 없으면 접을 수 있는 섹션의 단계를 따르세요.

실행 역할을 만들려면
  1. IAM 콘솔에서 역할 페이지를 엽니다.

  2. 역할 생성을 선택합니다.

  3. 다음 속성을 사용하여 역할을 만듭니다.

    • 신뢰할 수 있는 엔터티Lambda.

    • 권한AWSLambdaBasicExecutionRole.

    • 역할 이름lambda-role.

    AWSLambdaBasicExecutionRole 정책은 함수가 CloudWatch Logs에 로그를 쓰는 데 필요한 권한을 가집니다.

실행 역할을 만들려면
  1. IAM 콘솔에서 역할 페이지를 엽니다.

  2. 역할 생성을 선택합니다.

  3. 다음 속성을 사용하여 역할을 만듭니다.

    • 신뢰할 수 있는 엔터티Lambda.

    • 권한AWSLambdaBasicExecutionRole.

    • 역할 이름lambda-role.

    AWSLambdaBasicExecutionRole 정책은 함수가 CloudWatch Logs에 로그를 쓰는 데 필요한 권한을 가집니다.

Lambda 함수 코드requests 라이브러리를 가져오고 간단한 HTTP 요청을 한 다음 상태 코드와 본문을 반환합니다.

import requests def lambda_handler(event, context): print(f"Version of requests library: {requests.__version__}") request = requests.get('https://api.github.com/') return { 'statusCode': request.status_code, 'body': request.text }
Lambda 함수를 배포하려면 다음을 수행합니다.
  1. function/ 디렉터리로 이동합니다. 현재 layer/ 디렉터리에 있는 경우 다음 명령을 실행하세요.

    cd ../function
  2. 다음 명령을 사용하여 .zip 파일 배포 패키지를 생성합니다.

    zip my_deployment_package.zip lambda_function.py
  3. 함수를 배포합니다. 다음 AWS CLI 명령에서 --role 파라미터를 실행 역할 ARN으로 바꿉니다.

    aws lambda create-function --function-name python_function_with_layer \ --runtime python3.11 \ --architectures "arm64" \ --handler lambda_function.lambda_handler \ --role arn:aws:iam::123456789012:role/lambda-role \ --zip-file fileb://my_deployment_package.zip
  4. 그런 다음 계층을 함수에 연결합니다. 다음 AWS CLI 명령에서 --layers 파라미터를 이전에 기록해 둔 계층 버전 ARN으로 바꿉니다.

    aws lambda update-function-configuration --function-name python_function_with_layer \ --cli-binary-format raw-in-base64-out \ --layers "arn:aws:lambda:us-east-1:123456789012:layer:python-requests-layer:1"
  5. 마지막으로 다음 AWS CLI 명령을 사용하여 함수를 간접 호출합니다.

    aws lambda invoke --function-name python_function_with_layer \ --cli-binary-format raw-in-base64-out \ --payload '{ "key": "value" }' response.json

    다음과 유사한 출력 화면이 표시되어야 합니다.

    { "StatusCode": 200, "ExecutedVersion": "$LATEST" }

    출력 response.json 파일은 응답에 대한 세부 정보를 포함합니다.

이 자습서 용도로 생성한 리소스를 보관하고 싶지 않다면 지금 삭제할 수 있습니다. 더 이상 사용하지 않는 AWS 리소스를 삭제하면 AWS 계정에 불필요한 요금이 발생하는 것을 방지할 수 있습니다.

Lambda 계층을 삭제하려면 다음을 수행합니다.
  1. Lambda 콘솔의 계층 페이지를 엽니다.

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

  3. 삭제를 선택한 다음 삭제를 다시 선택합니다.

Lambda 함수를 삭제하려면
  1. Lambda 콘솔의 함수 페이지를 엽니다.

  2. 생성한 함수를 선택합니다.

  3. 작업, 삭제를 선택합니다.

  4. 텍스트 입력 필드에 confirm를 입력하고 Delete(삭제)를 선택합니다.

이 자습서 용도로 생성한 리소스를 보관하고 싶지 않다면 지금 삭제할 수 있습니다. 더 이상 사용하지 않는 AWS 리소스를 삭제하면 AWS 계정에 불필요한 요금이 발생하는 것을 방지할 수 있습니다.

Lambda 계층을 삭제하려면 다음을 수행합니다.
  1. Lambda 콘솔의 계층 페이지를 엽니다.

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

  3. 삭제를 선택한 다음 삭제를 다시 선택합니다.

Lambda 함수를 삭제하려면
  1. Lambda 콘솔의 함수 페이지를 엽니다.

  2. 생성한 함수를 선택합니다.

  3. 작업, 삭제를 선택합니다.

  4. 텍스트 입력 필드에 confirm를 입력하고 Delete(삭제)를 선택합니다.

manylinux 휠 배포를 사용하여 작업

종속성으로 포함하려는 패키지에 유니버설 휠이 없는 경우가 있습니다(특히 플랫폼 태그에 any가 없는 경우). 이러한 경우에는 대신 manylinux를 지원하는 휠을 다운로드하세요. 이렇게 하면 계층 라이브러리가 Amazon Linux와 호환됩니다.

numpy는 유니버설 휠이 없는 패키지 중 하나입니다. 계층에 numpy 패키지를 포함하려면 다음 예제 단계를 완료하여 계층을 올바르게 설치하고 패키징할 수 있습니다.

계층 콘텐츠를 설치하고 패키징하려면 다음을 수행합니다.
  1. sample-apps/layer-python 디렉터리에 필요한 샘플 코드가 포함된 aws-lambda-developer-guide GitHub 리포지토리를 복제합니다.

    git clone https://github.com/awsdocs/aws-lambda-developer-guide.git
  2. layer-python 샘플 앱의 layer-numpy 디렉터리로 이동합니다. 이 디렉터리에는 계층을 올바르게 생성하고 패키징하는 데 사용하는 스크립트가 포함되어 있습니다.

    cd aws-lambda-developer-guide/sample-apps/layer-python/layer-numpy
  3. requirements.txt 파일을 검사합니다. 이 파일은 계층, 즉 numpy 라이브러리에 포함하려는 종속성을 정의합니다. 여기에서는 Python 3.11, Amazon Linux, x86_64 명령어 세트와 호환되는 manylinux 휠 배포의 URL을 지정합니다.

    예 requirements.txt
    https://files.pythonhosted.org/packages/3a/d0/edc009c27b406c4f9cbc79274d6e46d634d139075492ad055e3d68445925/numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  4. 두 스크립트를 모두 실행할 수 있는 권한이 있는지 확인하세요.

    chmod 744 1-install.sh && chmod 744 2-package.sh
  5. 다음 명령을 사용하여 1-install.sh 스크립트를 실행하세요.

    ./1-install.sh

    이 스크립트는 venv를 사용하여 create_layer라는 이름의 Python 가상 환경을 생성합니다. 그런 다음 create_layer/lib/python3.11/site-packages 디렉터리에 필요한 모든 종속성을 설치합니다. 이 경우에는 --platform 태그를 manylinux2014_x86_64로 지정해야 하므로 pip 명령이 다릅니다. 이렇게 하면 로컬 컴퓨터가 macOS 또는 Windows를 사용하는 경우에도 pip에 올바른 manylinux 휠을 설치하도록 지시합니다.

    예 1-install.sh
    python3.11 -m venv create_layer source create_layer/bin/activate pip install -r requirements.txt --platform=manylinux2014_x86_64 --only-binary=:all: --target ./create_layer/lib/python3.11/site-packages
  6. 다음 명령을 사용하여 2-package.sh 스크립트를 실행하세요.

    ./2-package.sh

    이 스크립트는 create_layer/lib 디렉터리의 내용을 python이라는 새 디렉터리에 복사합니다. 그런 다음 python 디렉터리의 내용을 layer_content.zip라는 파일로 압축합니다. 이는 계층의 .zip 파일입니다. Python 런타임의 계층 경로 섹션에 표시된 것처럼 파일의 압축을 풀고 올바른 파일 구조가 포함되어 있는지 확인할 수 있습니다.

    예 2-package.sh
    mkdir python cp -r create_layer/lib python/ zip -r layer_content.zip python

이 계층을 Lambda에 업로드하려면 다음 PublishLayerVersion AWS CLI 명령을 사용합니다.

aws lambda publish-layer-version --layer-name python-numpy-layer \ --zip-file fileb://layer_content.zip \ --compatible-runtimes python3.11 \ --compatible-architectures "x86_64"

응답에서 arn:aws:lambda:us-east-1:123456789012:layer:python-numpy-layer:1처럼 보이는 LayerVersionArn에 유의하세요. 계층이 예상대로 작동하는지 확인하려면 function-numpy 디렉터리에 Lambda 함수를 배포합니다.

Lambda 함수를 배포하려면 다음을 수행합니다.
  1. function-numpy/ 디렉터리로 이동합니다. 현재 layer-numpy/ 디렉터리에 있는 경우 다음 명령을 실행하세요.

    cd ../function-numpy
  2. 함수 코드를 검토합니다. 이 함수는 numpy 라이브러리를 가져와서 간단한 numpy 배열을 생성한 다음 더미 상태 코드와 본문을 반환합니다.

    import json import numpy as np def lambda_handler(event, context): x = np.arange(15, dtype=np.int64).reshape(3, 5) print(x) return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') }
  3. 다음 명령을 사용하여 .zip 파일 배포 패키지를 생성합니다.

    zip my_deployment_package.zip lambda_function.py
  4. 함수를 배포합니다. 다음 AWS CLI 명령에서 --role 파라미터를 실행 역할 ARN으로 바꿉니다.

    aws lambda create-function --function-name python_function_with_numpy \ --runtime python3.11 \ --handler lambda_function.lambda_handler \ --role arn:aws:iam::123456789012:role/lambda-role \ --zip-file fileb://my_deployment_package.zip
  5. 그런 다음 계층을 함수에 연결합니다. 다음 AWS CLI 명령에서 --layers 파라미터를 계층 버전 ARN으로 바꿉니다.

    aws lambda update-function-configuration --function-name python_function_with_numpy \ --cli-binary-format raw-in-base64-out \ --layers "arn:aws:lambda:us-east-1:123456789012:layer:python-requests-layer:1"
  6. 마지막으로 다음 AWS CLI 명령을 사용하여 함수를 간접 호출합니다.

    aws lambda invoke --function-name python_function_with_numpy \ --cli-binary-format raw-in-base64-out \ --payload '{ "key": "value" }' response.json

    다음과 유사한 출력 화면이 표시되어야 합니다.

    { "StatusCode": 200, "ExecutedVersion": "$LATEST" }

    함수 로그를 검사하여 코드가 numpy 배열을 표준 출력으로 출력하는지 확인할 수 있습니다.

프라이버시사이트 이용 약관쿠키 기본 설정
© 2025, Amazon Web Services, Inc. 또는 계열사. All rights reserved.