疑難排解 - AWS 上的分散式負載測試

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

疑難排解

已知問題解決提供減輕已知錯誤的指示。如果這些指示無法解決您的問題,請聯絡 AWS Support 提供為此解決方案開啟 AWS Support 案例的說明。

已知問題解決方案

問題:您正在使用現有的 VPC,而且您的測試失敗,狀態為失敗,導致下列錯誤訊息:

Test might have failed to run.

  • 解決方法:

確保子網路存在於指定的 VPC 中,並且具有具有網際網路閘道NAT 閘道的網際網路路由。AWS Fargate 需要存取才能從公有儲存庫提取容器映像,以成功執行測試。

問題:測試執行時間過長或無限期停滯

  • 解決方法:

取消測試並檢查 AWS Fargate,以確保所有任務都已停止。如果尚未停止,請手動停止所有 Fargate 任務。檢查您帳戶的隨需 Fargate 任務限制,以確保您可以啟動所需的任務數量。您也可以檢查 Lambda 任務執行器函數的 CloudWatch 日誌,以深入了解啟動 Fargate 任務時的失敗。檢查 CloudWatch ECS 日誌,了解正在執行的 Fargate 容器中發生的情況的詳細資訊。

問題:測試正在開始,但無法完成或 ECS 任務的狀態不明

  • 解決方法:

如果您選擇在部署解決方案的帳戶中提供現有 VPC 的選項,請確定 ECS 任務使用的 VPC 有足夠的可用 IP 地址,以開始測試輸入中提供的任務數量。ECS 任務定義使用需要網際網路閘道或網際網路路由的 ECR 映像,以便 ECS 服務可以透過從 aws-solutions/distributed-load-testing-on-aws-load-tester 下載解決方案 ECR 映像來佈建任務。如果您無法提供網際網路的路由,因為 VPC 中的所有子網路都是私有的,您可以使用 ECR 提取快取在帳戶中託管 ECR 映像。使用新的 ECR 映像 URI 更新任務定義,並建立新的修訂。任務定義更新後,DynamoDB 資料表中的解決方案組態需要更新,才能使用新的修訂。您可以在金鑰 ScenariosTable 下的 CloudFormation 堆疊輸出索引標籤中找到 DynamoDB 資料表名稱。使用金鑰 testId 和值區域-【SOLUTION-DEPLOYED-REGION】 更新項目的屬性 taskDefinition。

問題:測試需要使用私有或無法透過網際網路閘道使用的端點

  • 解決方法:

測試無法透過網際網路閘道存取的私有 API 端點時,請考慮下列方法:

  1. 網路組態:確保 ECS 任務使用的子網路路由表已更新為要測試之私有端點的 IP 地址範圍的路由。這可讓測試流量到達 VPC 中的私有端點。

  2. DNS 解析:對於自訂網域,請在 VPC 中設定 DNS 設定,以解析私有端點的網域名稱。如需詳細說明,請參閱 VPC DNS 文件。

  3. VPC 端點:如果測試 AWS 服務,請考慮使用 VPC 端點 (AWS PrivateLink) 來建立私有連線。例如,若要測試私有 API Gateway,您可以為 API Gateway 建立 VPC 端點。請參閱私有 API Gateway 文件。

  4. VPC 對等互連:如果私有端點位於不同的 VPC 中,請在部署解決方案的 VPC 與包含私有端點的 VPC 之間建立 VPC 對等互連。在兩個 VPCs中設定適當的路由表。請參閱 VPC 對等互連文件。

  5. 傳輸閘道:對於涉及多個 VPCs的更複雜聯網案例,請考慮使用 AWS Transit Gateway 在解決方案的 VPC 和包含私有端點的 VPC 之間路由流量。請參閱 Transit Gateway 文件。

  6. 安全群組:確保與 ECS 任務相關聯的安全群組允許對私有端點的傳出流量,而私有端點的安全群組允許來自 ECS 任務的傳入流量。

若要測試內部 Application Load Balancer 或 EC2 執行個體,請確保 VPC CIDR 範圍不重疊,且已在路由表中設定必要的路由。

問題:測試正在完成,但 UI 上無法使用結果

  • 解決方法:

如果測試已完成,但在 UI 中無法使用結果,則結果檔案應該仍可從執行測試的 ECS 任務,在 S3 儲存貯體中使用。這是 解決方案中的已知限制。在目前的架構中,解決方案會使用結果剖析 Lambda 函數來摘要來自多個 ECS 任務的結果,然後儲存為 DynamoDB 資料表中的項目。DynamoDB 資料表的項目大小上限為 400 KB。根據測試指令碼的複雜性、並行和使用的任務數量,達到此限制。錯誤並不表示測試失敗;它表示摘要結果並將其存放在 DynamoDB 資料表中用於 CRUD 操作的程序已失敗。結果仍可在測試案例的 S3 儲存貯體中使用。