本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
设计注意事项
本节介绍了 AWS 上的分布式负载测试解决方案的重要设计决策和配置选项,包括支持的应用程序、测试类型、计划选项和部署注意事项。
受支持的应用程序
只要您的 AWS 账户与应用程序之间存在网络连接,该解决方案就支持测试基于云的应用程序和本地应用程序。该解决方案支持使用 HTTP 或 HTTPS 协议的 API。
测试类型
AWS 上的分布式负载测试支持多种测试类型:简单 HTTP 终端节点测试、JMeter、K6 和 Locust。
注意
该解决方案无需修改即可将 JMeter、K6 和 Locust 作为第三方组件进行分发。有关安全注意事项、补丁选项和许可证信息,请参阅Third-party 测试框架。
简单的 HTTP 端点测试
Web 控制台提供了 HTTP 端点配置接口,允许您测试任何 HTTP 或 HTTPS 端点,而无需编写自定义脚本。您可以定义端点 URL,从下拉菜单中选择 HTTP 方法(GET、POST、PUT、DELETE 等),还可以选择添加自定义请求标头和正文有效负载。此配置使您能够使用自定义授权令牌、内容类型或应用程序所需的任何其他 HTTP 标头和请求正文来测试 API。
在配置 HTTP 端点时,该解决方案会将您的配置转换为测试计划,该计划由捆绑的 Apache JMeter 二进制文件通过 Taurus 框架执行。简单的 HTTP 端点测试不接受测试档案,因此它们无法覆盖捆绑的 JMeter 二进制文件或插件。如果您需要使用已修补的 JMeter 运行 HTTP 端点测试,请改用 jMeter 测试类型。有关安全方面的考虑,请参阅 Apache JMeter。
jMeter 测试
使用 Web 控制台创建测试场景时,可以上传 JMeter 测试脚本。该解决方案将脚本上传到场景 S3 存储桶。当 Amazon ECS 任务运行时,他们会从 S3 下载 JMeter 脚本并执行测试。
重要
尽管您的 JMeter 脚本可以定义并发性(虚拟用户)、交易速率 (TPS)、加速时间和其他加载参数,但该解决方案将使用您在测试创建期间在 Traffic Shape 屏幕中指定的值来覆盖这些配置。Traffic Shape 配置控制测试执行的任务计数、并发度(每个任务的虚拟用户数)、加速持续时间和保持持续时间。
如果您有 JMeter 输入文件,则可以将输入文件与 JMeter 脚本一起压缩。您可以在创建测试场景时选择 zip 文件。
如果要包含插件,则捆绑的 zip 文件的 /plugins 子目录中包含的任何.jar 文件都将被复制到 JMeter 扩展目录中,并可用于负载测试。
注意
如果您在 JMeter 脚本文件中包含 JMeter 输入文件,则必须在 JMeter 脚本文件中包含输入文件的相对路径。此外,输入文件必须位于相对路径上。例如,当 JMeter 输入文件和脚本文件位于/ home/user 目录中,而您引用 JMeter 脚本文件中的输入文件时,输入文件的路径必须为。 /INPUT_FILES。如果改用/home/user/INPUT_FILES,测试将失败,因为它无法找到输入文件。
如果包含 JMeter 插件,则.jar 文件必须捆绑在 zip 文件根目录下名为 /plugins 的子目录中。相对于压缩文件的根目录,jar 文件的路径必须是。 /plugins/BUNDLED_PLUGIN.jar。
有关如何使用 JMeter 脚本的更多信息,请参阅 JMeter 用户手册
K6 测试
该解决方案支持基于 K6 框架的测试。您可以将 K6 测试文件以及任何必要的输入文件上传到存档文件中。当您创建新的 K6 测试时,Web 控制台会显示许可确认消息;有关许可和安全详细信息,请参阅 Grafana K6。
重要
尽管您的 K6 脚本可以定义并发(虚拟用户)、阶段、阈值和其他负载参数,但该解决方案将使用您在创建测试期间在 “流量形状” 屏幕中指定的值来覆盖这些配置。Traffic Shape 配置控制测试执行的任务计数、并发度(每个任务的虚拟用户数)、加速持续时间和保持持续时间。
蝗虫试验
该解决方案支持基于 Locust 框架的测试。您可以将 Locust 测试文件以及任何必要的输入文件上传到存档文件中。
重要
尽管您的 Locust 脚本可以定义并发性(用户数)、生成率和其他加载参数,但该解决方案将使用您在创建测试期间在 Traffic Shape 屏幕中指定的值来覆盖这些配置。Traffic Shape 配置控制测试执行的任务计数、并发度(每个任务的虚拟用户数)、加速持续时间和保持持续时间。
安排测试
该解决方案为运行负载测试提供了三个执行定时选项:
-
立即运行-创建后立即执行负载测试
-
运行一次-在未来的特定日期和时间执行测试
-
按计划运行-使用 cron 表达式创建重复测试来定义计划
选择 “运行一次” 时,可以以 24 小时格式指定运行时间以及负载测试应开始运行的运行日期。
选择 “按计划运行” 时,可以手动输入 cron 表达式,也可以从常见的 cron 模式中进行选择(例如每小时、每天在特定时间、工作日或每月)。cron 表达式使用精细的计划格式,其中包含分钟、小时、月日、月、星期和年的字段。您还必须指定到期日期,该日期定义了计划测试何时停止运行。有关计划工作原理的更多信息,请参阅本指南的测试计划工作流程部分。
注意
-
测试时长:安排考试时请考虑测试的总持续时间。例如,启动时间为 10 分钟、保持时间为 40 分钟的测试大约需要 80 分钟才能完成。
-
最小间隔:确保计划测试之间的间隔长于预计的测试持续时间。例如,如果测试需要大约 80 分钟,则将其安排为不超过每 3 小时运行一次。
-
每小时限制:即使预计的考试时间少于一小时,系统也不允许安排只有一小时差异的测试。
并行测试
此解决方案为每项测试创建一个 Amazon CloudWatch 控制面板,实时显示 Amazon ECS 集群中运行的所有任务的组合输出。 CloudWatch 控制面板显示平均响应时间、并发用户数、成功请求数和失败请求数。该解决方案按秒汇总每个指标,并每分钟更新一次仪表板。
User management
在初始配置期间,您需要提供一个用户名和电子邮件地址,Amazon Cognito 使用该用户名和电子邮件地址来授予您访问解决方案网络控制台的权限。控制台不提供用户管理功能。要添加其他用户,您必须使用 Amazon Cognito 控制台。有关更多信息,请参阅 Amazon Cognito 开发者指南中的管理用户池中的用户。
要将现有用户迁移到 Amazon Cognito 用户池,请参阅 AWS 博客《将用户迁移到 Amazon Cognito 用户池的方法
身份提供者联合
该解决方案的 Amazon Cognito 用户池支持使用 SAML 2.0 或 OpenID Connect (OIDCIdPs) 协议与外部身份提供商 () 进行联合。联合允许用户使用其现有的公司或组织凭据而不是凭据登录 Web 控制台。 Cognito-native 联邦用户获得的访问权限与直接在 Cognito 用户池中创建的用户相同。
该解决方案已经部署了 Cognito 用户池、域、应用程序客户端和托管用户界面。要启用联合,您只需要注册您的身份提供商并在现有应用程序客户端上将其启用即可。
如果您部署了可选的 MCP 服务器集成,则联合用户也可以使用相同的 Cognito 用户池凭据访问 MCP 服务器。
先决条件
在配置联合之前,您需要满足以下条件:
-
支持 SAML 2.0 或 OIDC 的外部身份提供商
-
管理员访问权限以配置外部 IdP(用于设置重定向 URI 或 ACS 网址)
-
该解决方案的 Cognito 用户池 ID(可在 CloudFormation 堆栈资源或 Amazon Cognito 控制台中找到)
-
该解决方案的 Cognito 域名前缀(可在 CloudFormation 堆栈输出中找到,也可在应用程序集成 > 域下的 Cognito 控制台中找到)
步骤 1:配置您的身份提供商
使用以下值配置外部身份提供商,使其可以与解决方案的 Cognito 用户池进行通信。
对于 SAML 身份提供商:
-
SP 实体 ID:
urn:amazon:cognito:sp:_<UserPoolId>_ -
ACS 网址:
\https://<cognito-domain>.auth.<region>.amazoncognito.com/saml2/idpresponse
对于 OIDC 身份提供商:
-
重定向 URI:
\https://<cognito-domain>.auth.<region>.amazoncognito.com/oauth2/idpresponse
有关您的 IdP 需求的详细信息,请参阅 Amazon Cognito 开发者指南中的将 SAML 身份提供商添加到用户池或将 OIDC 身份提供商添加到用户池。
第 2 步:在 Cognito 中注册身份提供商
使用 Amazon Cognito 控制台将您的外部身份提供商添加到解决方案的现有 Cognito 用户池中。
有关分步说明,请参阅 Amazon Cognito 开发者指南中的通过第三方添加用户池登录信息。
步骤 3:配置属性映射
在身份提供者的声明和 Cognito 用户池属性之间配置属性映射。至少,将来自外部提供商的用户电子邮件声明映射到 Cognito 属性email。也可以考虑映射,name或者您的身份提供商nickname是否提供映射。
有关说明,请参阅 Amazon Cognito 开发者指南中的为您的用户池指定身份提供商属性映射。
步骤 4:在应用程序客户端上启用身份提供商
在 Amazon Cognito 控制台中,找到该解决方案创建的应用程序客户端,然后在托管 UI 设置下启用您的新身份提供商。
有关说明,请参阅 A mazon Cognito 开发者指南中的配置用户池应用程序客户端。
注意
该解决方案已经配置了应用程序客户端的回调和退出网址、OAuth 范围和托管界面域。您无需修改这些设置,只需在现有应用程序客户端上启用您的身份提供商即可。
重要
该解决方案故意从 CloudFormation 应用程序客户端配置中省略该SupportedIdentityProviders属性。这允许您在部署后添加身份提供商,而无需触发 CloudFormation 偏差检测。如果在模板中设置了此属性,则通过控制台或 CLI 进行的任何手动 IdP 更改都将在下一次堆栈更新时被覆盖,从而使应用程序客户端仅恢复到模板中列出的提供程序。
由于省略了此属性,因此 CloudFormation 不会跟踪或管理应用程序客户端上启用了哪些身份提供商。配置联合后,您负责管理应用程序客户端SupportedIdentityProviders上的内容。要监控未经授权的更改,请启用 AWS CloudTrail 日志并创建 A mazon EventBridge 规则以提醒CreateIdentityProvider和针对解决方案的 Cognito 用户池的 UpdateUserPoolClient API 调用。
注意
-
添加外部身份提供商并不会取消现有 Cognito-native 用户使用其当前凭据登录的权限。
-
联邦用户受到与 Cognito 用户池相同的区域可用性限制。有关更多信息,请参阅区域部署。
-
在将联合登录推广到您的组织之前,先与一小群用户一起测试该登录。
禁用或删除默认 Cognito 用户
配置联合后,您可能需要禁用或删除在堆栈部署期间创建的默认用户。这是可选的 — 默认用户继续使用联合登录。
要禁用用户,请在 Amazon Cognito 控制台中导航到该解决方案的 Cognito
有关更多详细信息,请参阅 Amazon Cognito 开发者指南中的管理和搜索用户账户。
区域部署
此解决方案使用 Amazon Cognito,仅在特定的 AWS 区域可用。因此,您必须在可用 Amazon Cognito 的地区部署此解决方案。有关各地区的最新可用服务,请参阅 AWS 区域服务列表