AWS Lambda MicroVMs 핵심 개념

AWS Lambda MicroVMs 핵심 개념 (AWS Lambda MicroVMs core concepts)

AWS Lambda MicroVMs는 여러분이 만들고 관리하는 여러 리소스 유형을 사용해요. 이 페이지는 각 리소스 유형, Lambda가 MicroVM 이미지를 스냅샷으로 빌드하는 방법, 그리고 MicroVM이 런타임에서 거치는 수명주기 상태를 설명해요 — 이것이 MicroVMs로 애플리케이션을 구축하는 기초예요.

핵심 개념

MicroVM

MicroVM은 단일 테넌트, 사용자 세션, 또는 작업을 위한 격리된 컴퓨팅 환경을 나타내는 리소스예요. 각 MicroVM은 운영체제 기능을 갖춘 Amazon Linux 2023 운영체제를 실행하며, 거의 즉각적인 시작과 재개를 제공해요. MicroVM은 인바운드 HTTPS 연결을 통해 요청을 받고, 유휴 상태일 때 일시 중지할 수 있으며 메모리와 디스크 상태를 보존해요. 일시 중지된 MicroVM은 트래픽이 돌아오면 재개돼요.

MicroVM 이미지

MicroVM 이미지는 MicroVM의 애플리케이션 환경을 정의하는 리소스예요. 이미지를 만들면 Lambda가 이를 스냅샷으로 빌드해 거의 즉각적으로 시작할 수 있게 해줘요(아래 'Lambda가 이미지를 빌드하는 방법' 참고).

MicroVM 이미지를 만들려면 Dockerfile과 애플리케이션 아티팩트가 담긴 zip 패키지를 Amazon S3에 업로드해 제공해요. base-image-arn 파라미터로 지정한 Lambda 게시 관리형 기본 이미지를 기반으로 사용해야 해요. Dockerfile은 Lambda가 관리형 베이스 위에 빌드할 애플리케이션 레이어를 정의해요.

MicroVM 이미지는 버전 관리돼요. 각 버전은 특정 코드 아티팩트와 기본 이미지에서 생성된 단일 빌드를 나타내요. 버전은 빌드 상태(PENDING → IN_PROGRESS → SUCCESSFUL 또는 FAILED)를 거치며, 성공한 버전은 ACTIVE 또는 INACTIVE로 설정될 수 있어요. 이미지 상태와 관리에 대한 자세한 내용은 MicroVM 이미지를 참고하세요.

네트워크 커넥터(Network connectors)

네트워크 커넥터는 트래픽이 MicroVM에 도달하는 방식과 MicroVM이 외부 서비스에 도달하는 방식을 제어하는 리소스예요. 커넥터를 런타임에 MicroVM과 연결해서 인바운드·아웃바운드 접근을 독립적으로 구성해요.

빌드 시점과 런타임 시점의 커넥터는 달라질 수 있어서, 이미지 빌드 중과 런타임에 MicroVM이 다른 환경에 도달하게 할 수 있어요.

인바운드 포트 접근(JWE 인증 포함), 셸 접근, 공용 인터넷 이그레스(egress)에는 Lambda 제공 기본값을 사용해요. VPC를 통해 아웃바운드 트래픽을 라우팅하려면 자체 네트워크 커넥터를 만들어요.

Lambda가 이미지를 빌드하는 방법

MicroVM 이미지를 만들거나 업데이트하면 Lambda가 Firecracker 스냅샷을 생성하는 빌드 프로세스를 수행해요. 이 스냅샷은 애플리케이션의 완전히 초기화된 상태를 포착해서, 그 스냅샷에서 실행되는 MicroVM의 거의 즉각적인 시작과 재개를 가능하게 해요.

빌드 프로세스:

  1. Lambda가 지정한 관리형 기본 이미지로 새 MicroVM을 프로비저닝해요.
  2. Lambda가 Dockerfile 지시문을 실행해 의존성을 설치하고 환경을 구성해요.
  3. Lambda가 ENTRYPOINT 또는 CMD 명령으로 애플리케이션을 시작해요.
  4. /ready 훅을 활성화했다면 Lambda가 애플리케이션이 준비(HTTP 200)를 알릴 때까지 기다려요.
  5. Lambda가 실행 중인 모든 프로세스를 포함한 디스크와 메모리 상태의 스냅샷을 포착해요.

