

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

# 設計考量
<a name="design-considerations"></a>

本節說明 AWS 上分散式負載測試解決方案的重要設計決策和組態選項，包括支援的應用程式、測試類型、排程選項和部署考量。

## 支援的應用程式
<a name="supported-applications"></a>

只要您有從 AWS 帳戶到應用程式的網路連線，此解決方案支援測試雲端型應用程式和內部部署應用程式。解決方案支援使用 HTTP 或 HTTPS 通訊協定APIs。

## 測試類型
<a name="test-types"></a>

AWS 上的分散式負載測試支援多種測試類型：簡易 HTTP 端點測試、JMeter、k6 和 Locust。

**注意**  
解決方案會將 JMeter、k6 和 Locust 分發為第三方元件，無需修改。如需安全性考量、修補選項和授權資訊，請參閱[第三方測試架構](security-1.md#third-party-testing-frameworks)。

### 簡單 HTTP 端點測試
<a name="single-http-support"></a>

Web 主控台提供 HTTP 端點組態界面，可讓您測試任何 HTTP 或 HTTPS 端點，而無需撰寫自訂指令碼。您可以定義端點 URL，從下拉式選單中選取 HTTP 方法 (GET、POST、PUT、DELETE 等），並選擇性地新增自訂請求標頭和內文承載。此組態可讓您使用自訂授權字符、內容類型，或應用程式所需的任何其他 HTTP 標頭和請求內文來測試 APIs。

當您設定 HTTP 端點時，解決方案會將您的組態轉換為由綁定 Apache JMeter 二進位檔透過 Taurus 架構執行的測試計劃。簡單 HTTP 端點測試不接受測試封存，因此無法覆寫綁定的 JMeter 二進位檔或外掛程式。如果您需要使用修補的 JMeter 執行 HTTP 端點測試，請改用 [JMeter](#jmeter-script-support) 測試類型。如需安全考量，請參閱 [Apache JMeter](security-1.md#jmeter-security)。

### JMeter 測試
<a name="jmeter-script-support"></a>

使用 Web 主控台建立測試案例時，您可以上傳 JMeter 測試指令碼。解決方案會將指令碼上傳至案例 S3 儲存貯體。當 Amazon ECS 任務執行時，他們會從 S3 下載 JMeter 指令碼並執行測試。

**重要**  
雖然您的 JMeter 指令碼可能會定義並行 （虛擬使用者）、交易速率 (TPS)、漸進測試時間和其他負載參數，但解決方案會使用您在測試建立期間在流量形狀畫面中指定的值來覆寫這些組態。流量形狀組態可控制測試執行的任務計數、並行 （每個任務的虛擬使用者）、漸進測試持續時間和保留持續時間。

如果您有 JMeter 輸入檔案，您可以將輸入檔案與 JMeter 指令碼一起壓縮。您可以在建立測試案例時選擇 zip 檔案。

如果您想要包含外掛程式，任何包含在綁定 zip 檔案中 /plugins 子目錄中的 .jar 檔案都會複製到 JMeter 擴充功能目錄，並可用於負載測試。

**注意**  
如果您在 JMeter 指令碼檔案中包含 JMeter 輸入檔案，則必須在 JMeter 指令碼檔案中包含輸入檔案的相對路徑。此外，輸入檔案必須位於相對路徑。例如，當您的 JMeter 輸入檔案和指令碼檔案位於 /home/user 目錄中，而您參考 JMeter 指令碼檔案中的輸入檔案時，輸入檔案的路徑必須為 。/INPUT\_FILES。如果您改為使用 /home/user/INPUT\_FILES，則測試將會失敗，因為它將無法找到輸入檔案。

如果您包含 JMeter 外掛程式，.jar 檔案必須封裝在 zip 檔案根目錄中名為 /plugins 的子目錄中。相對於 zip 檔案的根目錄，jar 檔案的路徑必須是 ./plugins/BUNDLED\_PLUGIN.jar。

如需如何使用 JMeter 指令碼的詳細資訊，請參閱 [JMeter 使用者手冊](https://jmeter.apache.org/usermanual/index.html)。

### k6 測試
<a name="k6-script-support"></a>

解決方案支援以 k6 架構為基礎的測試。您可以在封存檔案中上傳 k6 測試檔案以及任何必要的輸入檔案。當您建立新的 k6 測試時，Web 主控台會顯示授權確認訊息；如需授權和安全性詳細資訊，請參閱 [Grafana k6](security-1.md#k6-security)。

**重要**  
雖然 k6 指令碼可能會定義並行 （虛擬使用者）、階段、閾值和其他負載參數，但解決方案會使用您在測試建立期間在流量形狀畫面中指定的值來覆寫這些組態。流量形狀組態可控制測試執行的任務計數、並行 （每個任務的虛擬使用者）、漸進測試持續時間和保留持續時間。

### Locust 測試
<a name="locust-script-support"></a>

解決方案支援 Locust 架構型測試。您可以上傳 Locust 測試檔案，以及封存檔案中任何必要的輸入檔案。

**重要**  
雖然您的 Locust 指令碼可能會定義並行 （使用者計數）、產生率和其他負載參數，但解決方案會使用您在測試建立期間在流量形狀畫面中指定的值來覆寫這些組態。流量形狀組態可控制測試執行的任務計數、並行 （每個任務的虛擬使用者）、漸進測試持續時間和保留持續時間。

## 排程測試
<a name="scheduling-tests"></a>

解決方案提供三種執行負載測試的執行時間選項：
+  **立即執行** - 在建立後立即執行載入測試
+  **執行一次** - 在未來的特定日期和時間執行測試
+  **在排程上執行** - 使用 Cron 表達式建立週期性測試來定義排程

選取**執行一次**時，您會以 24 小時格式指定執行時間，以及負載測試應開始執行的執行日期。

當您選取在**排程上執行**時，您可以手動輸入 Cron 表達式，或從常見的 Cron 模式選取 （例如每小時、每天特定時間、工作日或每月）。Cron 表達式使用精細的排程格式，其中包含分鐘、小時、月中的日、月、週中的日和年的欄位。您也必須指定過期日期，以定義排程測試何時應停止執行。如需排程驗證規則的詳細資訊，請參閱本指南的[排程限制](cron-expression-reference.md#cron-scheduling-constraints)一節。

**注意**  
測試持續時間：考慮排程時的總測試持續時間。例如，具有 10 分鐘漸進測試時間和 40 分鐘保留時間的測試大約需要 80 分鐘才能完成。
最小間隔：確保排程測試之間的間隔長於預估測試持續時間。例如，如果測試大約需要 80 分鐘，請將其排程為每 3 小時執行一次。
每小時限制：系統不允許只以一小時的差異來排程測試，即使預估測試持續時間少於一小時。

## 並行測試
<a name="concurrent-tests-architecture"></a>

每次執行負載測試時，任務執行器 AWS Lambda 函數`EcsLoadTesting-<testId>-<region> `都會在執行測試的每個區域中建立名為 的 Amazon CloudWatch 儀表板。CloudWatch 儀表板會即時顯示 Amazon ECS 叢集中執行之所有任務的合併輸出：平均回應時間、並行使用者數目、成功請求數目，以及失敗請求數目。解決方案會依秒彙總每個指標，並每分鐘更新儀表板。

相同測試案例的後續執行會更新相同的儀表板，因此您的帳戶包含每個區域中每個測試案例的一個儀表板。這些儀表板會在測試完成後保留在您的帳戶中，並產生每月費用，直到刪除為止。當您刪除測試案例 （例如，透過 Web 主控台） 時，解決方案會刪除案例的儀表板；當您刪除解決方案的 CloudFormation 堆疊時，不會刪除儀表板。如需詳細資訊，請參閱本指南[的成本](cost.md)一節和[手動刪除保留的資源](manually-deleting-retained-resources.md)一節。

## 使用者管理
<a name="user-management"></a>

在初始組態期間，您會提供 Amazon Cognito 用來授予您存取解決方案 Web 主控台的使用者名稱和電子郵件地址。主控台不提供使用者管理。若要新增其他使用者，您必須使用 Amazon Cognito 主控台。如需詳細資訊，請參閱《*Amazon Cognito 開發人員指南*》中的在[使用者集區中管理使用者](https://docs.aws.amazon.com/cognito/latest/developerguide/managing-users.html)。

如需將現有使用者遷移至 Amazon Cognito 使用者集區，請參閱 AWS 部落格[方法，以將使用者遷移至 Amazon Cognito 使用者集區](https://aws.amazon.com/blogs/security/approaches-for-migrating-users-to-amazon-cognito-user-pools)。

## 身分提供者聯合
<a name="identity-provider-federation"></a>

解決方案的 Amazon Cognito 使用者集區支援使用 SAML 2.0 或 OpenID Connect (OIDC) 通訊協定與外部身分提供者 (IdPs) 聯合。聯合允許使用者使用現有的公司或組織登入資料登入 Web 主控台，而不是 Cognito 原生登入資料。聯合身分使用者會收到與直接在 Cognito 使用者集區中建立的使用者相同的存取許可。

解決方案已部署 Cognito 使用者集區、網域、應用程式用戶端和託管 UI。若要啟用聯合，您只需註冊身分提供者，並在現有的應用程式用戶端上啟用。

如果您部署選用的 MCP 伺服器整合，聯合身分使用者也可以使用相同的 Cognito 使用者集區登入資料來存取 MCP 伺服器。

### 先決條件
<a name="prerequisites"></a>

在設定聯合之前，您需要下列項目：
+ 支援 SAML 2.0 或 OIDC 的外部身分提供者
+ 設定外部 IdP 的管理員存取權 （設定重新導向 URIs或 ACS URLs)
+ 解決方案的 Cognito 使用者集區 ID （可在 CloudFormation 堆疊資源或 Amazon Cognito 主控台中取得）
+ 解決方案的 Cognito 網域字首 （可在 CloudFormation 堆疊輸出或**應用程式整合** > **網域**下的 Cognito 主控台中使用）

 **步驟 1：設定您的身分提供者** 

使用下列值設定外部身分提供者，以便與解決方案的 Cognito 使用者集區通訊。

對於 SAML 身分提供者：
+ SP 實體 ID： `urn:amazon:cognito:sp:_<UserPoolId>_`
+ ACS URL： `\https://<cognito-domain>.auth.<region>.amazoncognito.com/saml2/idpresponse`

對於 OIDC 身分提供者：
+ 重新導向 URI： `\https://<cognito-domain>.auth.<region>.amazoncognito.com/oauth2/idpresponse`

如需有關 IdP 需求的詳細資訊，請參閱《*Amazon Cognito 開發人員指南*》中的[將 SAML 身分提供者新增至使用者集](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-saml-idp.html)區或[將 OIDC 身分提供者新增至使用者集區](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-oidc-idp.html)。

 **步驟 2：在 Cognito 中註冊身分提供者** 

使用 Amazon Cognito 主控台將外部身分提供者新增至解決方案的現有 Cognito 使用者集區。

如需step-by-step說明，請參閱《*Amazon Cognito 開發人員指南*》中的[透過第三方新增使用者集區登入](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-provider.html)。

 **步驟 3：設定屬性映射** 

設定身分提供者宣告與 Cognito 使用者集區屬性之間的屬性映射。至少，將使用者的電子郵件宣告從外部供應商映射到 Cognito `email` 屬性。也請考慮映射或您的身分提供者`name``nickname`是否提供它們。

如需說明，請參閱《*Amazon Cognito 開發人員指南*》中的[為您的使用者集區指定身分提供者屬性映射](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-specifying-attribute-mapping.html)。

 **步驟 4：在應用程式用戶端上啟用身分提供者** 

在 Amazon Cognito 主控台中，尋找解決方案建立的應用程式用戶端，並在託管 UI 設定下啟用新的身分提供者。

如需說明，請參閱《*Amazon Cognito 開發人員指南*》中的[設定使用者集區應用程式用戶端](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-app-integration.html)。

**注意**  
解決方案已設定應用程式的用戶端回呼和登出 URLs、OAuth 範圍和託管 UI 網域。您不需要修改這些設定，只需在現有的應用程式用戶端上啟用您的身分提供者即可。

**重要**  
解決方案刻意省略 CloudFormation 應用程式用戶端組態中的 `SupportedIdentityProviders` 屬性。這可讓您在部署後新增身分提供者，而無需觸發 CloudFormation 偏離偵測。如果在範本中設定此屬性，任何透過主控台或 CLI 的手動 IdP 變更都會在下次堆疊更新時遭到覆寫，將應用程式用戶端還原為僅範本中列出的提供者。  
由於省略此屬性，CloudFormation 不會追蹤或管理應用程式用戶端上啟用的身分提供者。設定聯合之後，您需負責管理應用程式用戶端`SupportedIdentityProviders`上的 內容。若要監控未經授權的變更，請啟用 [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) 記錄並建立 [Amazon EventBridge 規則](https://docs.aws.amazon.com/eventbridge/latest/userguide/aws-events.html)，以提醒以解決方案 Cognito 使用者集區為目標的 `CreateIdentityProvider`和 `UpdateUserPoolClient` API 呼叫。

**注意**  
新增外部身分提供者不會移除現有 Cognito 原生使用者使用其目前憑證登入的能力。
聯合身分使用者受到與 Cognito 使用者集區相同的區域可用性限制。如需詳細資訊，請參閱[區域部署](#regional-deployment)。
先使用一小群使用者測試聯合登入，再將其推展到您的組織。

### 停用或刪除預設 Cognito 使用者
<a name="disabling-or-deleting-the-default-cognito-user"></a>

設定聯合之後，您可能想要停用或刪除在堆疊部署期間建立的預設使用者。這是選用的 — 預設使用者會繼續與聯合登入搭配使用。

若要停用使用者，請在 [Amazon Cognito 主控台中導覽至解決方案的 Cognito ](https://console.aws.amazon.com/cognito/home)使用者集區，選取**使用者**索引標籤，選擇使用者，然後選取**停用使用者存取**。若要刪除使用者，您必須先停用使用者，然後選擇**刪除使用者**。停用使用者會撤銷其字符並防止在保留帳戶時登入；刪除 會永久移除它。

如需詳細資訊，請參閱《*Amazon Cognito 開發人員指南*》中的[管理和搜尋使用者帳戶](https://docs.aws.amazon.com/cognito/latest/developerguide/how-to-manage-user-accounts.html)。

## 區域部署
<a name="regional-deployment"></a>

此解決方案使用 Amazon Cognito，僅適用於特定 AWS 區域。因此，您必須在可使用 Amazon Cognito 的區域部署此解決方案。如需依區域分類的最新服務可用性，請參閱 [AWS 區域服務清單](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。