故障排除 - AWS 上的分布式负载测试

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

故障排除

已知问题解决方案提供了缓解已知错误的说明。如果这些说明无法解决您的问题,请联系 AWS Supp ort 提供有关如何为该解决方案提出 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 服务就可以通过从 aw distributed-load-testing-on s-solutions/-下载解决方案 ECR 映像来配置任务。aws-load-tester如果由于 VPC 中的所有子网都是私有子网而无法提供互联网路由,则可以使用 ECR 拉取缓存将 ECR 镜像托管在您的账户中。使用新的 ECR 镜像 URI 更新任务定义并创建新的修订版。更新任务定义后,需要更新 DynamoDB 表中的解决方案配置以使用新的修订版。DynamoDB 表名可以在密钥下方的堆栈输出选项卡 CloudFormation 中找到。 ScenariosTable使用密钥 testID 和值 region-[SOLUTION-DEPLOYED-REGION] 更新该项目的属性 TaskDefinition。

问题:测试需要使用私有或无法通过 Internet 网关访问的端点

  • 解决方案:

在测试无法通过互联网网关访问的私有 API 端点时,请考虑以下方法:

  1. 网络配置:确保将 ECS 任务使用的子网路由表更新为指向正在测试的私有终端节点 IP 地址范围的路由。这允许测试流量到达您的 VPC 内的私有终端节点。

  2. DNS 解析:对于自定义域,请在您的 VPC 中配置 DNS 设置以解析私有终端节点的域名。有关详细说明,请参阅 VPC DNS 文档。

  3. VPC 终端节点:如果测试 AWS 服务,请考虑使用 VPC 终端节点 (AWS PrivateLink) 建立私有连接。例如,要测试私有 API 网关,您可以为 API Gateway 创建 VPC 终端节点。参见私有 API Gateway 文档。

  4. VPC 对等互连:如果私有终端节点位于其他 VPC 中,请在部署解决方案的 VPC 和包含私有终端节点的 VPC 之间建立 VPC 对等关系。在两者中配置适当的路由表 VPCs。请参阅 VPC 对等互连文档。

  5. T@@ ransit Gateway:对于涉及多个的更复杂的联网场景 VPCs,可以考虑使用 AWS Transit Gateway 在解决方案的 VPC 和包含私有终端节点的 VPC 之间路由流量。请参阅 Transit Gateway 文档

  6. 安全组:确保与您的 ECS 任务关联的安全组允许私有终端节点的出站流量,并且私有终端节点的安全组允许来自 ECS 任务的入站流量。

要测试内部应用程序负载均衡器或 EC2 实例,请确保 VPC CIDR 范围不重叠,并在路由表中配置必要的路由。

问题:测试已完成,但用户界面上未显示结果

  • 解决方案:

如果测试已完成,但用户界面中没有结果,则结果文件仍应位于运行测试的 ECS 任务的 S3 存储桶中。这是解决方案中的一个已知限制。在当前架构中,该解决方案使用结果解析 Lambda 函数来汇总多个 ECS 任务的结果,然后将这些结果作为一个项目存储在 DynamoDB 表中。DynamoDB 表的最大项目大小限制为 400 KB。是否达到此限制取决于测试脚本的复杂性、并发性和正在使用的任务数。该错误并不意味着测试失败;它表示汇总结果并将其存储在 DynamoDB 表中以进行 CRUD 操作的过程失败。测试场景的结果仍可在 S3 存储桶中找到。