테넌트 격리
Lambda 함수를 간접 호출하는 개별 최종 사용자 또는 테넌트에 대해 격리된 요청 처리가 필요한 경우 테넌트 격리 모드를 사용합니다. 이 기능은 테넌트별 함수 리소스를 관리하고 라우팅 로직을 요청할 필요가 없으므로 워크플로 자동화 또는 코드 실행을 위한 SaaS 플랫폼과 같은 테넌트별 코드 또는 데이터를 처리하는 다중 테넌트 애플리케이션 빌드를 간소화합니다.
다중 테넌트 애플리케이션의 경우, 코드를 실행하거나 개별 테넌트 또는 최종 사용자에 대한 데이터를 처리할 때 격리 요구 사항이 엄격합니다. 테넌트 격리 모드를 사용하면 Lambda는 고객이 지정한 테넌트 식별자를 사용하여 요청을 기본 함수 실행 환경으로 라우팅합니다. 그에 따라 함수의 실행 환경은 지정된 최종 사용자 또는 테넌트의 호출을 처리하는 데만 사용됩니다. Lambda의 함수 실행 환경은 Firecracker 가상화
테넌트 격리 모드를 사용하는 함수가 테넌트 식별자로 간접 호출을 수신하면 Lambda는 먼저 해당 테넌트 식별자와 연결된 사용 가능한 실행 환경을 찾으려고 시도합니다. 실행 환경이 없는 경우 Lambda는 새 실행 환경을 생성하고 해당 테넌트에 할당합니다. 지정된 테넌트 식별자가 포함된 함수 간접 호출이 스케일 업되면 Lambda는 필요에 따라 새 실행 환경을 찾거나 생성합니다.
주제
테넌트 격리 모드를 사용하는 경우
단일 Lambda 함수를 사용하여 여러 최종 사용자 또는 테넌트에 서비스를 제공해야 하는 경우 테넌트 격리 모드를 사용하며, 이와 동시에 개별 테넌트에 대한 간접 호출 처리에 사용되는 실행 환경이 서로 격리된 상태로 유지됩니다. 이렇게 엄격한 실행 환경 격리는 다음과 같은 멀티 테넌트 애플리케이션에 필요합니다.
-
최종 사용자 제공 코드 실행: 개별 테넌트에 대해 별도의 실행 환경을 유지하면 잘못되었거나 악의적일 수 있는 사용자 제공 코드를 실행해서 생기는 영향을 제한할 수 있습니다.
-
테넌트별 데이터 처리: 개별 테넌트에 대해 별도의 실행 환경을 유지하면 민감한 테넌트별 데이터가 다른 테넌트에 노출되지 않습니다.
동일한 테넌트에서의 여러 간접 호출 요청은 동일한 함수 실행 환경을 재사용하여 콜드 스타트를 줄이고 지연 시간에 민감한 애플리케이션의 응답 시간을 개선할 수 있습니다.
지원 기능 및 제한 사항
테넌트 격리 모드는 함수 URL, 프로비저닝 동시성 또는 SnapStart를 사용하는 함수에서는 지원되지 않습니다. 동기식 간접 호출, 비동기식 간접 호출을 사용하거나 Amazon API Gateway를 이벤트 트리거로 사용하여 테넌트 격리 함수에 요청을 보낼 수 있습니다.
지원되는 AWS 리전
테넌트 격리 모드는 아시아 태평양(뉴질랜드)을 제외한 모든 상용 리전에서 지원됩니다.
고려 사항
Lambda 함수에서 테넌트 격리를 사용하는 경우 다음 사항을 유의해야 합니다.
-
변경 불가능한 구성: 테넌트 격리는 변경 불가능한 함수 속성입니다. 함수를 생성할 때만 활성화할 수 있습니다.
-
필수 tenant-id 파라미터: 테넌트 격리 모드를 사용하는 함수는
tenant-id파라미터를 사용하여 간접 호출되어야 합니다. 이 파라미터를 생략하면 함수 간접 호출에 실패합니다. -
실행 역할이 모든 테넌트에 적용: 모든 테넌트에서의 간접 호출은 Lambda 함수의 실행 역할에 정의된 권한을 사용합니다.
-
동시성: 테넌트 격리를 사용할 때 함수의 동시성 또는 규모 조정 동작은 변경되지 않습니다. Lambda는 Lambda 함수에 대해 구성된 1,000개의 동시 실행마다 테넌트 격리 실행 환경(활성 또는 유휴)을 2,500개로 제한합니다.
가격 책정
Lambda가 새 테넌트 격리 실행 환경을 생성할 때 요금이 부과됩니다. 가격은 함수에 할당한 메모리의 양과 사용하는 CPU 아키텍처에 따라 다릅니다. 자세한 내용은 AWS Lambda 요금
격리 모드
다음 표에는 테넌트 격리를 사용하거나 사용하지 않는 Lambda 함수 간의 차이점이 요약되어 있습니다.
| 기능 | 테넌트 격리 사용 | 테넌트 격리 미사용 |
|---|---|---|
| 격리 유형 | 테넌트 수준 격리 | 함수 수준 격리 |
| 환경 재사용 | 실행 환경이 서로 다른 테넌트 간에 재사용되지 않음 | 실행 환경이 동일한 함수의 간접 호출에서 재사용될 수 있음 |
| 데이터 격리 | 다른 테넌트의 데이터에 액세스할 수 없음 | 동일한 함수 버전의 이전 간접 호출 데이터에 액세스할 수 있음 |
| 콜드 스타트 | 테넌트별 환경으로 인해 콜드 스타트 증가 | 환경 재사용으로 인해 콜드 스타트 감소 |
| 가격 책정 | 표준 Lambda 요금 이외의 추가 요금 발생 | 표준 Lambda 요금 발생 |