

# Lambda 관리형 인스턴스 모범 사례
<a name="lambda-managed-instances-best-practices"></a>

## 용량 공급자 구성
<a name="lambda-managed-instances-bp-capacity-provider"></a>

**신뢰 수준에 따라 용량 공급자를 구분합니다.** 보안 요구 사항이 서로 다른 워크로드에 대해 서로 다른 용량 공급자를 생성합니다. 용량 공급자가 보안 경계 역할을 하므로 동일한 용량 공급자에 할당된 모든 함수는 상호 신뢰해야 합니다.

**설명이 포함된 이름을 사용합니다.** 용량 공급자의 이름을 지정하여 용도와 신뢰 수준을 명확하게 표시합니다(예: `production-trusted`, `dev-sandbox`). 이를 통해 팀은 각 용량 공급자의 목적과 보안 태세를 이해할 수 있습니다.

**여러 가용 영역을 사용합니다.** 용량 공급자를 생성할 때 여러 가용 영역에 걸쳐 서브넷을 지정합니다. Lambda는 AZ 복원력을 위해 기본적으로 인스턴스 3개를 시작하여 함수의 고가용성을 보장합니다.

## 인스턴스 유형 선택
<a name="lambda-managed-instances-bp-instance-types"></a>

**Lambda가 인스턴스 유형을 선택하도록 합니다.** 기본적으로 Lambda는 워크로드에 가장 적합한 인스턴스 유형을 선택합니다. 가능한 인스턴스 유형 수를 제한하면 가용성이 낮아질 수 있으므로 Lambda 관리형 인스턴스가 인스턴스 유형을 자동으로 선택하도록 하는 것이 좋습니다.

**특정 요구 사항에 맞춰 인스턴스 유형을 지정합니다.** 특정 하드웨어 요구 사항이 있는 경우 허용된 인스턴스 유형과 호환되는 인스턴스 목록으로 설정합니다. 예제:
+ 높은 네트워크 대역폭이 필요한 애플리케이션의 경우 여러 개의 인스턴스 유형을 선택합니다.
+ 비용 관련 제약이 있는 테스트 또는 개발 환경의 경우 m7a.large와 같이 더 작은 인스턴스 유형을 선택합니다.

## 함수 구성
<a name="lambda-managed-instances-bp-function-config"></a>

**적절한 메모리 및 vCPU 설정을 선택합니다.** 함수의 다중 동시 실행을 지원하는 메모리 및 vCPU 구성을 선택합니다. 지원되는 최소 함수 크기는 2GB 및 1개의 vCPU입니다.
+ Python 애플리케이션의 경우 Python이 다중 동시성을 처리하는 방식으로 인해 vCPU에 대한 메모리 비율을 4:1 또는 8:1 등으로 더 높게 선택해야 합니다.
+ IO를 거의 수행하지 않는 CPU 집약적 작업 또는 함수의 경우 vCPU를 2개 이상으로 선택합니다.
+ 웹 서비스 또는 배치 작업과 같이 IO가 많은 애플리케이션의 경우 다중 동시성이 가장 큰 이점을 제공합니다.

**적절한 최대 동시성을 구성합니다.** Lambda는 리소스 소비량과 처리량의 균형을 맞추는 최대 동시성에 있어 합리적인 기본값을 선택합니다. 함수의 리소스 사용량에 따라 설정을 조정합니다.
+ 함수 간접 호출에서 CPU를 거의 사용하지 않는 경우 최대 동시성을 높입니다(vCPU당 최대 64개).
+ 애플리케이션이 대량의 메모리와 매우 적은 CPU를 소비하는 경우 최대 동시성을 낮춥니다.

동시성이 매우 낮은 실행 환경에서는 스로틀링이 발생하고 규모 조정이 어려울 수 있습니다.

## 조정 구성
<a name="lambda-managed-instances-bp-scaling"></a>

**적절한 목표 리소스 사용률을 설정합니다.** 기본적으로 Lambda는 트래픽이 스로틀링 없이 5분 이내에 2배가 될 수 있도록 충분한 여유 공간을 유지합니다. 워크로드 특성에 따라 이 설정을 조정합니다.
+ 스로틀링에 민감하지 않은 매우 안정적인 워크로드 또는 애플리케이션의 경우 목표를 높은 수준으로 설정하여 사용률을 높이고 비용을 절감합니다.
+ 트래픽 버스트 가능성이 있는 워크로드의 경우 리소스 목표를을 낮은 수준으로 설정하여 추가 여유분을 유지합니다.

**트래픽 증가를 계획합니다.** 5분 이내에 트래픽이 2배를 초과하는 경우 Lambda가 인스턴스 및 실행 환경을 확장함에 따라 스로틀링이 발생할 수 있습니다. 빠르게 확장하는 동안 잠재적 스로틀링을 처리하도록 애플리케이션을 설계합니다.

