Lambda Python 함수를 위한 계층을 생성하려면 어떻게 해야 합니까?

3분 분량
0

AWS Lambda Python 함수를 위한 계층을 만들고 싶습니다.

해결 방법

다음 지침은 애플리케이션을 배포하여 Lambda Python 함수를 호출하는 계층을 생성합니다.

  1. AWS Serverless Application Repository 콘솔을 엽니다.
  2. 탐색 창에서 **사용 가능한 애플리케이션(Available applications)**을 선택합니다.
  3. **사용자 지정 IAM 역할 또는 리소스 정책을 생성하는 앱 보기(Show apps that create custom IAM roles or resource policies)**를 선택합니다.
  4. 검색 창에 python-lambda-layer-creation을 입력합니다.
  5. python-lambda-layer-creation 함수를 선택합니다.
  6. **python-lambda-layer-creation 애플리케이션 설정(python-lambda-layer-creation Applications settings)**에서 **이 앱이 사용자 지정 IAM 역할을 생성한다는 사실을 확인합니다(I acknowledge that this app creates custom IAM roles)**를 선택한 다음 **배포(Deploy)**를 선택합니다.

계층을 생성하여 Lambda 함수를 호출하고 계층 메타데이터에 포함된 종속성 목록을 전달할 수 있습니다.

다음 예제는 requests(최신 버전), numpy(버전 1.20.1) 및 keyring(버전 4.1.1 이상) 라이브러리를 포함하는 Python Lambda 계층을 생성합니다. 다음과 비슷한 페이로드를 사용하여 Lambda 함수를 호출할 수 있습니다.

{
  "dependencies": { 
    "requests": "latest",
    "numpy": "== 1.20.1",
    "keyring": ">= 4.1.1" 
  },
   "layer": { 
     "name": "a-sample-python-lambda-layer",
     "description": "this layer contains requests, numpy and keyring libraries",
     "compatible-runtimes": ["python3.6","python3.7","python3.8"],
     "license-info": "MIT" 
  } 
}

Lambda Python 함수 계층을 테스트하기 위해 ARN을 기록해 둡니다. 그런 후 다음과 비슷한 YAML 템플릿을 사용하여 AWS CloudFormation 스택을 생성합니다.

AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  Layer:
    Type: String
    Description: The ARN of the lambda function layer
Resources:
  LambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      Code:
        ZipFile: |
          import json
          import requests
          import numpy as np
          def handler(event, context):
            try:
                ip = requests.get("http://checkip.amazonaws.com/")
                x = np.array([2,3,1,0])
            except requests.RequestException as e:
                raise e

            return {
                "statusCode": 200,
                "body": json.dumps({
                    "array[0]": ("%s" % str(x[0])),
                    "location": ip.text.replace("\n", "")
                }),
            }
      Handler: index.handler
      Runtime: python3.7
      MemorySize: 128
      Timeout: 30
      Layers:
        - !Ref Layer
      Role:
        Fn::GetAtt:
        - LambdaExecutionRole
        - Arn
  LambdaExecutionRole:
    Description: Allow Lambda to connect function to publish Lambda layers
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Statement:
        - Effect: Allow
          Principal:
            Service:
            - lambda.amazonaws.com
          Action: sts:AssumeRole
      Path: /
      ManagedPolicyArns:
      - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
      # Policies:
      # - PolicyName: AllowPublishLambdaLayer
      #   PolicyDocument:
      #     Version: '2012-10-17'
      #     Statement:
      #     - Effect: Allow
      #       Action: lambda:PublishLayerVersion
      #       Resource: '*'

Lambda Python 함수를 실행합니다. 응답 예:

{
  "statusCode": 200,
  "body": "{\"array[0]\": \"2\", \"location\": \"[your-outbound-ip-address]\"}"
}

참고: 이 Lambda 함수는 pip를 사용하여 종속성을 관리하므로 Lambda 계층에 포함된 라이브러리가 Python 패키지 인덱스 리포지토리에 존재합니다.

종속성 및 계층 속성에 대해 정의된 계층에 포함된 Python 라이브러리의 예는 pip 웹 사이트의 pip install을 참조하세요.

자세한 내용은 Lambda 계층 말드기 및 공유를 참조하세요.


관련 정보

Python을 사용하여 Lambda 함수 빌드

Lambda 함수에서 계층 사용

Docker와 함께 시뮬레이션된 Lambda 환경을 사용하여 Lambda 계층을 생성하려면 어떻게 하나요?

계층을 사용하여 JavaScript용 AWS SDK의 최신 버전을 Node.js Lambda 함수에 통합하려면 어떻게 해야 합니까?

AWS 공식
AWS 공식업데이트됨 일 년 전