스냅샷 작업
AWS Lambda MicroVM은 MicroVM 이미지를 빌드할 때 완전히 초기화된 애플리케이션의 Firecracker 스냅샷을 캡처합니다. 이 페이지에서는 스냅샷에 포함된 내용, 동일한 스냅샷을 공유하는 MicroVM 전반의 고유성을 처리하는 방법, 스냅샷 호환 애플리케이션에 대한 모범 사례를 설명합니다.
스냅샷이 캡처하는 내용
Firecracker 스냅샷은 이미지 빌드가 완료되는 시점에 MicroVM에서 다음 상태를 캡처합니다.
-
실행 중인 프로세스의 메모리 상태 -
ENTRYPOINT/CMD에 의해 시작된 모든 프로세스(백그라운드 대몬, cron 작업 및 하위 프로세스 포함) -
디스크 상태 - 빌드 단계에서 작성된 모든 파일(설치된 패키지, 컴파일된 바이너리, 구성 파일)을 포함하는 루트 파일 시스템
-
네트워크 연결 및 파일 설명자 - 초기화된 네트워크 연결, 파일 핸들, 파이프 및 기타 설명자
MicroVM을 실행하면 Lambda는 이 스냅샷에서 MicroVM을 복원합니다. 애플리케이션은 MicroVM 이미지 버전 빌드가 중단된 지점에서 정확히 재개합니다.
호환성 고려 사항
동일한 이미지 버전에서 시작된 모든 MicroVM은 동일한 초기 상태를 공유하므로, Lambda MicroVM을 사용하여 애플리케이션을 구축할 때는 다음 사항을 고려해야 합니다.
-
고유성 - 코드가 이미지 버전 빌드 단계 중 고유한 콘텐츠(고유 ID, 시크릿 또는 유사 무작위성을 위한 엔트로피)를 생성하는 경우 해당 콘텐츠는 동일한 이미지 버전에서 실행되는 모든 MicroVM 간에 공유됩니다. 이미지 빌드 중이 아닌, 새 MicroVM 시작 후 고유한 콘텐츠를 생성합니다.
/run수명 주기 후크를 사용하여 이전에 생성된 고유 콘텐츠를 재설정합니다. -
네트워크 연결 - 이미지 버전에서 MicroVM이 실행될 때 이미지 버전 빌드 단계 중 설정된 연결을 다시 설정해야 할 수 있습니다. 연결 상태를 검증하고 필요한 경우 연결을 다시 설정하세요. 대부분의 경우 AWS SDK에서 생성된 연결이 자동으로 다시 설정됩니다.
스냅샷으로 고유성 처리
동일한 이미지에서 실행되는 모든 MicroVM은 동일한 초기 상태를 공유합니다. MicroVM 간에 고유성을 유지하려면 다음을 수행하세요.
-
이미지 버전 빌드 중이 아닌, MicroVM 시작 후에 고유 ID, 시크릿 및 임의 값을 생성합니다.
/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)을 사용하세요.