## 보안
<a name="lambda-managed-instances-bp-security"></a>

**PassCapacityProvider 권한에 최소 권한을 적용합니다.** 필요한 용량 공급자에 대해서만 `lambda:PassCapacityProvider` 권한을 부여합니다. 리소스 수준 권한을 사용하여 사용자가 함수에 할당할 수 있는 용량 공급자를 제한합니다.

**용량 공급자 사용량을 모니터링합니다.** AWS CloudTrail을 사용하여 용량 공급자 할당 및 액세스 패턴을 모니터링합니다. 이를 통해 무단 액세스 시도를 식별하고 보안 정책을 준수할 수 있습니다.

**신뢰할 수 없는 워크로드를 분리합니다.** 신뢰할 수 없는 워크로드 간의 보안 격리를 컨테이너에 의존하지 않습니다. 서로 다른 용량 공급자를 사용하여 상호 신뢰할 수 없는 워크로드를 분리합니다.

## 비용 최적화
<a name="lambda-managed-instances-bp-cost"></a>

**EC2 요금 옵션을 활용합니다.** EC2 절감형 플랜 및 예약 인스턴스를 활용하여 비용을 절감합니다. 이러한 요금 옵션은 기본 EC2 컴퓨팅에 적용됩니다(15% 관리 요금은 할인되지 않음).

**정상 상태 워크로드에 맞춰 최적화합니다.** Lambda 관리형 인스턴스는 예측 가능한 대용량 트래픽이 있는 정상 상태 함수에 가장 적합합니다. 트래픽 버스트가 발생하는 패턴의 경우 Lambda(기본값)의 비용 효율성이 더 높을 수 있습니다.

**리소스 사용률을 모니터링합니다.** CloudWatch 지표를 추적하여 CPU 및 메모리 사용률을 파악합니다. 실제 사용량 패턴을 기반으로 함수 메모리 할당 및 인스턴스 유형 선택을 조정하여 비용을 최적화합니다.

## 모니터링 및 관찰성
<a name="lambda-managed-instances-bp-monitoring"></a>

**용량 공급자 지표를 모니터링합니다.** CPUUtilization, MemoryUtilization, vCPUAvailable, MemoryAvailable 등의 용량 공급자 수준 지표를 추적하여 워크로드에서 충분한 리소스를 사용할 수 있는지 확인합니다.

**실행 환경 지표를 모니터링합니다.** ExecutionEnvironmentConcurrency 및 ExecutionEnvironmentConcurrencyLimit 등 실행 환경 수준 지표를 추적하여 규모 조정 동작을 이해하고 스로틀링 가능성을 식별합니다.

**CloudWatch 경보를 설정합니다.** 주요 지표에 대한 CloudWatch 경보를 생성하여 문제를 사전에 식별합니다.
+ 높은 CPU 또는 메모리 사용률
+ 낮은 가용 용량
+ 동시성 제한 근접

## 언어별 고려 사항
<a name="lambda-managed-instances-bp-runtime"></a>

**언어별 모범 사례를 따릅니다.** 프로그래밍 언어마다 다르게 다중 동시성을 처리합니다. 자세한 권장 사항은 언어별 가이드 참조:
+ **Java**: 요청별 상태에 스레드 안전 컬렉션, `AtomicInteger` 및 `ThreadLocal` 사용
+ **Node.js:** 모든 요청별 상태에 InvokeStore를 사용하고 전역 변수 사용 지양
+ **Python:** `/tmp`에서 요청 ID와 함께 고유한 파일 이름을 사용하고 프로세스 기반 메모리 격리 고려
+ **Rust:** `concurrency-tokio` 특성이 활성화되었으면 `run` 대신에 `run_concurrent`를 사용합니다. 핸들러는 `Clone` \+ `Send`여야 합니다.

**스레드 안전 및 동시성 문제를 테스트합니다.** 프로덕션에 배포하기 전에 함수에서 동시 로드 시 스레드 안전 문제, 경합 조건 및 적절한 상태 격리가 발생하는지 여부를 테스트합니다.

## 다음 단계
<a name="lambda-managed-instances-bp-next-steps"></a>
+ [Lambda 관리형 인스턴스의 용량 공급자](lambda-managed-instances-capacity-providers.md) 알아보기
+ [Lambda 관리형 인스턴스의 규모 조정](lambda-managed-instances-scaling.md) 알아보기
+ [Java](lambda-managed-instances-java-runtime.md), [Node.js](lambda-managed-instances-nodejs-runtime.md) 및 [Python](lambda-managed-instances-python-runtime.md)에 대한 런타임별 가이드 검토
+ [용량 공급자에 대한 VPC 연결](lambda-managed-instances-networking.md) 구성
+ [CloudWatch 지표](lambda-managed-instances-monitoring.md)를 사용하여 Lambda 관리형 인스턴스 모니터링