本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用快照
當 AWS Lambda MicroVMs 建置 MicroVM 映像時,它會擷取完全初始化應用程式的 Firecracker 快照。此頁面說明快照包含的內容、如何處理共用相同快照MicroVMs 的唯一性,以及快照相容應用程式的最佳實務。
快照擷取的內容
Firecracker 快照會在映像建置完成時,從您的 MicroVM 擷取下列狀態:
-
執行中程序的記憶體狀態 –
ENTRYPOINT/ 啟動的所有程序CMD,包括背景精靈、cron 任務和子程序。 -
磁碟狀態 – 根檔案系統,包括建置階段期間寫入的所有檔案 (已安裝套件、編譯的二進位檔、組態檔案)。
-
網路連線和檔案描述項 – 任何初始化的網路連線、檔案控點、管道和其他描述項。
當您執行 MicroVM 時,Lambda 會從此快照還原它。您的應用程式會在 MicroVM 映像版本建置中斷的確切位置繼續。
相容性考量
由於從相同映像版本啟動的所有 MicroVMs都共用相同的初始狀態,因此在使用 Lambda MicroVMs建置應用程式時,請考慮下列事項:
-
唯一性 – 如果您的程式碼在映像版本建置階段產生唯一內容 (唯一 IDs、秘密或虛擬隨機性熵),則該內容會跨所有從相同映像版本執行MicroVMs 共用。在新的 MicroVM 啟動後產生唯一內容,而不是在映像建置期間。使用
/runlifecycle hook 重設先前產生的唯一內容。 -
網路連線 – 從映像版本執行 MicroVM 時,可能需要重新建立映像版本建置階段期間建立的連線。驗證連線狀態並視需要重新建立連線。在大多數情況下, AWS SDKs連線會自動重新建立。
使用快照處理唯一性
所有 MicroVMs相同的映像執行,共用相同的初始狀態。若要在 MicroVMs之間維持唯一性:
-
在 MicroVM 啟動後而非在映像版本建置期間產生唯一 IDs、秘密和隨機值。使用
/runlifecycle hook 重設任何唯一狀態。 -
針對您的程式設計語言使用密碼編譯安全虛擬隨機數字產生器 (CSPRNGs)。確認您的語言標準密碼編譯程式庫從
/dev/random裝置或/dev/urandom裝置接收其熵。這是 Java 11+ (SecureRandom 程式庫)、Node.js (crypto.randomBytes 程式庫)、Python 3.12+ (Secrets.SystemRandom 程式庫) 和 Dotnet8+ (Cryptography.RandomNumberGenerator 程式庫) 等熱門程式設計語言的密碼編譯程式庫的預設行為。與 MicroVM 映像快照搭配使用時,從 讀取/dev/random或/dev/urandom維持隨機性的軟體。 -
如果您的應用程式程式碼使用 OpenSSL,請使用 AWS提供的基礎容器映像
public.ecr.aws/lambda/microvms:al2023-minimal來建置 MicroVM 映像。此映像包含與快照相容的 OpenSSL AWS修補版本。如果您想要使用自己的基礎映像搭配 OpenSSL,請使用 Amazon Linux 2023 套件清單中列出的 OpenSSL 修補版本 (openssl-snapsafe-libs)。