

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# AWS Lambda MicroVMs 核心概念
<a name="microvms-how-it-works"></a>

AWS Lambda MicroVMs會使用您建立和管理的多種資源類型。此頁面說明每種資源類型、Lambda 如何將 MicroVM 映像建置為快照，以及生命週期說明 MicroVM 在執行時間轉換 – 使用 MicroVMs建置應用程式的基礎。

## 重要概念
<a name="microvms-key-concepts"></a>

**MicroVM**  
MicroVM 是一種資源，代表單一租用戶、使用者工作階段或任務的隔離運算環境。每個 MicroVM 都會執行具有作業系統功能的 Amazon Linux 2023 作業系統，提供近乎即時的啟動和繼續。MicroVMs傳入 HTTPS 連線接收請求，並在閒置時暫停，保留記憶體和磁碟狀態。流量傳回時，暫停的 MicroVM 會繼續。

**MicroVM 映像**  
MicroVM 映像是定義 MicroVM 應用程式環境的資源。當您建立映像時，Lambda 會將映像建置成快照，以啟用近乎即時的啟動 （請參閱[Lambda 如何建置您的映像](#microvms-build-process)下文）。  
若要建立 MicroVM 映像，您需要提供 zip 套件，其中包含上傳至 Amazon S3 的 `Dockerfile`和應用程式成品。您必須使用 Lambda 發佈的受管基礎映像作為基礎 – 使用 `base-image-arn` 參數指定它。您的 `Dockerfile`定義 Lambda 在受管基礎上建置的應用程式層。  
MicroVM 映像已版本化。每個版本代表從特定程式碼成品和基礎映像產生的單一組建。版本會進行建置狀態 (`PENDING` → `IN_PROGRESS` → `SUCCESSFUL`或 `FAILED`)，而成功的版本可以設定為 `ACTIVE`或 `INACTIVE`。如需映像狀態和管理的詳細資訊，請參閱 [MicroVM 映像](microvms-images.md)。

**網路連接器**  
網路連接器是控制流量如何到達 MicroVM 以及 MicroVM 如何到達外部服務的資源。您可以在執行時間將連接器與 MicroVM 建立關聯，以獨立設定傳入和傳出存取。  
建置時間和執行期連接器可能會有所不同，讓您的 MicroVM 在映像建置期間與執行期之間到達不同的環境。  
針對傳入連接埠存取 （使用 JWE 身分驗證）、殼層存取和公有網際網路輸出，使用 Lambda 提供的預設值。建立您自己的網路連接器，透過 VPC 路由傳出流量。

## Lambda 如何建置您的映像
<a name="microvms-build-process"></a>

當您建立或更新 MicroVM 映像時，Lambda 會執行產生 Firecracker 快照的建置程序。此快照會擷取應用程式的完整初始化狀態，為從中執行MicroVMs 啟用近乎即時的啟動和恢復。

建置程序：

1. Lambda 會使用您指定的受管基礎映像佈建新的 MicroVM。

1. Lambda 會執行您的`Dockerfile`指示，以安裝相依性並設定您的環境。

1. Lambda 使用 `ENTRYPOINT`或 `CMD`命令啟動您的應用程式。

1. 如果您啟用`/ready`勾點，Lambda 會等待您的應用程式發出準備訊號 (HTTP 200)。

1. Lambda 會擷取磁碟和記憶體狀態的快照，包括所有執行中的程序。

當您執行 MicroVM 時，Lambda 會從此快照還原它。您的應用程式會從其預先初始化狀態繼續，而無需重複啟動。

如果您的應用程式在建置期間產生唯一內容 （例如唯一 IDs、秘密或網路連線），則該內容會跨從相同映像版本執行的所有 MicroVMs共用。若要避免這種情況，請在 MicroVM 開始使用`/run`生命週期掛鉤後產生唯一內容。如需詳細資訊，請參閱 中的快照相容性一節[MicroVM 映像](microvms-images.md)。

## MicroVM 生命週期
<a name="microvms-lifecycle-overview"></a>

在執行時間，MicroVM 會轉換下列階段：

1. **執行** – 您呼叫 `run-microvm`。Lambda 會從映像快照還原 MicroVM、指派唯一 ID，以及建立端點。MicroVM 從 轉換`PENDING`到 `RUNNING`。

1. **執行**中 – 您的應用程式會透過其端點 URL 接收和處理請求。

1. **暫停** – 在可設定的閒置期間 （或透過 `suspend-microvm` API) 之後，MicroVM 會轉換`SUSPENDING`到 `SUSPENDED`。會保留記憶體和磁碟狀態。

1. **繼續** – MicroVM 會在流量到達 （如果 `autoResumeEnabled=true`) 或您呼叫 `RUNNING`時，從`SUSPENDED`直接轉換回 `resume-microvm`。

1. **終止** – 當您呼叫 `terminate-microvm`或超過最長持續時間`TERMINATED`時，MicroVM 會轉換`TERMINATING`到 。

### 州 (States)
<a name="microvms-states"></a>

下表說明每個 MicroVM 狀態。這些狀態可讓您建置可靠的應用程式，並實作適當的錯誤處理。


| State | 說明 | 
| --- | --- | 
| PENDING | 正在佈建 MicroVM。正在配置資源，且正在載入快照。 | 
| RUNNING | MicroVM 處於作用中狀態，並透過其端點 URL 接受流量。/run 勾點已完成。 | 
| SUSPENDING | MicroVM 正在暫停。/suspend 勾點正在執行。正在檢查點磁碟和記憶體。 | 
| SUSPENDED | MicroVM 已暫停。狀態會保留。不會產生運算費用。可以繼續或終止。 | 
| TERMINATING | MicroVM 正在終止。/terminate 勾點正在執行。正在釋出資源。 | 
| TERMINATED | MicroVM 已終止。這是一個終端狀態。MicroVM 無法繼續或重新啟動。 | 

### 狀態轉換
<a name="microvms-transitions"></a>

下表顯示 MicroVM 狀態之間的有效轉換，以及每次轉換的觸發條件。


| Initial state (初始狀態) | 目標狀態 | 觸發條件 | 
| --- | --- | --- | 
| 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 可能會直接轉換為 ，`TERMINATING`而不會到達 `RUNNING`。在掛鉤中實作逾時和錯誤處理，以避免靜音失敗。