View a markdown version of this page

疑難排解 - AWS Lambda

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

疑難排解

本節說明如何偵錯和疑難排解使用 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:us-east-1:aws:network-connector:aws-network-connector:SHELL_INGRESS。如果 MicroVM 未使用此連接器啟動, create-microvm-shell-auth-token會傳回 ValidationException

對於其他問題:

  • 檢查已終止 MicroVMsget-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中驗證 EXPOSEDockerfile。如果自動繼續,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 呼叫 (例如,CreateNetworkInterfaceDescribeSubnets) 來設定連線。太多並行 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 或更大的子網路)。