

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

# 疑難排解
<a name="microvms-troubleshooting"></a>

本節說明如何偵錯和疑難排解使用 AWS Lambda MicroVMs時的常見問題。

## Shell 存取
<a name="microvms-troubleshooting-shell"></a>

使用 Shell 存取直接連線至執行中的 MicroVM，以進行偵錯和疑難排解。

您可以透過兩種方式連線到 MicroVM shell：
+ **主控台** – 在 Lambda 主控台中選取您的 MicroVM，然後選擇連線。
+ **CLI** – 使用 產生 shell 權杖`create-microvm-shell-auth-token`，然後使用權杖來建立連線。

產生 shell 字符，然後連接：

```
aws lambda-microvms create-microvm-shell-auth-token \
  --microvm-identifier <id> --expiration-in-minutes 30
# In Console: select MicroVM -> Connect
# In shell: ctr task ls, then ctr task exec -t --exec-id shell <id> /bin/sh
```

MicroVM 必須已使用`SHELL_INGRESS`網路連接器 () 執行`arn:aws:lambda:{{us-east-1}}:aws:network-connector:aws-network-connector:SHELL_INGRESS`。如果 MicroVM 未使用此連接器啟動， `create-microvm-shell-auth-token`會傳回 `ValidationException`。

對於其他問題：
+ 檢查已終止 MicroVMs`get-microvm`回應中的 `terminationMessage` 欄位。
+ 檢查 CloudWatch 組建日誌是否有映像建立問題。
+ 檢查 `StateReason` 欄位是否有處於 `FAILED` 狀態的網路連接器。

## 疑難排解
<a name="microvms-troubleshooting-troubleshooting"></a>

本節提供使用 Lambda MicroVMs 時常見問題的解決方案。


| 徵狀 | 可能的原因和解決方案 | 
| --- | --- | 
| 映像建置失敗 (CREATION\_FAILED) | 在 檢查建置日誌/aws/lambda/microvms/<image-name>。驗證Dockerfile語法、Amazon S3 許可和基礎映像可用性。在docker build本機執行 以重現。 | 
| MicroVM 卡在 PENDING | 請稍候再重試。如果持續存在，請檢查服務運作狀態。確認您的並行配額未用盡。 | 
| 應用程式在繼續後沒有回應 | 實作/resume生命週期掛鉤以重新建立連線並驗證狀態。確認您的應用程式在繼續後繫結至連接埠 8080 （或設定的連接埠）。 | 
| 502 來自端點的錯誤閘道 | 應用程式當機或未接聽。檢查執行時間日誌。在 CMD中驗證 EXPOSE和 Dockerfile。如果自動繼續，MicroVM 可能無法繼續 （透過 檢查狀態get-microvm)。 | 
| 429 請求過多 | 超過請求率。以指數退避和抖動重試。 | 
| 連線捨棄 | 閒置逾時已觸發。實作 ping/pong 保持連線。或在閒置政策maxIdleDurationSeconds中延伸。 | 
| 端點上的高延遲 | 頻寬飽和。檢查流量是否超過 MicroVM 大小的頻寬功能。擴展到更大的大小。 | 
| 驗證字符已過期 (403) | 字符具有可設定的過期時間。在舊權杖過期之前產生新權杖。在用戶端中實作權杖重新整理邏輯。 | 
| VPC 輸出無法運作 | 確認網路連接器處於 ACTIVE 狀態。檢查安全群組規則是否允許傳出流量。確認子網路具有目標資源的路由。 | 

## 常見錯誤 （影像建立）
<a name="microvms-troubleshooting-image-errors"></a>


| 錯誤 | 原因 | 解決方案 | 
| --- | --- | --- | 
| S3\_ACCESS\_DENIED | 組建角色缺少擷取 Amazon S3 成品的許可。 | 新增成品儲存貯體的s3:GetObject許可。 | 
| S3\_NO\_SUCH\_KEY | 成品金鑰不存在於儲存貯體中。 | 驗證 Amazon S3 路徑是否正確。 | 
| S3\_NO\_SUCH\_BUCKET | Amazon S3 儲存貯體不存在。 | 檢查儲存貯體名稱並確認其已建立。 | 
| S3\_INVALID\_OBJECT | Glacier non-directly-accessible類別中的成品。 | 將成品移至標準儲存類別。 | 
| S3\_CROSS\_REGION\_ACCESS\_DENIED | 成品與 MicroVM 映像位於不同的區域。 | 確保您的成品與 MicroVM 映像位於相同的區域。 | 
| ARCHIVE\_DOCKERFILE\_NOT\_FOUND | Dockerfile 根目錄中缺少 Zip 封存。 | 將 Dockerfile新增至 zip 封存的根目錄。 | 
| ARCHIVE\_INVALID | 封存檔案不是有效的 ZIP 或已損毀。 | 重新建立 zip 封存並重新上傳。 | 
| CONTAINER\_BUILD\_FAILED | 無效Dockerfile的指示、缺少檔案或語法錯誤。 | 使用 在Dockerfile本機偵錯您的 docker build。 | 
| DISK\_STORAGE\_FULL | MicroVM 在建置期間耗盡儲存空間。 | 減少成品大小或聯絡支援。 | 
| INTERNAL\_PLATFORM\_ERROR | 發生內部錯誤。 | 重試操作。如果持續存在，請聯絡 支援。 | 

## 網路連接器疑難排解
<a name="microvms-troubleshooting-connector-errors"></a>


| 錯誤碼 | 原因 | 解決方案 | 
| --- | --- | --- | 
| DisallowedByVpcEncryptionControl | VPC 具有加密控制政策，可防止未加密的網路介面或流量。Lambda 無法建立ENIs。 | 將 Lambda 新增至 VPC 加密控制排除清單。如果無法排除，請使用未套用限制性加密控制的 VPC 或子網路。 | 
| Ec2RequestLimitExceeded | Lambda 會發出 EC2 API 呼叫 （例如，CreateNetworkInterface、DescribeSubnets) 來設定連線。太多並行 EC2 API 呼叫會導致限流。 | 在短暫延遲後重試操作。如果持續存在，請減少並行網路連接器操作，或透過 AWS Support 請求提高 EC2 API 限流限制。 | 
| InsufficientRolePermissions | 運算子角色缺少必要的 EC2 許可。 | 確保 IAM 角色具有必要的 EC2 網路許可。 | 
| InternalError | 處理網路連接器請求時，Lambda 服務內發生非預期的錯誤。 | 重試操作。如果在多次重試後仍存在，請聯絡 AWS Support 並提供網路連接器 ARN 和大致時間戳記。 | 
| InvalidSecurityGroup | 安全群組 ID 不存在、已刪除，或不屬於與指定子網路相同的 VPC。 | 驗證所有安全群組 IDs是否存在，並屬於與子網路相同的 VPC。使用 aws ec2 describe-security-groups --group-ids <sg-id>進行驗證。 | 
| InvalidSubnet | 子網路 ID 不存在、已刪除或屬於與預期不同的 VPC。 | 驗證所有子網路 IDs是否存在，並屬於正確的 VPC。使用 aws ec2 describe-subnets --subnet-ids <subnet-id> 驗證。 | 
| SubnetOutOfIPAddresses | 子網路的 CIDR 區塊已用盡 – 所有 IPs都會配置給其他資源 (ENIs、執行個體等），因此 Lambda 無法建立網路介面。 | 透過移除未使用的 ENIs/執行個體來釋放 IP 地址，或使用具有可用容量的不同子網路。對於網路連接器，請考慮較大的子網路 （例如 /24 或更大的子網路）。 | 