MicroVM 이미지

MicroVM 이미지

이 섹션은 MicroVM 이미지를 빌드, 구성, 갱신, 관리하는 방법을 설명합니다.

출처: AWS Lambda 개발자 안내서

본문

MicroVM 이미지는 MicroVM의 파일 시스템과 애플리케이션 환경을 정의하는 리소스입니다. MicroVM 이미지에는 런타임 환경, 애플리케이션 코드, 백그라운드 프로세스·관측 에이전트 같은 지원 프로그램이 포함됩니다. MicroVM 이미지를 만들려면 Dockerfile과 애플리케이션 아티팩트를 담은 zip 패키지를 Amazon S3에 업로드합니다.

Dockerfile은 애플리케이션이 어떻게 패키징되는지 정의합니다. Lambda는 Lambda 관리형 MicroVM 베이스 이미지가 제공하는 운영 체제 환경 위에서 Dockerfile을 실행해 애플리케이션 컨테이너 이미지를 빌드합니다. MicroVM 베이스 이미지는 아래 'MicroVM base images' 섹션에 설명되어 있습니다.

MicroVM 베이스 이미지를 갱신해 MicroVM의 애플리케이션 코드나 구성을 업데이트할 수 있습니다. 트리거한 각 갱신은 새 MicroVM 이미지 버전을 만듭니다.

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

MicroVM 이미지를 만들 때 Lambda는:

  1. Amazon S3에서 패키징된 아티팩트를 검색합니다.
  2. Lambda 관리형 베이스 이미지에서 새 MicroVM을 시작합니다.
  3. Dockerfile의 명령을 실행합니다.
  4. ENTRYPOINT 또는 CMD 명령으로 애플리케이션을 시작합니다.
  5. 수명주기 후크로 신호가 오는 초기화가 완료될 때까지 기다립니다.
  6. 디스크와 메모리 상태의 스냅샷을 캡처합니다.

스냅샷 과정이 완료되면 MicroVM 이미지는 CREATED 상태가 됩니다. 이제 이 MicroVM 이미지로 MicroVM을 만들 수 있으며, 각 MicroVM 이미지는 여러 독립 MicroVM을 만드는 데 사용할 수 있습니다. MicroVM 이미지에서 실행된 MicroVM은 스냅샷된 상태에서 직접 재개되어 빠른 시작 시간을 제공합니다. 각 MicroVM 이미지는 계정에 사용 가능한 한도까지 여러 MicroVM을 실행하는 데 사용할 수 있습니다.

코드 패키징과 첫 MicroVM 이미지 만들기에 대한 단계별 안내는 '첫 MicroVM 만들기'를 참고하세요.

MicroVM 크기 조정

Lambda MicroVMs는 피크 활동에 맞춰 각 컴퓨팅 환경을 오른쪽으로 조정할 필요가 없게 하는 기준-피크(baseline-peak) 모델을 사용합니다. MicroVM의 기준 컴퓨팅 리소스를 구성합니다. 피크 활동 중 MicroVM은 자동으로 기준의 최대 4배까지 수직 확장할 수 있습니다. MicroVM이 실행되는 동안 기준 요율을 지불하고 기준보다 적극적으로 사용한 만큼만 초당 비용을 지불합니다.

MicroVM 이미지를 만들 때 memory 파라미터로 기준을 설정합니다. vCPU는 메모리에 비례해 확장됩니다(2 GB = 1 vCPU). 기본 기준은 2 GB / 1 vCPU입니다.

다음 표는 사용 가능한 크기를 나열합니다.

기준(Baseline) 피크(Peak) 최대 디스크 공간
0.5 GB 메모리, 0.25 vCPU 2 GB 메모리, 1 vCPU 8 GB
1 GB 메모리, 0.5 vCPU 4 GB 메모리, 2 vCPU 8 GB
2 GB 메모리, 1 vCPU (기본) 8 GB 메모리, 4 vCPU 8 GB
4 GB 메모리, 2 vCPU 16 GB 메모리, 8 vCPU 16 GB
8 GB 메모리, 4 vCPU 32 GB 메모리, 16 vCPU 32 GB

MicroVM 베이스 이미지

MicroVM 베이스 이미지는 MicroVM 이미지의 기반 역할을 합니다. Lambda는 Amazon Linux 2023 운영 체제와 MicroVM 실행에 필요한 서비스 구성 요소를 제공하는 MicroVM 베이스 이미지를 게시합니다. MicroVM 이미지를 만들거나 갱신할 때 Lambda는 이 베이스 이미지에서 새 MicroVM을 시작하고 이 운영 체제 환경 안에서 Dockerfile 명령을 실행합니다.

