本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
疑難排解
本節說明如何偵錯和疑難排解使用 AWS Lambda MicroVMs時的常見問題。
Shell 存取
使用 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:。如果 MicroVM 未使用此連接器啟動, us-east-1:aws:network-connector:aws-network-connector:SHELL_INGRESScreate-microvm-shell-auth-token會傳回 ValidationException。
對於其他問題:
-
檢查已終止 MicroVMs
get-microvm回應中的terminationMessage欄位。 -
檢查 CloudWatch 組建日誌是否有映像建立問題。
-
檢查
StateReason欄位是否有處於FAILED狀態的網路連接器。
疑難排解
本節提供使用 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 狀態。檢查安全群組規則是否允許傳出流量。確認子網路具有目標資源的路由。 |
常見錯誤 (影像建立)
| 錯誤 | 原因 | 解決方案 |
|---|---|---|
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 |
發生內部錯誤。 | 重試操作。如果持續存在,請聯絡 支援。 |
網路連接器疑難排解
| 錯誤碼 | 原因 | 解決方案 |
|---|---|---|
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 或更大的子網路)。 |