Python으로 Lambda 함수 구축하기
Python으로 Lambda 함수 구축하기
AWS Lambda에서 Python 코드를 실행할 수 있어요. Lambda는 Python용 런타임을 제공해서 이벤트를 처리하는 여러분의 코드를 실행해 줘요. 코드는 Python용 SDK(SDK for Python, Boto3)가 포함된 환경에서 실행되며, 여러분이 관리하는 AWS Identity and Access Management(IAM) 역할에서 자격 증명을 가져와요. Python 런타임에 포함된 SDK 버전에 대해 더 알고 싶다면 런타임 내장 SDK 버전을 참고하세요.
Lambda는 다음 Python 런타임을 지원해요.
| 이름 | 식별자 | 운영 체제 | 폐기 예정일 | 함수 생성 차단 | 함수 업데이트 차단 |
|---|---|---|---|---|---|
| Python 3.15 | python3.15 |
Amazon Linux 2023 | 예정 없음 | 예정 없음 | 예정 없음 |
| Python 3.14 | python3.14 |
Amazon Linux 2023 | 2029년 6월 30일 | 2029년 7월 31일 | 2029년 8월 31일 |
| Python 3.13 | python3.13 |
Amazon Linux 2023 | 2029년 6월 30일 | 2029년 7월 31일 | 2029년 8월 31일 |
| Python 3.12 | python3.12 |
Amazon Linux 2023 | 2028년 10월 31일 | 2028년 11월 30일 | 2029년 1월 10일 |
| Python 3.11 | python3.11 |
Amazon Linux 2 | 2027년 6월 30일 | 2027년 7월 31일 | 2027년 8월 31일 |
| Python 3.10 | python3.10 |
Amazon Linux 2 | 2026년 10월 31일 | 2027년 2월 1일 | 2027년 3월 3일 |
본문
Python 함수 만들기
- Lambda 콘솔을 엽니다.
- Create function(함수 생성)을 선택합니다.
- 다음 설정을 구성합니다.
- Function name(함수 이름): 함수의 이름을 입력합니다.
- Runtime(런타임): Python 3.14를 선택합니다.
- Create function(함수 생성)을 선택합니다.
콘솔은 lambda_function이라는 단일 소스 파일이 있는 Lambda 함수를 만들어요. 내장 코드 편집기에서 이 파일을 편집하고 파일을 더 추가할 수 있어요. DEPLOY 섹션에서 Deploy(배포)를 선택해 함수 코드를 업데이트하세요. 그런 다음 코드를 실행하려면 TEST EVENTS 섹션에서 Create test event(테스트 이벤트 생성)를 선택하면 됩니다.
여러분의 Lambda 함수에는 CloudWatch Logs 로그 그룹이 함께 제공돼요. 함수 런타임은 각 호출에 대한 세부 정보를 CloudWatch Logs로 보내요. 또한 호출 중에 함수가 출력하는 로그를 중계하죠. 함수에서 오류가 반환되면 Lambda는 오류를 형식화해서 호출자(invoker)에게 반환해요.
Python 함수 테스트에 대한 지침은 Python에서 AWS Lambda 함수 테스트를 참고하세요.
Topics(주제)
- 런타임 내장 SDK 버전
- 비활성화된 Python 기능
- 응답 형식
- 확장을 위한 정상 종료(Graceful shutdown)
- Python에서 Lambda 함수 핸들러 정의
- Python Lambda 함수용 .zip 파일 아카이브 작업
- 컨테이너 이미지로 Python Lambda 함수 배포
- Python Lambda 함수용 레이어(layer) 작업
- Lambda 컨텍스트 객체로 Python 함수 정보 검색
- Python Lambda 함수 로그 및 모니터링
- Python에서 AWS Lambda 함수 테스트
- AWS Lambda에서 Python 코드 계측(instrumenting)
런타임 내장 SDK 버전
Python 런타임에 포함된 AWS SDK 버전은 런타임 버전과 여러분의 AWS 리전에 따라 달라져요. 사용 중인 런타임에 포함된 SDK 버전을 확인하려면 다음 코드로 Lambda 함수를 만들어 보세요.
import boto3
import botocore
def lambda_handler(event, context):
print(f'boto3 version: {boto3.__version__}')
print(f'botocore version: {botocore.__version__}')
비활성화된 Python 기능
다음 표는 Lambda 관리형 런타임과 Python용 컨테이너 기본 이미지에서 비활성화된 Python 기능을 보여줘요. 이 기능들은 Python 런타임 실행 파일이 컴파일될 때 활성화되어야 하며, 실행 시점의 플래그(execution-time flag)로는 활성화할 수 없어요. Lambda에서 이 기능들을 사용하려면 이 기능이 활성화된 자체 Python 런타임 빌드를 컨테이너 이미지 또는 커스텀 런타임으로 배포하면 됩니다.
| Python 기능 | 영향받는 Python 버전 | 상태 |
|---|---|---|
| JIT(Just-in-Time) 컴파일러 | Python 3.13 이상 | JIT 컴파일러는 실험 단계라 프로덕션 워크로드에는 권장되지 않아요. 그래서 Lambda Python 런타임에서는 비활성화되어 있죠. |
| Free-threading | Python 3.13 이상 | Free threading(전역 인터프리터 잠금을 비활성화하는 옵션)은 단일 스레드 코드의 성능 영향 때문에 Lambda Python 빌드에서 비활성화되어 있어요. |
응답 형식
Python 3.12 이상 런타임에서는 함수가 JSON 응답의 일부로 유니코드 문자를 반환해요. 더 이른 Python 런타임은 응답에서 유니코드 문자에 대해 이스케이프 시퀀스를 반환하죠. 예를 들어 Python 3.11에서는 "こんにちは" 같은 유니코드 문자열을 반환하면 유니코드 문자를 이스케이프해서 "\u3053\u3093\u306b\u3061\u306f"를 반환해요. Python 3.12 런타임은 원래 문자열 "こんにちは"를 그대로 반환합니다.
유니코드 응답을 사용하면 Lambda 응답 크기가 줄어들어, 동기식 함수의 6MB 최대 페이로드 크기 안에 더 큰 응답을 담기 쉬워져요. 위 예에서 이스케이프 버전은 32바이트인 반면, 유니코드 문자열은 17바이트이죠.
Python 3.12 이상 런타임으로 업그레이드하면 새 응답 형식에 맞게 코드를 조정해야 할 수 있어요. 호출자가 이스케이프된 유니코드를 기대한다면, 값을 반환하는 함수에 유니코드를 수동으로 이스케이프하는 코드를 추가하거나, 호출자 쪽에서 유니코드 반환을 처리하도록 조정해야 합니다.
확장을 위한 정상 종료(Graceful shutdown)
Python 3.12 이상 런타임은 외부 확장이 있는 함수에 대해 개선된 정상 종료 기능을 제공해요. Lambda가 실행 환경을 종료할 때 런타임에 SIGTERM 신호를 보내고, 등록된 각 외부 확장에는 SHUTDOWN 이벤트를 보내요. Lambda 함수에서 SIGTERM 신호를 잡아내 함수가 만든 데이터베이스 연결 같은 리소스를 정리할 수 있습니다.
실행 환경 수명 주기에 대해 더 알아보려면 Lambda 실행 환경 수명 주기 이해를 참고하세요. 확장과 함께 정상 종료를 사용하는 예제는 AWS Samples GitHub 저장소에서 확인할 수 있어요.
더 알아보기 (Learn more)
- Python 빌드 관련 topics에서 핸들러 정의, .zip 패키징, 컨테이너 이미지 배포, 레이어, 컨텍스트, 로그·모니터링, 테스트, 계측 방법을 순서대로 다뤄 보세요.