Lambda는 보안 패치 적용 같은 업데이트를 위해 운영 체제나 서비스 구성 요소를 갱신하도록 서비스 관리형 MicroVM 베이스 이미지의 새 버전을 주기적으로 릴리스합니다. 기본적으로 자체 MicroVM 이미지를 만들거나 갱신할 때 서비스 관리형 베이스 이미지의 최신 버전이 적용됩니다. 문제 해결이나 디버깅을 위해 base-image-version 파라미터로 자체 MicroVM 이미지를 만들 때 서비스 관리형 베이스 이미지 버전을 선택적으로 재정의할 수 있습니다.

베이스 이미지 버전은 폐기(deprecation) 수명주기를 따릅니다.

  • AVAILABLE – 현재 버전이며 사용을 권장합니다.
  • DEPRECATED(60일) – 더 새로운 버전이 존재합니다. 여전히 빌드·실행할 수 있습니다.
  • EXPIRING(30일) – 새 이미지를 만들 수 없습니다. 기존 이미지는 여전히 실행할 수 있습니다.
  • EXPIRED – 빌드·실행할 수 없습니다. 지원되는 버전에서 이미지를 다시 빌드하세요.
  • RECALLED – 중요 보안 문제로 즉시 사용 불가(드묾).

최신 상태를 유지하려면 폐기 알림을 모니터링하고 새 베이스 이미지 버전이 릴리스되면 MicroVM 이미지를 다시 빌드하세요.

MicroVM 베이스 이미지는 Dockerfile에 지정하는 컨테이너 베이스 이미지와 구별됩니다. 전자는 MicroVM의 운영 체제 환경을 정의하는 반면, 후자는 Lambda MicroVMs와 함께 사용하도록 애플리케이션을 패키징할 때 사용할 기본 컨테이너 이미지를 정의합니다. 자세한 내용은 'Container base images' 섹션을 참고하세요.

다음 API로 사용 가능한 관리형 MicroVM 베이스 이미지와 그 버전을 발견할 수 있습니다.

# List all managed MicroVM base images
aws lambda-microvms list-managed-microvm-images

# List the versions of a specific managed MicroVM base image
aws lambda-microvms list-managed-microvm-image-versions \
  --image-identifier arn:aws:lambda:us-east-1:aws:microvm-image:al2023-1

MicroVM 이미지 빌드 후크

Lambda는 MicroVM 이미지 생성 중 애플리케이션 정확성을 검증하고 성능을 최적화할 수 있는 MicroVM 이미지 빌드 후크를 제공합니다. 후크는 Lambda가 각 MicroVM을 초기화하는 데 사용하는 스냅샷을 찍기 전에 실행됩니다. 각 후크는 애플리케이션이 노출하고 Lambda가 빌드 중 호출하는 HTTP 엔드포인트입니다. 이 요청에 응답함으로써 MicroVM 이미지 빌드 과정을 제어하고 검증합니다. Lambda는 HTTP 상태 코드로 후크가 성공적으로 완료되었는지 판단합니다.

어떤 후크든 구성하면 애플리케이션이 후크 요청을 수신하는 포트를 지정해야 합니다.

후크 경로 세부 사항 HTTP 상태 코드 타임아웃
/ready /aws/lambda-microvms/runtime/v1/ready MicroVM 이미지 빌드 중, 애플리케이션이 ENTRYPOINT 또는 CMD를 통해 시작된 뒤 호출됩니다. 애플리케이션이 스냅샷을 찍을 준비가 되었음을 신호합니다. HTTP 503: 아직 준비 안 됨. Lambda가 타임아웃까지 재시도합니다. HTTP 200: 초기화 완료. Lambda가 스냅샷을 찍습니다. 1–3600초 (readyTimeoutInSeconds)
/validate /aws/lambda-microvms/runtime/v1/validate 빌드가 완료된 뒤, 생성된 이미지에서 시작된 새 MicroVM에서 호출됩니다. 재개했을 때 애플리케이션이 올바르게 작동하는지 확인합니다. HTTP 503: 검증에 더 많은 시간이 필요. Lambda가 타임아웃까지 재시도합니다. HTTP 200: 검증 통과. 1–3600초 (validateTimeoutInSeconds)

HTTP 503을 반환할 때는 요청을 열어둔 채 기다리는 대신 즉시 반환하세요. 요청이 열린 상태로 타임아웃이 경과하면 Lambda는 빌드를 종료합니다.

