

# Lambda 관리형 인스턴스용 Python 런타임
<a name="lambda-managed-instances-python-runtime"></a>

Lambda 런타임은 여러 개의 Python 프로세스를 사용하여 동시 요청을 처리합니다. 각 동시 요청은 자체 메모리 공간 및 초기화를 갖춘 별도의 프로세스로 실행됩니다. 각 프로세스는 한 번에 하나의 요청을 동기식으로 처리합니다. 프로세스는 메모리를 직접 공유하지 않으므로 전역 변수, 모듈 수준 캐시 및 싱글톤 객체는 동시 요청 간에 격리됩니다.

## 동시성 구성
<a name="lambda-managed-instances-python-concurrency-config"></a>

Lambda가 각 실행 환경에 보내는 최대 동시 요청 수는 함수 구성의 `PerExecutionEnvironmentMaxConcurrency` 설정으로 제어됩니다. 이 설정은 선택 사항이며, 기본값은 런타임에 따라 달라집니다. Python 런타임의 경우 기본값은 vCPU당 16개 동시 요청으로, 또는 자체 값을 구성할 수 있습니다. 또한 이 값은 Python 런타임에서 사용하는 프로세스 수를 결정합니다. Lambda는 각 실행 환경의 용량에 따라 구성된 최대 수까지 동시 요청 수를 자동으로 조정하여 이러한 요청을 수용합니다.

**중요**  
프로세스 기반 동시성을 사용하면 각 런타임 작업자 프로세스에서 자체적으로 초기화를 수행합니다. 총 메모리 사용량은 프로세스당 메모리와 동시 프로세스 수를 곱한 값과 같습니다. 대용량 라이브러리 또는 데이터 세트를 로드하고 동시성이 높은 경우 메모리 공간이 커집니다. 워크로드에 따라 사용 가능한 메모리를 초과하지 않도록 CPU-메모리 비율을 조정하거나 더 낮은 동시성 설정을 사용해야 할 수 있습니다. CloudWatch의 `MemoryUtilization` 지표를 사용하여 메모리 사용량을 추적할 수 있습니다.

## 다중 동시성 함수 빌드
<a name="lambda-managed-instances-python-building"></a>

프로세스 기반 다중 동시성 모델로 인해 Python 런타임을 사용하는 Lambda 관리형 인스턴스 함수는 여러 간접 호출에서 동시에 메모리 내 리소스에 액세스하지 않습니다. 메모리 내 동시성 안전을 위한 코딩 방식을 적용할 필요가 없습니다.

## 공유 /tmp 디렉터리
<a name="lambda-managed-instances-python-shared-tmp"></a>

`/tmp` 디렉터리는 실행 환경의 모든 동시 요청에서 공유됩니다. 동일한 파일에 대한 동시 쓰기로 인해 다른 프로세스가 파일을 덮어쓰는 등 데이터가 손상될 수 있습니다. 이를 해결하려면 공유 파일에 대한 파일 잠금을 구현하거나 프로세스 또는 요청별로 고유한 파일 이름을 사용하여 충돌을 방지합니다. 사용 가능한 공간이 소진되지 않도록 불필요한 파일을 정리해야 합니다.

## 로깅
<a name="lambda-managed-instances-python-logging"></a>

다중 동시 시스템에서는 로그 인터리브(로그에서 서로 다른 요청의 로그 항목이 인터리브됨)가 정상적인 동작입니다.

Lambda 관리형 인스턴스를 사용하는 함수는 항상 [고급 로깅 제어](monitoring-logs.md#monitoring-cloudwatchlogs-advanced)가 도입된 구조화된 JSON 로그 형식을 사용합니다. 이 형식에는 `requestId`가 포함되어 로그 항목을 단일 요청과 연관시킬 수 있습니다. Lambda의 Python 표준 라이브러리에서 `logging` 모듈을 사용하면 `requestId`가 각 로그 항목에 자동으로 포함됩니다. 자세한 내용은 [Python에서 Lambda 고급 로깅 제어 사용](https://docs.aws.amazon.com/lambda/latest/dg/python-logging.html#python-logging-advanced)을 참조하세요.

## 요청 컨텍스트
<a name="lambda-managed-instances-python-request-context"></a>

`context.aws_request_id`를 사용하면 현재 요청의 요청 ID에 액세스할 수 있습니다.

Python 런타임을 사용하는 경우 `_X_AMZN_TRACE_ID` 환경 변수를 사용하여 Lambda 관리형 인스턴스에서 X-Ray 트레이스 ID에 액세스할 수 있습니다. AWS SDK를 사용할 때 X-Ray 트레이스 ID가 자동으로 전파됩니다.

`context.get_remaining_time_in_millis()`를 사용하여 제한 시간 초과를 감지합니다. 자세한 정보는 [오류 처리 및 복구](lambda-managed-instances-execution-environment.md#lambda-managed-instances-error-handling)을 참조하세요.

## 초기화 및 종료
<a name="lambda-managed-instances-python-init-shutdown"></a>

함수 초기화는 프로세스당 한 번 발생합니다. 함수가 초기화 도중 로그를 내보내는 경우 반복 로그 항목이 표시될 수 있습니다.

확장이 포함된 Lambda 함수의 경우 실행 환경은 종료 중에 SIGTERM 신호를 내보냅니다. 이 신호는 확장에서 버퍼 비우기와 같은 정리 태스크를 트리거하는 데 사용됩니다. SIGTERM 이벤트를 구독하여 데이터베이스 연결 종료와 같은 함수 정리 태스크를 트리거할 수 있습니다. 실행 환경 수명 주기에 대한 자세한 내용은 [Lambda 실행 환경 수명 주기 이해](lambda-runtime-environment.md) 섹션을 참조하세요.

## 종속성 버전
<a name="lambda-managed-instances-python-dependencies"></a>

Lambda 관리형 인스턴스에는 다음과 같은 최소 패키지 버전이 필요합니다.
+ Powertools for AWS Lambda(Python): 버전 3.23.0 이상

## Powertools for AWS Lambda(Python)
<a name="lambda-managed-instances-python-powertools"></a>

Powertools for AWS Lambda(Python)는 Lambda 관리형 인스턴스와 호환되고 로깅, 추적, 지표 등을 위한 유틸리티를 제공합니다. 자세한 내용은 [Powertools for AWS Lambda(Python)](https://github.com/aws-powertools/powertools-lambda-python)를 참조하세요.

## 다음 단계
<a name="lambda-managed-instances-python-next-steps"></a>
+ [Lambda 관리형 인스턴스용 Java 런타임](lambda-managed-instances-java-runtime.md) 검토
+ [Lambda 관리형 인스턴스용 Node.js 런타임](lambda-managed-instances-nodejs-runtime.md) 검토
+ [Lambda 관리형 인스턴스용 .NET 런타임](lambda-managed-instances-dotnet-runtime.md) 검토
+ [Lambda 관리형 인스턴스 규모 조정](lambda-managed-instances-scaling.md) 알아보기