Lambda 확장을 사용하여 Lambda 함수 보강
Lambda 익스텐션을 사용하여 Lambda 함수를 보강할 수 있습니다. 예를 들어 Lambda 익스텐션을 사용하여 원하는 모니터링, 관찰, 보안 및 거버넌스 도구와 함수를 통합할 수 있습니다. AWS Lambda 파트너
Lambda는 외부 및 내부 익스텐션을 지원합니다. 외부 익스텐션은 실행 환경에서 독립 프로세스로 실행되며 함수 호출이 완전히 처리된 후에도 계속 실행됩니다. 익스텐션은 별도의 프로세스로 실행되므로 함수와 다른 언어로 작성할 수 있습니다. 모든 Lambda 런타임은 익스텐션을 지원합니다.
내부 익스텐션은 런타임 프로세스의 일부로 실행됩니다. 함수는 래퍼 스크립트 또는 JAVA_TOOL_OPTIONS
와 같은 프로세스 내 메커니즘을 사용하여 내부 익스텐션에 액세스합니다. 자세한 내용은 런타임 환경 수정 섹션을 참조하세요.
Lambda 콘솔, AWS Command Line Interface(AWS CLI) 또는 AWS CloudFormation, AWS Serverless Application Model (AWS SAM), Terraform과 같은 IaC(Infrastructure as code) 서비스 및 도구를 사용하여 함수에 익스텐션을 추가할 수 있습니다.
익스텐션에서 소비한 실행 시간(1밀리초 단위)에 대해 요금이 청구됩니다. 자체 익스텐션을 설치하는 데는 비용이 들지 않습니다. 익스텐션의 요금에 대한 자세한 내용은 AWS Lambda 요금
확장에 대한 자습서 및 Lambda 함수와 함께 사용하는 방법은 AWS Lambda 확장 워크숍
주제
실행 환경
Lambda는 안전하고 격리된 런타임 환경을 제공하는 실행 환경에서 함수를 호출합니다. 실행 환경은 함수를 실행하는 데 필요한 리소스를 관리하고 함수의 런타임 및 익스텐션에 대한 수명 주기 지원을 제공합니다.
실행 환경의 수명 주기에는 다음 단계가 포함됩니다.
-
Init
: 이 단계 중에 Lambda는 구성된 리소스로 실행 환경을 만들거나 고정 해제하고, 함수와 모든 계층의 코드를 다운로드하고, 모든 익스텐션을 초기화하고, 런타임을 초기화한 다음 함수의 초기화 코드(기본 핸들러 외부의 코드)를 실행합니다.Init
단계는 첫 번째 호출 중에 발생하거나, 프로비저닝된 동시성을 사용하도록 설정한 경우 함수 호출 전에 발생합니다.Init
단계는 세 가지 하위 단계(Extension init
,Runtime init
,Function init
.)로 나뉩니다. 이러한 하위 단계는 함수 코드가 실행되기 전에 모든 익스텐션과 런타임이 자신의 설정 작업을 완료하도록 보장합니다.Lambda SnapStart가 활성화되면 함수 버전을 게시할 때
Init
단계가 발생합니다. Lambda는 초기화된 실행 환경의 메모리 및 디스크 상태 스냅샷을 저장하고 암호화된 스냅샷을 유지하며 짧은 지연 시간으로 액세스할 수 있도록 스냅샷을 캐싱합니다.beforeCheckpoint
런타임 후크가 있는 경우 코드는Init
단계가 끝날 때 실행됩니다. -
Restore
(SnapStart만 해당): SnapStart 함수를 처음 호출하고 함수가 스케일 업되면 Lambda는 이 함수를 처음부터 초기화하는 대신 유지된 스냅샷에서 새 실행 환경을 재개합니다.afterRestore()
런타임 후크가 있는 경우 코드는Restore
단계가 끝날 때 실행됩니다.afterRestore()
런타임 후크 지속 시간에 대해 요금이 청구됩니다. 런타임(JVM)이 로드되고afterRestore()
런타임 후크가 제한 시간(10초) 내에 완료되어야 합니다. 그렇지 않으면 SnapStartTimeoutException이 발생합니다.Restore
단계가 완료되면 Lambda가 함수 핸들러(호출 단계)를 간접적으로 호출합니다. -
Invoke
: 이 단계에서 Lambda는 함수 핸들러를 호출합니다. 함수의 실행이 완료한 후 Lambda는 다른 함수 호출을 처리할 준비를 합니다. -
Shutdown
: Lambda 함수가 일정 기간 동안 호출을 받지 않으면 이 단계가 트리거됩니다.Shutdown
단계에서 Lambda는 런타임을 종료하고 익스텐션이 완전히 중지되도록 알림을 보낸 다음 환경을 제거합니다. Lambda는 각 익스텐션에Shutdown
이벤트를 보냅니다. 이 이벤트는 환경이 곧 종료됨을 익스텐션에 알립니다.
Init
단계 중에 Lambda는 익스텐션을 포함한 계층을 실행 환경의 /opt
디렉터리로 추출합니다. Lambda는 /opt/extensions/
디렉터리에서 익스텐션을 찾고, 익스텐션을 실행하기 위해 각 파일을 실행 가능한 부트스트랩으로 해석하고, 모든 익스텐션을 병행하여 시작합니다.
성능 및 리소스에 미치는 영향
함수의 익스텐션 크기는 배포 패키지 크기 제한에 포함됩니다. .zip 파일 아카이브의 경우 함수 및 모든 익스텐션의 압축 해제된 총 크기는 압축 해제된 배포 패키지 크기 제한인 250MB를 초과할 수 없습니다.
익스텐션은 CPU, 메모리, 스토리지와 같은 함수 리소스를 공유하므로 함수의 성능에 영향을 줄 수 있습니다. 예를 들어 익스텐션이 컴퓨팅 집약적 작업을 수행하는 경우 함수의 실행 시간이 늘어날 수 있습니다.
각 익스텐션은 Lambda가 함수를 호출하기 전에 초기화를 완료해야 합니다. 따라서 상당한 초기화 시간을 소비하는 익스텐션은 함수 호출의 지연 시간을 증가시킬 수 있습니다.
함수 실행 후 익스텐션에 소요되는 추가 시간을 측정하려면 PostRuntimeExtensionsDuration
함수 지표를 사용하고, 사용된 메모리 증가를 측정하려면 MaxMemoryUsed
지표를 사용합니다. 특정 익스텐션의 영향을 파악하려는 경우 서로 다른 버전의 함수를 나란히 실행하면 됩니다.
권한
익스텐션은 함수와 동일한 리소스에 액세스할 수 있습니다. 익스텐션은 함수와 동일한 환경 내에서 실행되므로 함수와 익스텐션 간에 권한이 공유됩니다.
.zip 파일 아카이브의 경우 AWS CloudFormation 템플릿을 생성하여 AWS Identity and Access Management(IAM) 권한을 포함한 동일한 익스텐션 구성을 여러 함수에 연결하는 작업을 간소화할 수 있습니다.