MicroVM을 실행하면 Lambda가 이 스냅샷에서 복원해요. 애플리케이션은 시작을 반복하지 않고 사전 초기화된 상태에서 재개돼요.

빌드 중에 애플리케이션이 고유 콘텐츠(예: 고유 ID, 시크릿, 네트워크 연결)를 생성한다면, 그 콘텐츠가 같은 이미지 버전에서 실행되는 모든 MicroVM에 공유돼요. 이를 피하려면 /run 수명주기 훅으로 MicroVM이 시작된 후에 고유 콘텐츠를 생성하세요. 자세한 내용은 MicroVM 이미지의 스냅샷 호환성 섹션을 참고하세요.

MicroVM 수명주기

런타임에서 MicroVM은 다음 단계를 거쳐요.

  1. Run — run-microvm을 호출해요. Lambda가 이미지 스냅샷에서 MicroVM을 복원하고, 고유 ID를 할당하며, 엔드포인트를 만들어요. MicroVM이 PENDING에서 RUNNING으로 전환돼요.
  2. Running — 애플리케이션이 엔드포인트 URL을 통해 요청을 받고 처리해요.
  3. Suspend — 구성 가능한 유휴 기간 후에(또는 suspend-microvm API로) MicroVM이 SUSPENDING을 거쳐 SUSPENDED로 전환돼요. 메모리와 디스크 상태가 보존돼요.
  4. Resume — 트래픽이 도착하면(autoResumeEnabled=true일 때) 또는 resume-microvm을 호출하면 MicroVM이 SUSPENDED에서 RUNNING으로 바로 전환돼요.
  5. Terminate — terminate-microvm을 호출하거나 최대 지속 시간을 초과하면 MicroVM이 TERMINATING을 거쳐 TERMINATED로 전환돼요.

상태

다음 표는 각 MicroVM 상태를 설명해요. 이 상태들로 신뢰할 수 있는 애플리케이션을 구축하고 적절한 오류 처리를 구현할 수 있어요.

State 설명
PENDING MicroVM이 프로비저닝 중이에요. 리소스가 할당되고 스냅샷이 로드되고 있어요.
RUNNING MicroVM이 활성화되어 엔드포인트 URL을 통해 트래픽을 받고 있어요. /run 훅이 완료됐어요.
SUSPENDING MicroVM이 일시 중지되고 있어요. /suspend 훅이 실행 중이고 디스크·메모리가 체크포인트되고 있어요.
SUSPENDED MicroVM이 일시 중지됐어요. 상태가 보존되고 컴퓨팅 요금이 발생하지 않아요. 재개하거나 종료할 수 있어요.
TERMINATING MicroVM이 종료되고 있어요. /terminate 훅이 실행 중이고 리소스가 해제되고 있어요.
TERMINATED MicroVM이 종료됐어요. 종결 상태이며 다시 재개하거나 시작할 수 없어요.

상태 전환

다음 표는 MicroVM 상태 사이의 유효한 전환과 각 전환을 촉발하는 요소를 보여줘요.

초기 상태 목표 상태 촉발
PENDING RUNNING 프로비저닝 완료, /run 훅 성공.
RUNNING SUSPENDING 유휴 기간 초과, 또는 명시적 suspend-microvm API 호출.
SUSPENDING SUSPENDED /suspend 훅 완료, 메모리·디스크 상태 체크포인트됨.
SUSPENDED RUNNING 트래픽 도착(autoResumeEnabled=true) 또는 명시적 resume-microvm API 호출.
RUNNING TERMINATING 명시적 terminate-microvm API 호출, 또는 maximumDurationInSeconds 초과.
SUSPENDED TERMINATING suspendedDurationSeconds 초과, 또는 명시적 terminate-microvm API 호출.
TERMINATING TERMINATED /terminate 훅 완료, 모든 리소스 해제됨.

중요 /run 훅이 실패하거나 타임아웃되면 MicroVM이 RUNNING에 도달하지 않고 직접 TERMINATING으로 전환될 수 있어요. 조용한 실패를 피하려면 훅에서 타임아웃과 오류 처리를 구현하세요.

출처: AWS Lambda 개발자 안내서

더 알아보기 (Learn more)