/validate 후크로 시작 시간을 최적화할 수도 있습니다. 그러려면 검증 중에 모의(mock) 페이로드를 실행하세요. 이렇게 하면 Lambda가 스냅샷의 접근된 영역을 추적하고 MicroVM 시작 중 해당 영역의 검색을 최적화할 수 있습니다.

MicroVM 이미지 갱신

update-microvm-image API를 호출해 기존 MicroVM 이미지를 갱신할 수 있습니다. 각 갱신은 새 MicroVM 이미지 버전 빌드를 트리거합니다. 보통 다음을 위해 MicroVM 이미지를 갱신합니다.

  • 새 애플리케이션 코드 배포 – 새 코드 아티팩트(Amazon S3에 업로드한 새 zip)를 가리켜 애플리케이션의 새 버전을 출시합니다.
  • 더 새로운 MicroVM 베이스 이미지로 이동 – MicroVM 베이스 이미지 ARN을 변경해 Lambda MicroVM 베이스 이미지의 더 새로운 버전으로 업그레이드합니다. 자세한 내용은 'MicroVM 이미지 패칭'과 'MicroVM 베이스 이미지'를 참고하세요.
  • 빌드 역할 변경 – Lambda가 빌드 중 필요한 권한이 변경될 때(예: 코드 아티팩트가 다른 Amazon S3 버킷으로 이동하거나 프라이빗 ECR 저장소에서 가져오기 시작) 빌드 역할 ARN을 갱신합니다.
  • 런타임 구성 조정 – MicroVM 이미지가 빌드·실행되는 방식을 재구성하도록 후크, 환경 변수, 기능(capabilities)을 변경합니다.
  • 설명 갱신 – 이 버전에서 변경된 사항을 기록하도록 MicroVM 이미지 설명을 바꿉니다.

다음 CLI 명령은 MicroVM 이미지를 갱신하는 방법을 보여줍니다. --base-image-arn과 --build-role-arn 파라미터는 코드 아티팩트만 변경할 때조차 새 빌드를 트리거하는 모든 update-microvm-image 호출에 필수입니다. 생략하면 ValidationException이 발생합니다.

aws lambda-microvms update-microvm-image \
  --image-identifier arn:aws:lambda:us-east-1:123456789012:microvm-image:my-microvm-image \
  --code-artifact uri=s3://my-bucket/deployments/app-v2.zip \
  --base-image-arn arn:aws:lambda:us-east-1:aws:microvm-image:al2023-1 \
  --build-role-arn arn:aws:iam::123456789012:role/MicrovmBuildRole \
  --description "Updated with v2 application code"

이미지 상태와 빌드 상태

MicroVM 이미지를 만들거나 갱신할 때마다 Lambda는 코드 아티팩트와 베이스 이미지에서 빌드한 새 버전을 생성합니다. MicroVM 이미지는 시간이 지나면서 많은 버전을 가질 수 있으며 특정 버전에서 MicroVM을 실행합니다.

수명주기의 서로 다른 측면을 추적하는 세 가지 독립 상태가 있습니다.

  • 이미지 상태 – MicroVM 이미지 리소스의 전체 수명주기(생성 중, 사용 준비, 갱신 중, 실패, 삭제 중).
  • 버전 상태 – 특정 버전의 빌드 진행(PENDING, IN_PROGRESS, SUCCESSFUL, FAILED). 실패 세부 정보는 stateReason 또는 CloudWatch 로그(/aws/lambda-microvms/<image-name>)를 확인하세요.
  • 버전 활성화(Version activation) – 성공적으로 빌드된 버전이 MicroVM을 실행하도록 허용되는지 여부. Lambda는 새 버전을 ACTIVE로 자동 설정합니다. 버전을 삭제하지 않고 비활성화하려면 INACTIVE로 설정할 수 있습니다.
상태 가능한 값 전환 제어
이미지 상태 CREATING, CREATED, CREATION_FAILED, UPDATING, UPDATED, UPDATE_FAILED, DELETING, DELETED, DELETION_FAILED Lambda (자동)
버전 상태 PENDING, IN_PROGRESS, SUCCESSFUL, FAILED Lambda (자동)
버전 활성화 ACTIVE, INACTIVE 사용자 (update-microvm-image-version --state)

버전에서 MicroVM을 실행하려면 이미지 상태가 CREATED 또는 UPDATED, 버전 상태가 SUCCESSFUL, 버전이 ACTIVE여야 합니다.

