

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

# MicroVM 映像
<a name="microvms-images"></a>

本節說明如何建置、設定、更新和管理 MicroVM 映像。

MicroVM 映像是定義 MicroVM 檔案系統和應用程式環境的資源。MicroVM 映像包含您的執行時間環境、應用程式程式碼和支援程式，例如背景程序和可觀測性代理程式。若要建立 MicroVM 映像，請提供 zip 套件，其中包含您上傳至 Amazon S3 的 `Dockerfile`和應用程式成品。您的 `Dockerfile` 定義應用程式的封裝方式。Lambda 透過在 Lambda 受管 MicroVM 基礎映像提供的作業系統環境`Dockerfile`上執行 ，來建置您的應用程式容器映像。MicroVM 基礎映像如下所述，請參閱標題為 – 的章節[MicroVM 基礎映像](#microvms-images-base-images)。

您可以更新 MicroVM 基礎映像，以更新 MicroVMs的應用程式程式碼或組態。您觸發的每個更新都會建立新的 MicroVM 映像版本。

## Lambda 如何建置 MicroVM 映像
<a name="microvms-images-creating"></a>

當您建立 MicroVM 映像時，Lambda：
+ 從 Amazon S3 擷取您的封裝成品。
+ 從 Lambda 受管基礎映像啟動新的 MicroVM。
+ 執行 中的指示`Dockerfile`。
+ 使用 `ENTRYPOINT`或 `CMD`指示啟動您的應用程式。
+ 等待初始化完成，由您的生命週期掛鉤發出訊號。
+ 擷取磁碟和記憶體狀態的快照。

一旦快照程序完成，您的 MicroVM 映像就會進入 `CREATED` 狀態。您現在可以使用此 MicroVM 映像來建立 MicroVM，而且每個 MicroVM 映像都可以用來建立多個獨立的 MicroVMs。從 MicroVM 映像執行的 MicroVM 會直接從快照狀態繼續，提供快速的啟動時間。每個 MicroVM 映像都可以用來執行多個 MicroVMs，最高可達您帳戶的可用限制。

如需封裝程式碼和建立第一個 MicroVM 映像的step-by-step演練，請參閱 [建立您的第一個 MicroVM](microvms-getting-started.md)。

## MicroVM 大小
<a name="microvms-images-sizing"></a>

Lambda MicroVMs 使用基準峰值模型，無需為峰值活動調整每個運算環境的大小。您可以設定 MicroVM 的基準運算資源。在尖峰活動期間，您的 MicroVM 可以自動垂直擴展至基準的 4 倍。您在 MicroVM 執行時支付基準費率，並且只支付您主動使用超過基準的項目，每秒計費。

您可以在建立 MicroVM 映像時，透過 `memory` 參數設定基準。vCPU 會隨記憶體按比例擴展 (2 GB = 1 vCPU)。預設基準為 2 GB/1 vCPU。

下表列出可用的大小：


| 基準 | 峰值 | 最大磁碟空間 | 
| --- | --- | --- | 
| 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 基礎映像
<a name="microvms-images-base-images"></a>

MicroVM 基礎映像是 MicroVM 映像的基礎。Lambda 發佈 MicroVM 基礎映像，提供執行 MicroVMs 所需的 Amazon Linux 2023 作業系統和服務元件。當您建立或更新 MicroVM 映像時，Lambda 會從此基礎映像啟動新的 MicroVM，並在此作業系統環境中執行您的`Dockerfile`指示。

Lambda 會定期發行服務受管 MicroVM 基礎映像的新版本，例如在套用安全修補程式時，以更新作業系統或服務元件。根據預設，建立/更新您自己的 MicroVM 映像時，會套用服務受管基礎映像的最新版本。對於疑難排解或偵錯，您可以在使用 `base-image-version` 參數建立您自己的 MicroVM 映像時，選擇性地覆寫服務受管型映像的版本。

基礎映像版本遵循棄用生命週期：
+ **`AVAILABLE`** – 目前，建議使用。
+ **`DEPRECATED`** (60 天） – 存在較新的版本。您仍然可以建置和執行 。
+ **`EXPIRING`** (30 天） – 無法建立新映像。現有的映像仍然可以執行。
+ **`EXPIRED`** – 無法建置或執行。在支援的版本上重建映像。
+ **`RECALLED`** – 因重大安全問題 （罕見） 而立即無法使用。

若要保持最新狀態，請監控 是否有棄用通知，並在發行新的基礎映像版本時重建 MicroVM 映像。

請注意，MicroVM 基礎映像與您在 Dockerfiles 中指定的容器基礎映像不同。雖然前者定義 MicroVMs的作業系統環境，後者則定義封裝應用程式以搭配 Lambda MicroVMs使用時要使用的基本容器映像。如需詳細資訊，請參閱「[容器基礎映像](#microvms-images-container-base)」一節。

使用下列 APIs來探索可用的受管 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 映像建置掛鉤
<a name="microvms-images-build-hooks"></a>

Lambda 提供 MicroVM 映像建置掛鉤，可讓您驗證應用程式正確性，並在 MicroVM 映像建立期間最佳化效能。勾點會在 Lambda 取得用於初始化每個 MicroVM 的快照之前執行。每個勾點都是您的應用程式公開的 HTTP 端點，Lambda 會在建置期間呼叫該端點。透過回應這些請求，您可以控制和驗證 MicroVM 映像建置程序。Lambda 使用 HTTP 狀態碼來判斷勾點是否成功完成。

**重要**  
如果您設定任何勾點，則必須指定應用程式接聽勾點請求的連接埠。


| 勾點 | 路徑 | 詳細資訊 | HTTP 狀態碼 | Timeout (逾時) | 
| --- | --- | --- | --- | --- | 
| /ready | /aws/lambda-microvms/runtime/v1/ready | 在您的應用程式透過 ENTRYPOINT或 啟動之後，在 MicroVM 映像建置期間呼叫 CMD。表示您的應用程式已準備好進行快照的訊號。 | HTTP 503：尚未就緒；Lambda 會重試直到逾時。HTTP 200：初始化完成；Lambda 拍攝快照。 | 1–3600 秒 (readyTimeoutInSeconds) | 
| /驗證 | /aws/lambda-microvms/runtime/v1/validate | 在建置完成後，在從建立的映像啟動的新 MicroVM 上呼叫。確認應用程式在繼續時可正常運作。 | HTTP 503：驗證需要更多時間來完成；Lambda 會重試直到逾時。HTTP 200：已通過驗證。 | 1–3600 秒 (validateTimeoutInSeconds) | 

**重要**  
傳回 HTTP 503 時，請立即傳回，而不是在您等待時保持請求開啟。如果在請求保持開啟時逾時，Lambda 會結束建置。

**注意**  
您也可以使用 /validate hook 來最佳化啟動時間。若要這樣做，請在驗證期間執行模擬承載。這可讓 Lambda 追蹤快照的存取區域，並在 MicroVM 啟動期間最佳化其擷取。

## 更新 MicroVM 映像
<a name="microvms-images-updating"></a>

您可以呼叫 `update-microvm-image` API 來更新現有的 MicroVM 映像。每次更新都會觸發新的 MicroVM 映像版本建置。您通常會將 MicroVM 映像更新為：
+ **部署新的應用程式程式碼** – 指向新的程式碼成品 （上傳至 Amazon S3 的新 zip)，以運送應用程式的新版本。
+ **移至較新的 MicroVM 基礎映像** – 變更 MicroVM 基礎映像 ARN 以升級至較新的 Lambda MicroVM 基礎映像版本。如需詳細資訊，請參閱 [MicroVM 映像修補](#microvms-images-patching) 和 [MicroVM 基礎映像](#microvms-images-base-images)。
+ **變更建置角色** – 當 Lambda 在建置變更期間需要的許可時，例如當您的程式碼成品移至不同的 Amazon S3 儲存貯體，或您開始從私有 ECR 儲存庫提取時，更新建置角色 ARN。
+ **調整執行時間組態** – 變更勾點、環境變數或功能，以重新設定 MicroVM 映像的建置和執行方式。
+ **更新描述** – 變更 MicroVM 映像描述，以記錄此版本中的變更。

下列 CLI 命令顯示如何更新 MicroVM 映像。每個觸發新建置的`update-microvm-image`呼叫都需要 `--base-image-arn`和 `--build-role-arn` 參數，即使您只變更程式碼成品 - 省略它們會導致 `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"
```

## 影像狀態和建置狀態
<a name="microvms-images-states"></a>

每次建立或更新 MicroVM 映像時，Lambda 都會從程式碼成品和基礎映像產生新**版本**。MicroVM 映像可以隨著時間有許多版本，而您從特定版本執行 MicroVMs。

三個獨立狀態會追蹤生命週期的不同層面：
+ **映像狀態** – MicroVM 映像資源的整體生命週期 （建立、準備使用、更新、失敗或刪除）。
+ **版本狀態** – 特定版本的建置進度 （待定、建置、成功或失敗）。檢查 `stateReason`或 CloudWatch 日誌 (`/aws/lambda/microvms/<image-name>`) 以取得失敗詳細資訊。
+ **版本啟用** – 是否允許成功建置的版本執行 MicroVMs。Lambda `ACTIVE`會自動將新版本設定為 ；您可以將版本設定為 `INACTIVE`以停用它，而不將其刪除。


| State | 可能的值 | 由 控制的轉換 | 
| --- | --- | --- | 
| 影像狀態 | 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
```

## 環境變數
<a name="microvms-images-env-vars"></a>

環境變數是透過 `environmentVariables` 欄位在 MicroVM 映像建置時間設定 （最多 50 個變數）。這些會在快照建置程序期間注入容器。您可以在執行新的 MicroVM 時動態傳遞設定承載。如需進一步了解，請參閱執行 MicroVM 的一節。

## MicroVM 映像修補
<a name="microvms-images-patching"></a>

有新的 MicroVM 基礎映像可用時，您可以發出`update-microvm-image`呼叫來觸發具有最新修補程式的 MicroVM 映像組建：省略 `base-image-version`引數 （最新） 或使用最新版本指定 引數。

## 容器基礎映像
<a name="microvms-images-container-base"></a>

Lambda MicroVMs 會以容器的形式在 MicroVM 作業系統環境中執行您的應用程式。您可以使用 定義該容器`Dockerfile`，而 中的 `FROM` 指示會為您的應用程式`Dockerfile`設定*容器基礎映像*。

您可以從 Amazon Linux 2023 (`public.ecr.aws/lambda/microvms:al2023-minimal`) 的 Lambda 基礎容器映像開始，並在上面新增您的`Dockerfile`指示，或使用您自己的基礎容器映像。使用您自己的容器映像時，請驗證下列需求：

### 要求
<a name="microvms-images-container-base-requirements"></a>
+ 容器基礎映像必須與目標 CPU 架構相容。
+ 來自私有 AWS ECR 儲存庫的容器基礎映像需要建置角色具有 `ecr:GetAuthorizationToken`和 `ecr:BatchGetImage`許可。
+ 容器基礎映像必須以 Linux 作業系統為基礎。
+ 容器基礎映像必須可從 Lambda 建置基礎設施 （相同 AWS 帳戶中的公有網際網路或 ECR 儲存庫） 存取。
+ 容器基礎映像必須與快照相容，請參閱以下說明。

### 快照相容的基礎映像
<a name="microvms-images-container-base-snapshot-compat"></a>

隨著 Lambda MicroVMs 從預先初始化的快照啟動每個 MicroVM，基礎映像必須與快照相容。我們建議您在搭配 Lambda MicroVMs 使用您自己的基礎映像[相容性考量](microvms-images-snapshots.md#microvms-images-snapshots-compatibility)時，檢閱 的 章節。

### 使用私有 ECR 映像
<a name="microvms-images-container-base-private"></a>

在 `FROM`的指示中參考您的私有 ECR 容器基礎映像`Dockerfile`：

```
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": "*"
}
```

## 作業系統功能
<a name="microvms-images-os-capabilities"></a>

根據預設，Lambda MicroVMs會使用一組標準 Linux 功能執行。您可以在建立或更新 MicroVM 映像時使用 `additionalOsCapabilities` 欄位授予提升的 Linux 功能。唯一支援的值為 `["ALL"]`。提升的功能可啟用掛載檔案系統、建立網路命名空間或執行 eBPF 程式等操作。功能會在 VM 隔離界限內套用，不會影響主機或其他 MicroVMs。

```
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"]'
```