本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設計考量
本節說明 AWS 上分散式負載測試解決方案的重要設計決策和組態選項,包括支援的應用程式、測試類型、排程選項和部署考量。
支援的應用程式
只要您有從 AWS 帳戶到應用程式的網路連線,此解決方案支援測試雲端型應用程式和內部部署應用程式。解決方案支援使用 HTTP 或 HTTPS 通訊協定APIs。
測試類型
AWS 上的分散式負載測試支援多種測試類型:簡易 HTTP 端點測試、JMeter、k6 和 Locust。除了簡單 HTTP 端點以外的每個測試類型都可以在任一流量形狀模式下執行。如需詳細資訊,請參閱流量形狀模式。
注意
解決方案會將 JMeter、k6 和 Locust 分發為第三方元件,無需修改。如需安全性考量、修補選項和授權資訊,請參閱第三方測試架構。
簡單 HTTP 端點測試
Web 主控台提供 HTTP 端點組態介面,可讓您測試任何 HTTP 或 HTTPS 端點,而無需撰寫自訂指令碼。您可以從下拉式選單中定義端點 URL、選取 HTTP 方法 (GET、POST、PUT、DELETE 等),以及選擇性新增自訂請求標頭和內文承載。此組態可讓您使用自訂授權字符、內容類型,或應用程式所需的任何其他 HTTP 標頭和請求內文來測試 APIs。
當您設定 HTTP 端點時,解決方案會將您的組態轉換為由綁定 Apache JMeter 二進位檔透過 Taurus 架構執行的測試計劃。簡單 HTTP 端點測試不接受測試封存,因此無法覆寫綁定的 JMeter 二進位檔或外掛程式。如果您需要使用修補的 JMeter 執行 HTTP 端點測試,請改用 JMeter 測試類型。如需安全性考量,請參閱 Apache JMeter。
由於解決方案產生此測試類型的測試計劃,因此 Simple HTTP Endpoint 測試只會在標準模式下執行。原生模式需要您上傳的指令碼。如需詳細資訊,請參閱流量形狀模式。
JMeter 測試
使用 Web 主控台建立測試案例時,您可以上傳 JMeter 測試指令碼。解決方案會將指令碼上傳至案例 S3 儲存貯體。當 Amazon ECS 任務執行時,他們會從 S3 下載 JMeter 指令碼並執行測試。
重要
在標準模式中,您的 JMeter 指令碼可以定義並行 (虛擬使用者)、交易速率 (TPS)、漸進測試時間和其他負載參數。解決方案會使用您在測試建立期間在流量形狀畫面中指定的值來覆寫所有這些值。該組態控制測試執行的任務計數、並行 (每個任務的虛擬使用者)、漸進測試持續時間和保留持續時間。
在原生模式中,解決方案jmeter -n -t會針對您的指令碼執行,且不會傳遞載入參數。您的執行緒群組和計時器完全按照撰寫的方式執行。如需詳細資訊,請參閱流量形狀模式。
如果您有 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 使用者手冊
k6 測試
解決方案支援 k6 架構型測試。您可以在封存檔案中上傳 k6 測試檔案以及任何必要的輸入檔案。當您建立新的 k6 測試時,Web 主控台會顯示授權確認訊息。如需授權和安全性詳細資訊,請參閱 Grafana k6。
重要
在標準模式中,您的 k6 指令碼可以定義並行 (虛擬使用者)、階段、閾值和其他負載參數。解決方案會使用您在測試建立期間在流量形狀畫面中指定的值來覆寫所有這些值。該組態控制測試執行的任務計數、並行 (每個任務的虛擬使用者)、漸進測試持續時間和保留持續時間。
在原生模式中,解決方案會k6 run針對您的指令碼執行,且不會傳遞負載參數。k6 會完全依照寫入方式套用您的選項區塊、案例、階段和閾值。如需詳細資訊,請參閱流量形狀模式。
Locust 測試
解決方案支援 Locust 架構型測試。您可以上傳 Locust 測試檔案,以及封存檔案中任何必要的輸入檔案。
重要
在標準模式中,您的 Locust 指令碼可以定義並行 (使用者計數)、產生率和其他負載參數。解決方案會使用您在測試建立期間在流量形狀畫面中指定的值來覆寫所有這些值。該組態控制測試執行的任務計數、並行 (每個任務的虛擬使用者)、漸進測試持續時間和保留持續時間。
在原生模式中,解決方案locust --headless會針對您的指令碼執行,且不會傳遞任何負載參數。Locust 會完全依照寫入方式套用您的LoadTestShape類別和加權任務集。您的指令碼不得設定 processes,因為解決方案只會在 Locust 作為單一程序執行時計數請求。如需詳細資訊,請參閱流量形狀模式。
測試指令碼命名
當您上傳單一.py檔案時,解決方案會將該檔案存放在測試 ID 下,並直接參考該檔案,因此檔案可以有任何名稱。當您上傳.zip封存時,解決方案會搜尋封存中名為 的檔案locustfile.py。如果封存包含在任何其他名稱下的 Python 指令碼,則測試會在容器啟動期間失敗,並顯示訊息 No test script (.py) in zip file。
自訂 Python 相依性
負載測試容器包含 Locust 及其相依性。它不包含第三方 Python 套件。如果您的 Locust 指令碼匯入容器中不存在的套件,則測試會失敗,並顯示 ModuleNotFoundError。若要提供其他套件,請在.zip封存的根目錄中包含 requirements.txt 檔案。容器會在測試開始requirements.txt之前安裝 中列出的套件。
您可以透過兩種方式之一提供相依性:
- 從 PyPI 安裝
-
僅包含
requirements.txt檔案。容器會在任務啟動時requirements.txt從 PyPI 安裝 中列出的套件。這需要從負載測試任務執行的子網路進行傳出網際網路存取。 - 從綁定車輪安裝 (離線)
-
包含
requirements.txt檔案和包含 Python wheel (.whl) 檔案的packages子目錄。容器只會從綁定的車輪安裝,不會聯絡 PyPI。此選項適用於沒有傳出網際網路存取的環境。綁定車輪也會固定確切的套件版本,因此新的 PyPI 版本無法在執行之間變更您的測試環境。
下列範例顯示封存配置:
my-test.zip ├── locustfile.py # Required — must use this name ├── requirements.txt # Optional — packages to install └── packages/ # Optional — wheels, for offline install only └── *.whl
requirements.txt 和 packages子目錄必須位於封存的根目錄,以及 locustfile.py。如果您的指令碼僅匯入容器已提供的套件,請省略兩者。packages 子目錄只會與requirements.txt檔案一起生效;它本身會被忽略,而且不會安裝套件。
暫時性相依性
當您綁定車輪時, requirements.txt 必須列出相依性所需的每個套件,而不只是您直接匯入的套件。離線安裝不會聯絡 PyPI。缺少傳輸相依性會導致安裝失敗,並在測試開始之前停止任務。
準備容器的車輪
負載測試容器會使用 Python 3.11 在 x86_64 架構上執行 Linux。針對不同作業系統、架構或 Python 版本編譯的滾輪不會安裝。以純 Python 編寫的套件會以與平台無關的輪子形式分佈,並可在任何地方運作,但包含編譯延伸模組的套件需要為容器的平台建置輪子。由於容器不包含編譯器,因此無法在任務啟動時建置來源分佈。
執行下列命令來下載與容器平台相容的 wheel。您可以從任何作業系統執行此命令,包括 macOS 和 Windows。然後在封存中包含產生的packages目錄:
pip download -r requirements.txt \ --dest packages \ --platform manylinux2014_x86_64 \ --python-version 3.11 \ --only-binary=:all:
--platform 和 --python-version選項以容器為目標,而不是您執行命令的機器。--only-binary=:all: 選項會導致命令失敗,而不是無提示地回到容器無法建置的來源分佈。manylinux2014 標籤會指定與 glibc 2.17 及更新版本相容的車輪,其中包含容器的版本。
若要綁定您自己維護的套件,請使用 從套件的來源目錄建置 wheelpip wheel . --wheel-dir packages,然後將套件名稱新增至 requirements.txt。
流量形狀模式
每個測試都以兩種流量形狀模式之一執行:標準或原生。模式會決定三件事:哪一端控制負載、Fargate 任務使用的容器映像,以及解決方案傳送至測試架構的負載參數。如需在建立測試時選擇模式的指引,請參閱使用解決方案一節中的流量形狀模式。
標準模式
Fargate 任務使用已安裝 Taurus 的映像。Taurus 會從解決方案接收您的任務計數、並行、漸進測試和保留持續時間。它將這些值轉譯為基礎架構自己的負載控制。Taurus 優先於指令碼宣告的載入。它會重寫或忽略 k6 選項區塊LoadTestShape、Locust 或 JMeter 執行緒群組。區域產生的虛擬使用者是任務計數乘以每個任務的並行。每個架構的形狀都相同。這是解決方案在 4.3.0 版之前執行每項測試的方式。
原生模式
Fargate 任務使用測試架構的專用映像,其中不包含 Taurus。解決方案不會撰寫 Taurus 組態,而是直接叫用架構:k6 run、 jmeter -n -t或 locust --headless。它不會傳遞載入參數。您的指令碼是它產生的流量的唯一授權。
該設計的兩個結果隨之而來,而且兩個結果都會影響您調整測試大小的方式:
-
任務會乘以負載。每個任務都會執行獨立的架構程序,而沒有任務之間的協調。因此,區域會為每個任務產生指令碼宣告負載的完整副本。例如,擁有 200 個虛擬使用者的 k6 指令碼,在 5 個任務上執行,將 1,000 個虛擬使用者放在目標上。任務計數是解決方案在此模式中提供的唯一負載控制。它會以指令碼宣告內容的完整倍數移動。
-
安全持續時間會限制執行。由於指令碼決定測試何時結束,因此解決方案需要長達 24 小時的安全持續時間。如果測試在持續時間過後仍在執行,解決方案會停止架構。它會收集執行部分的結果,並將執行記錄為完成而非失敗。
排程測試
解決方案提供三種執行負載測試的執行時間選項:
-
立即執行 - 在建立後立即執行載入測試
-
執行一次 - 在未來的特定日期和時間執行測試
-
在排程上執行 - 使用 Cron 表達式建立週期性測試來定義排程
選取執行一次時,您會以 24 小時格式指定執行時間,以及負載測試應開始執行的執行日期。
當您選取在排程上執行時,您可以手動輸入 Cron 表達式,或從常見的 Cron 模式選取 (例如每小時、每天特定時間、工作日或每月)。Cron 表達式使用精細的排程格式,其中包含分鐘、小時、月中的日、月、週中的日和年的欄位。您也必須指定過期日期,以定義排程測試何時應停止執行。如需排程驗證規則的詳細資訊,請參閱本指南的排程限制一節。
注意
-
測試持續時間:考慮排程時的總測試持續時間。例如,具有 10 分鐘漸進測試時間和 40 分鐘保留時間的測試大約需要 80 分鐘才能完成。
-
最小間隔:確保排程測試之間的間隔長於預估測試持續時間。例如,如果測試大約需要 80 分鐘,請將其排程為每 3 小時執行一次。
-
每小時限制:系統不允許只以一小時的差異來排程測試,即使預估測試持續時間少於一小時。
並行測試
每次執行負載測試時,任務執行器 AWS Lambda 函數EcsLoadTesting-<testId>-<region> 都會在執行測試的每個區域中建立名為 的 Amazon CloudWatch 儀表板。CloudWatch 儀表板會即時顯示 Amazon ECS 叢集中執行之所有任務的合併輸出:平均回應時間、並行使用者數、成功請求數,以及失敗請求數。解決方案會依秒彙總每個指標,並每分鐘更新儀表板。
相同測試案例的後續執行會更新相同的儀表板,因此您的帳戶會針對每個區域中的每個測試案例包含一個儀表板。這些儀表板會在測試完成後保留在您的 帳戶中。它們會產生每月費用,直到您將其刪除為止。當您刪除測試案例時,解決方案會刪除案例的儀表板 (例如,透過 Web 主控台)。當您刪除解決方案的 CloudFormation 堆疊時,不會刪除儀表板。如需詳細資訊,請參閱本指南的成本一節和手動刪除保留的資源一節。
使用者管理
在初始組態期間,您會提供 Amazon Cognito 用來授予您存取解決方案 Web 主控台的使用者名稱和電子郵件地址。主控台不提供使用者管理。若要新增其他使用者,您必須使用 Amazon Cognito 主控台。如需詳細資訊,請參閱《Amazon Cognito 開發人員指南》中的在使用者集區中管理使用者。
如需將現有使用者遷移至 Amazon Cognito 使用者集區,請參閱 AWS 部落格方法,以將使用者遷移至 Amazon Cognito 使用者集區
身分提供者聯合
解決方案的 Amazon Cognito 使用者集區支援使用 SAML 2.0 或 OpenID Connect (OIDC) 通訊協定與外部身分提供者 (IdPs) 聯合。聯合允許使用者使用現有的公司或組織登入資料登入 Web 主控台,而不是 Cognito 原生登入資料。聯合身分使用者會收到與直接在 Cognito 使用者集區中建立的使用者相同的存取許可。
解決方案已部署 Cognito 使用者集區、網域、應用程式用戶端和託管 UI。若要啟用聯合,您只需註冊身分提供者,並在現有的應用程式用戶端上啟用。
如果您部署選用的 MCP 伺服器整合,聯合身分使用者也可以使用相同的 Cognito 使用者集區登入資料來存取 MCP 伺服器。
先決條件
在設定聯合之前,您需要下列項目:
-
支援 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 身分提供者新增至使用者集區或將 OIDC 身分提供者新增至使用者集區。
步驟 2:在 Cognito 中註冊身分提供者
使用 Amazon Cognito 主控台將外部身分提供者新增至解決方案的現有 Cognito 使用者集區。
如需step-by-step說明,請參閱《Amazon Cognito 開發人員指南》中的透過第三方新增使用者集區登入。
步驟 3:設定屬性映射
設定身分提供者宣告與 Cognito 使用者集區屬性之間的屬性映射。至少,將使用者的電子郵件宣告從外部供應商映射到 Cognito email 屬性。也請考慮映射或您的身分提供者namenickname是否提供它們。
如需說明,請參閱《Amazon Cognito 開發人員指南》中的為您的使用者集區指定身分提供者屬性映射。
步驟 4:在應用程式用戶端上啟用身分提供者
在 Amazon Cognito 主控台中,尋找解決方案建立的應用程式用戶端,並在託管 UI 設定下啟用新的身分提供者。
如需說明,請參閱《Amazon Cognito 開發人員指南》中的設定使用者集區應用程式用戶端。
注意
解決方案已設定應用程式的用戶端回呼和登出 URLs、OAuth 範圍和託管 UI 網域。您不需要修改這些設定,只需在現有的應用程式用戶端上啟用您的身分提供者即可。
重要
解決方案刻意省略 CloudFormation 應用程式用戶端組態中的 SupportedIdentityProviders 屬性。這可讓您在部署後新增身分提供者,而無需觸發 CloudFormation 偏離偵測。如果在範本中設定此屬性,任何透過主控台或 CLI 的手動 IdP 變更都會在下次堆疊更新時遭到覆寫,將應用程式用戶端還原為僅範本中列出的提供者。
由於省略此屬性,CloudFormation 不會追蹤或管理應用程式用戶端上啟用的身分提供者。設定聯合之後,您需負責管理應用程式用戶端SupportedIdentityProviders上的 內容。若要監控未經授權的變更,請啟用 AWS CloudTrail 記錄並建立 Amazon EventBridge 規則,以提醒以解決方案 Cognito 使用者集區為目標的 CreateIdentityProvider和 UpdateUserPoolClient API 呼叫。
注意
-
新增外部身分提供者不會移除現有 Cognito 原生使用者使用其目前憑證登入的能力。
-
聯合身分使用者受到與 Cognito 使用者集區相同的區域可用性限制。如需詳細資訊,請參閱區域部署。
-
先使用一小群使用者測試聯合登入,再將其推展到您的組織。
停用或刪除預設 Cognito 使用者
設定聯合之後,您可能想要停用或刪除在堆疊部署期間建立的預設使用者。這是選用的 — 預設使用者會繼續與聯合登入搭配使用。
若要停用使用者,請在 Amazon Cognito 主控台中導覽至解決方案的 Cognito
如需詳細資訊,請參閱《Amazon Cognito 開發人員指南》中的管理和搜尋使用者帳戶。
區域部署
此解決方案使用 Amazon Cognito,僅適用於特定 AWS 區域。因此,您必須在可使用 Amazon Cognito 的區域中部署此解決方案。如需依區域分類的最新服務可用性,請參閱 AWS 區域服務清單