스냅샷 작업

스냅샷 작업

AWS Lambda MicroVMs가 MicroVM 이미지를 빌드할 때 완전히 초기화된 애플리케이션의 Firecracker 스냅샷을 캡처해요. 이 페이지에서는 스냅샷에 무엇이 포함되는지, 같은 스냅샷을 공유하는 MicroVM 간에 고유성(uniqueness)을 처리하는 방법, 스냅샷 호환 애플리케이션을 위한 모범 사례를 설명해요.

출처: AWS Lambda 개발자 안내서

본문

스냅샷이 캡처하는 것

Firecracker 스냅샷은 이미지 빌드가 완료되는 시점에 MicroVM에서 다음 상태를 캡처해요.

  • 실행 중인 프로세스의 메모리 상태 – ENTRYPOINT/CMD가 시작한 모든 프로세스(백그라운드 데몬, cron 작업, 자식 프로세스 포함)예요.
  • 디스크 상태 – 빌드 단계 동안 작성된 모든 파일(설치된 패키지, 컴파일된 바이너리, 구성 파일)을 포함한 루트 파일시스템이에요.
  • 네트워크 연결 및 파일 디스크립터 – 초기화된 모든 네트워크 연결, 파일 핸들, 파이프 및 기타 디스크립터예요.

MicroVM을 실행하면 Lambda가 이 스냅샷에서 복원해요. 애플리케이션은 MicroVM 이미지 버전 빌드가 끝난 지점에서 정확히 이어서 재개돼요.

호환성 고려 사항

같은 이미지 버전에서 시작된 모든 MicroVM이 동일한 초기 상태를 공유하므로, Lambda MicroVMs로 애플리케이션을 빌드할 때 다음을 고려하세요.

  • 고유성 – 코드가 이미지 버전 빌드 단계에서 고유 콘텐츠(고유 ID, 시크릿, 의사 난수용 엔트로피)를 생성한다면 그 콘텐츠는 같은 이미지 버전에서 실행된 모든 MicroVM이 공유해요. 고유 콘텐츠는 이미지 빌드 중이 아니라 새 MicroVM이 시작된 후에 생성하세요. /run 라이프사이클 훅을 사용해서 이전에 생성된 고유 콘텐츠를 리셋하세요.
  • 네트워크 연결 – 이미지 버전 빌드 단계에서 설정된 연결은 MicroVM이 이미지 버전에서 실행될 때 다시 설정해야 할 수 있어요. 연결 상태를 검증하고 필요에 따라 연결을 다시 설정하세요. 대부분의 경우 AWS SDK가 만든 연결은 자동으로 다시 설정돼요.

스냅샷으로 고유성 처리

같은 이미지에서 실행된 모든 MicroVM은 동일한 초기 상태를 공유해요. MicroVM 간에 고유성을 유지하려면:

  • 고유 ID, 시크릿, 임의 값은 MicroVM이 시작된 후에 생성하고, 이미지 버전 빌드 중에는 생성하지 마세요. /run 라이프사이클 훅을 사용해서 고유 상태를 리셋하세요.
  • 프로그래밍 언어에 대해 암호학적으로 안전한 의사 난수 생성기(CSPRNG)를 사용하세요. 언어 표준 암호화 라이브러리가 /dev/random 장치 또는 /dev/urandom 장치에서 엔트로피를 받는지 확인하세요. 이는 Java 11+(SecureRandom 라이브러리), Node.js(crypto.randomBytes 라이브러리), Python 3.12+(Secrets.SystemRandom 라이브러리), Dotnet8+(Cryptography.RandomNumberGenerator 라이브러리) 같은 인기 프로그래밍 언어의 암호화 라이브러리 기본 동작이에요. /dev/random이나 /dev/urandom에서 읽는 소프트웨어는 MicroVM 이미지 스냅샷과 함께 사용할 때도 무작위성을 유지해요.
  • 애플리케이션 코드가 OpenSSL을 사용한다면, public.ecr.aws/lambda/microvms:al2023-minimal의 AWS 제공 기본 컨테이너 이미지를 사용해서 MicroVM 이미지를 빌드하세요. 이 이미지에는 스냅샷과 호환되는 AWS 패치 버전의 OpenSSL이 포함돼 있어요. OpenSSL과 함께 자체 기본 이미지를 사용하려면 Amazon Linux 2023 패키지 목록에 나열된 패치 버전의 OpenSSL(openssl-snapsafe-libs)을 사용하세요.

더 알아보기 (Learn more)

Lambda MicroVMs에 대한 자세한 내용은 AWS Lambda MicroVMs를 참고하세요.