Lambda Python 함수를 위한 계층을 생성하려면 어떻게 해야 합니까?
최종 업데이트 날짜: 2023년 2월 7일
AWS Lambda Python 함수를 위한 계층을 만들고 싶습니다.
해결 방법
다음 지침은 애플리케이션을 배포하여 Lambda Python 함수를 호출하는 계층을 생성합니다.
- AWS Serverless Application Repository 콘솔을 엽니다.
- 탐색 창에서 사용 가능한 애플리케이션(Available applications)을 선택합니다.
- 사용자 지정 IAM 역할 또는 리소스 정책을 생성하는 앱 보기(Show apps that create custom IAM roles or resource policies)를 선택합니다.
- 검색 창에 python-lambda-layer-creation을 입력합니다.
- python-lambda-layer-creation 함수를 선택합니다.
- 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 계층 말드기 및 공유를 참조하세요.