Lambda 실행
Lambda가 사용자를 대신하여 함수를 실행할 때 코드 실행에 필요한 기본 시스템의 프로비저닝과 구성 모두를 관리합니다. 이를 통해 개발자는 기본 시스템의 관리 작업이 아니라 비즈니스 로직과 코드 작성에 집중할 수 있습니다.
Lambda 서비스는 제어 영역 및 데이터 영역으로 나뉩니다. 각 영역의 용도는 서비스마다 다릅니다. 제어 영역은 관리 API(예:CreateFunction
, UpdateFunctionCode
, PublishLayerVersion
등)를 제공하고 모든 AWS 서비스와의 통합을 관리합니다. Lambda의 제어 영역에 대한 통신은 TLS에 의해 전송 중에 보호됩니다. Lambda의 제어 영역 내에 저장된 모든 고객 데이터는 AWS KMS를 사용하여 미사용 시 암호화되며, 이는 무단 공개 또는 변조로부터 데이터를 보호하도록 설계되었습니다.
데이터 영역은 Lambda 함수의 호출을 트리거하는 Lambda의 호출 API입니다. Lambda 함수가 호출되면 데이터 영역은 AWS Lambda 작업자(또는 단순히 Amazon EC2
Lambda 실행 환경
각 호출은 Lambda의 호출 서비스에 의해 요청을 서비스할 수 있는 작업자의 실행 환경으로 라우팅됩니다. 고객과 다른 사용자는 데이터 영역을 통해서만 실행 환경과의 인바운드/수신 네트워크 통신을 직접 시작할 수 있습니다. 이렇게 하면 실행 환경과의 통신을 인증하고 승인할 수 있습니다.
실행 환경은 특정 함수 버전용으로 예약되어 있으며 함수 버전, 함수 또는 AWS 계정에서 재사용할 수 없습니다. 즉, 두 가지 버전이 있을 수 있는 단일 함수로 최소 두 개의 고유한 실행 환경을 만들 수 있습니다.
각 실행 환경은 한 번에 하나의 동시 호출에만 사용할 수 있으며, 성능상의 이유로 동일한 함수 버전의 여러 호출에서 재사용할 수 있습니다. 여러 요소(예: 호출 속도, 함수 구성 등)에 따라 지정된 함수 버전에 대해 하나 이상의 실행 환경이 존재할 수 있습니다. 이러한 접근 방식을 통해 Lambda는 고객에게 함수 버전 수준의 격리를 제공할 수 있습니다.
Lambda는 현재 함수 버전의 실행 환경 내에서 호출을 격리하지 않습니다. 즉, 한 번의 호출이 다음 호출에 영향을 줄 수 있는 상태(예: /tmp에 기록된 파일 또는 메모리 내 데이터)를 남길 수 있습니다. Lambda는 한 호출이 다른 호출에 영향을 주지 않도록 별도의 함수를 추가로 생성하는 것을 권장합니다. 예를 들어 오류가 발생하기 쉬운 복잡한 구문 분석 작업에 대해 고유한 함수를 만들고 보안에 중요한 작업을 수행하지 않는 함수를 재사용할 수 있습니다. Lambda는 현재 고객이 생성할 수 있는 함수의 수를 제한하지 않습니다. 한도에 대한 자세한 내용은 Lambda 할당량 페이지를 참조하십시오.
실행 환경은 Lambda에 의해 지속적으로 모니터링 및 관리되며, 다음을 포함하되 이에 국한되지 않는 여러 이유로 생성 또는 제거될 수 있습니다.
-
새 호출이 도착했으며 적절한 실행 환경이 없음
-
내부 런타임 또는 작업자 소프트웨어 배포가 발생함
-
새 프로비저닝된 동시성 구성이 게시됨
-
실행 환경 또는 작업자의 임대 시간이 최대 수명에 가까워지거나 초과되었습니다.
-
기타 내부 워크로드 재분배 프로세스
고객은 함수 구성에 프로비저닝된 동시성을 구성하여 함수 버전에 대해 존재하는 사전 프로비저닝된 실행 환경의 수를 관리할 수 있습니다. 이렇게 구성되면 Lambda는 구성된 실행 환경 수가 항상 존재하도록 생성, 관리 및 보장합니다. 이를 통해 고객은 규모에 관계없이 서버리스 애플리케이션의 시작 성능을 보다 효과적으로 제어할 수 있습니다.
프로비저닝된 동시성 구성을 통해서만 고객은 호출에 응답하여 Lambda에서 생성하거나 관리하는 실행 환경의 수를 결정적으로 제어할 수 있습니다.
실행 역할
또한 각 Lambda 함수는 함수와 관련된 제어 영역 및 데이터 영역 작업을 수행할 때 Lambda 서비스에서 위임하는 IAM 역할인 실행 역할로 구성해야 합니다. Lambda 서비스는 이 역할을 위임하여 함수를 호출하는 동안 환경 변수로 사용할 수 있는 임시 보안 자격 증명을 가져옵니다. 성능상의 이유로 Lambda 서비스는 이러한 자격 증명을 캐시하여 동일한 실행 역할을 사용하는 여러 실행 환경에서 다시 사용할 수 있습니다.
최소 권한 원칙을 준수하기 위해 Lambda는 각 함수에 고유한 역할이 있으며 필요한 최소 권한 집합으로 구성할 것을 권장합니다.
또한 Lambda 서비스는 VPC 기능에 대한 탄력적 네트워크 인터페이스(ENI) 생성 및 구성, Amazon CloudWatch Application Insights
이 주제에 대한 자세한 내용은 AWS Lambda 실행 역할 설명서 페이지를 참조하세요.
Lambda MicroVM 및 작업자
Lambda는 AWS Lambda 작업자라는 Amazon EC2 인스턴스 플릿에서 실행 환경을 생성합니다. 작업자는 고객에게 표시되지 않는 별도의 격리된 AWS 계정에서 Lambda에 의해 시작되고 관리되는 베어 메탈
공동 책임 모델의 일부인 Lambda는 작업자의 보안 구성, 제어 및 패치 수준을 유지 관리할 책임이 있습니다. Lambda 팀은 Amazon Inspector
그림 3 – AWS Lambda 작업자의 격리 모델
작업자의 임대 수명은 최대 14시간입니다. 작업자가 최대 임대 시간에 가까워지면 더 이상 호출이 라우팅되지 않고, MVM이 정상적으로 종료되며, 기본 Worker 인스턴스가 종료됩니다. Lambda는 플릿 수명의 수명 주기 활동을 지속적으로 모니터링하고 경보를 보냅니다.
작업자와의 모든 데이터 영역 통신은 Galois/Counter Mode(AES-GCM)의 고급 암호화 표준을 사용하여 암호화됩니다. Lambda의 서비스 계정에서 Lambda가 관리하는 네트워크 격리 Amazon VPC에 호스팅되므로 고객은 데이터 영역 작업을 통해서만 작업자와 직접 상호 작용할 수 있습니다.
작업자가 새 실행 환경을 만들어야 하는 경우, 고객 함수 아티팩트에 액세스할 수 있는 시간 제한 권한이 부여됩니다. 이 아티팩트는 Lambda의 실행 환경과 작업자를 위해 특별히 최적화되었습니다. ZIP 형식을 사용하여 업로드한 함수 코드는 한 번 최적화된 후 AWS 관리형 키와 AES-GCM을 사용하여 암호화된 형식으로 저장됩니다.
컨테이너 이미지 형식을 사용하여 Lambda에 업로드된 함수도 최적화됩니다. 컨테이너 이미지는 먼저 원본 소스에서 다운로드되어 고유한 청크로 최적화된 다음, AES-CTR