이 상태들은 독립적입니다. CREATED 상태의 이미지에 상태가 FAILED인 버전이 포함될 수 있습니다.

# De-activate a version
aws lambda-microvms update-microvm-image-version \
  --image-identifier my-image \
  --image-version 1.0 \
  --state INACTIVE

환경 변수

환경 변수는 environmentVariables 필드(최대 50개 변수)를 통해 MicroVM 이미지 빌드 시점에 설정됩니다. 이 변수들은 스냅샷 빌드 과정 중 컨테이너에 주입됩니다. 새 MicroVM을 실행할 때 동적으로 설정된 페이로드를 전달할 수 있습니다. 자세한 내용은 실행에 대한 섹션을 참고하세요.

MicroVM 이미지 패칭

새 MicroVM 베이스 이미지를 사용할 수 있을 때 update-microvm-image 호출을 실행해 최신 패치로 MicroVM 이미지 빌드를 트리거할 수 있습니다. base-image-version 인자를 생략해 최신을 사용하거나, 인자에 최신 버전을 지정해 사용하면 됩니다.

컨테이너 베이스 이미지

Lambda MicroVMs는 MicroVM 운영 체제 환경 안에서 컨테이너로 애플리케이션을 실행합니다. Dockerfile로 그 컨테이너를 정의하며, Dockerfile의 FROM 명령이 애플리케이션의 컨테이너 베이스 이미지를 설정합니다.

Amazon Linux 2023용 Lambda 베이스 컨테이너 이미지(public.ecr.aws/lambda/microvms:al2023-minimal)로 시작해 그 위에 Dockerfile 명령을 추가하거나, 자체 베이스 컨테이너 이미지를 사용할 수 있습니다. 자체 컨테이너 이미지를 사용할 때는 다음 요구 사항을 검증하세요.

요구 사항

  • 컨테이너 베이스 이미지는 대상 CPU 아키텍처와 호환되어야 합니다.
  • 프라이빗 AWS ECR 저장소의 컨테이너 베이스 이미지는 빌드 역할에 ecr:GetAuthorizationToken과 ecr:BatchGetImage 권한이 있어야 합니다.
  • 컨테이너 베이스 이미지는 Linux 운영 체제를 기반으로 해야 합니다.
  • 컨테이너 베이스 이미지는 Lambda 빌드 인프라에서 접근할 수 있어야 합니다(공용 인터넷 또는 같은 AWS 계정의 ECR 저장소).
  • 컨테이너 베이스 이미지는 스냅샷 호환이어야 합니다. 아래 지침을 참고하세요.

스냅샷 호환 베이스 이미지

Lambda MicroVMs는 사전 초기화된 스냅샷에서 각 MicroVM을 시작하므로 베이스 이미지는 스냅샷 호환이어야 합니다. Lambda MicroVMs와 함께 자체 베이스 이미지를 사용할 때의 '호환성 고려 사항' 섹션을 검토할 것을 권장합니다.

프라이빗 ECR 이미지 사용

Dockerfile의 FROM 명령에서 프라이빗 ECR 컨테이너 베이스 이미지를 참조하세요.

FROM 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-base:latest
WORKDIR /app
COPY . .
CMD ["./my-app"]

빌드 역할에 다음 권한을 추가하세요.

{
  "Effect": "Allow",
  "Action": [
    "ecr:GetAuthorizationToken",
    "ecr:BatchCheckLayerAvailability",
    "ecr:GetDownloadUrlForLayer",
    "ecr:BatchGetImage"
  ],
  "Resource": "*"
}

운영 체제 기능(Capabilities)

기본적으로 Lambda MicroVMs는 표준 Linux 기능 집합으로 실행됩니다. MicroVM 이미지를 만들거나 갱신할 때 additionalOsCapabilities 필드로 상승된 Linux 기능을 부여할 수 있습니다. 지원되는 값은 ["ALL"]뿐입니다. 상승된 기능은 파일 시스템 마운트, 네트워크 네임스페이스 생성, eBPF 프로그램 실행 같은 작업을 가능하게 합니다. 기능은 VM 격리 경계 안에서 적용되며 호스트나 다른 MicroVM에는 영향을 주지 않습니다.

aws lambda-microvms create-microvm-image \
  --name my-network-tool \
  --code-artifact uri=s3://my-bucket/app.zip \
  --base-image-arn arn:aws:lambda:us-east-1:aws:microvm-image:al2023-1 \
  --build-role-arn arn:aws:iam::123456789012:role/BuildRole \
  --additional-os-capabilities '["ALL"]'

더 알아보기 (Learn more)