View a markdown version of this page

容器映像自訂 - AWS 上的分散式負載測試

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

容器映像自訂

載入測試器映像

此解決方案使用由 AWS 管理的公有 Amazon Elastic Container Registry (Amazon ECR) 映像儲存庫來存放用來執行已設定測試的映像。您可以重建容器映像,並將其推送至您自己的 AWS 帳戶中的 ECR 映像儲存庫。

您可以編輯預設容器映像以符合您的需求。在建置自訂映像之前設定這些環境變數。

#!/bin/bash export REGION=aws-region-code # the AWS region to launch the solution (e.g. us-east-1) export BUCKET_PREFIX=my-bucket-name # prefix of the bucket name without the region code export BUCKET_NAME=$BUCKET_PREFIX-$REGION # full bucket name where the code will reside export SOLUTION_NAME=my-solution-name export VERSION=my-version # version number for the customized code export PUBLIC_ECR_REGISTRY=public.ecr.aws/awssolutions/distributed-load-testing-on-aws-load-tester # replace with the container registry and image if you want to use a different container image export PUBLIC_ECR_TAG=v3.1.0 # replace with the container image tag if you want to use a different container image

您可以在 AWS 帳戶中的私有或公有映像儲存庫中託管自訂容器映像。映像資源位於程式碼基礎的 deployment/ecr/distributed-load-testing-on-aws-load-tester目錄中。

然後,您可以建置映像並將其推送至主機目的地。

建立自訂映像之後,請在建置自訂解決方案之前宣告下列環境變數。

#!/bin/bash export PUBLIC_ECR_REGISTRY=YOUR_ECR_REGISTRY_URI # e.g. YOUR_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/YOUR_IMAGE_NAME export PUBLIC_ECR_TAG=YOUR_ECR_TAG # e.g. latest, v3.4.0

Dockerfile 會定義負載測試映像。它以 Amazon Linux 基礎映像為基礎,安裝執行負載測試所需的語言執行期、系統套件和測試工具,新增架構版本中繼資料檔案和load-test.sh進入點指令碼,並以非根使用者身分執行。若要檢視 Dockerfile,請參閱 GitHub 儲存庫中的 Dockerfile。

每次任務啟動時,load-test.sh進入點指令碼都會在容器內執行。它會讀取測試組態和容器中繼資料。然後,它會從 Amazon S3 下載測試定義,並為執行佈建選取的測試架構。指令碼會等待啟動訊號,讓測試中的所有任務同時開始。然後,它會在設定的持續時間內執行測試,同時產生指標和日誌。測試完成時,指令碼會收集結果,並使用產生結果之容器的詳細資訊來充實結果。它會將結果、日誌和其他成品上傳到 Amazon S3。指令碼也會處理終止訊號,因此如果您在測試完成之前取消測試,則會保留部分結果和日誌。若要檢視完整指令碼,請參閱 GitHub 儲存庫中的 load-test.sh。

Web 主控台映像 (僅限 AHB + ECS Fargate 範本)

ALB + ECS Fargate 範本會以 ECS Fargate 上的容器的形式執行 Web 主控台。根據預設,解決方案會從 AWS 管理的公有 Amazon ECR 儲存庫提取 Web 主控台映像。

在對公有容器登錄檔的存取受到限制的環境中 (例如,沒有網際網路存取VPCs 或具有 ECR 公有存取政策的帳戶),您必須將公有映像鏡像至私有 Amazon ECR 儲存庫,並在 Web 主控台映像 URI CloudFormation 參數中提供私有映像 URI。 CloudFormation 您也可以使用下列步驟來自訂 Web 主控台映像。

將公有映像鏡像到私有 ECR 儲存庫

若要將 Web 主控台映像鏡像至私有 ECR 儲存庫:

  1. 驗證為公有 ECR 登錄檔:

    $ aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
  2. 提取公有 Web 主控台映像:

    $ docker pull public.ecr.aws/aws-solutions/distributed-load-testing-on-aws-web-console:<version>
  3. 在帳戶中建立私有 ECR 儲存庫 (如果尚未存在):

    $ aws ecr create-repository --repository-name <your-repo-name> --region <region> 2>/dev/null || true
  4. 驗證您的私有 ECR 登錄檔:

    $ aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <account-id>.dkr.ecr.<region>.amazonaws.com
  5. 標記並推送映像到您的私有儲存庫:

    $ docker tag public.ecr.aws/aws-solutions/distributed-load-testing-on-aws-web-console:<version> \ <account-id>.dkr.ecr.<region>.amazonaws.com/<your-repo-name>:<version> $ docker push <account-id>.dkr.ecr.<region>.amazonaws.com/<your-repo-name>:<version>
  6. 啟動 ALB + ECS Fargate 堆疊時,請在 Web 主控台映像 URI 參數中輸入私有映像 URI:

    <account-id>.dkr.ecr.<region>.amazonaws.com/<your-repo-name>:<version>

自訂 Web 主控台映像

您也可以自訂 Web 主控台映像。映像資源位於 deployment/ecr/distributed-load-testing-on-aws-web-console目錄中,位於 GitHub 儲存庫中。您可以編輯容器檔案、建置本機映像、將其推送至私有 ECR 儲存庫,並在 Web 主控台映像 URI 參數中提供產生的映像 URI。

Web 主控台容器映像建置在 Nginx 基礎映像上,並安裝 AWS CLI。其 Dockerfile 會在 Nginx 組態和進入點指令碼中複製。Dockerfile 公開 HTTP 連接埠,並將進入點指令碼設定為在容器啟動時執行。當容器啟動時,entrypoint.sh 會使用 AWS CLI 從 Amazon S3 下載 Web 主控台資產。它會將它們擷取到 Nginx 文件根目錄,然後在前景中啟動 Nginx。nginx.conf 提供單頁應用程式 (SPA),並將不相符的路徑路由回應用程式進入點。它也會新增 Application Load Balancer 的運作狀態檢查端點、啟用 gzip 壓縮、設定靜態資產的長時間快取 (同時停用進入點和執行時間組態的快取),以及新增常見的安全回應標頭。

如需詳細資訊,請參閱《Amazon ECR 使用者指南》中的將 Docker 映像推送至 Amazon ECR 私有儲存庫。

載入測試器映像 URI

全部三個部署範本 (Amazon CloudFront + S3、Application Load Balancer (ALB) + AWS Fargate 上的 ECS,以及無周邊) 會在部署時間從 Amazon Elastic Container Registry (Amazon ECR) 公有登錄檔 (public.ecr.aws) 提取負載測試器容器映像。

在限制存取公有容器登錄檔的環境中,請將負載測試器映像鏡像至私有 Amazon ECR 儲存庫,並在負載測試器映像 URI () AWS CloudFormation 參數中提供私有映像 URI。LoadTesterImageUri AWS CloudFormation 常見範例包括沒有網際網路存取VPCs、具有 ECR 公有存取政策的帳戶,以及 ECS 任務無法存取公有 ECR 登錄檔的 AWS GovCloud (US) 區域。AWS GovCloud (US) 部署和選用的其他地方需要鏡像到部署區域中的私有儲存庫。

將負載測試器映像鏡像到私有 ECR 儲存庫

注意

當您提供 時LoadTesterImageUri,自動更新容器映像 (UseStableTagging) 參數不會再管理負載測試器映像。若要取得安全修補程式,您必須重新鏡射更新的映像標籤。

若要將載入測試器映像鏡像至私有 ECR 儲存庫,請完成下列步驟。在下列命令中,將 <version>取代為映像標籤 (例如 v4.0.0)、將 取代<region>為部署區域 (例如 us-gov-west-1)、將 <profile>取代為 AWS Command Line Interface (AWS CLI) 設定檔名稱,並將 <account-id>取代為 12 位數的 AWS 帳戶 ID。

  1. 從具有網際網路存取的機器驗證公有 ECR 登錄檔。

    aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
  2. 提取公有負載測試器映像。

    docker pull public.ecr.aws/aws-solutions/distributed-load-testing-on-aws-load-tester:<version>
  3. 在您的帳戶中建立私有 ECR 儲存庫 (如果尚未存在)。

    aws ecr create-repository --repository-name dlt-load-tester --region <region> --profile <profile> 2>/dev/null || true
  4. 驗證您的私有 ECR 登錄檔。

    aws ecr get-login-password --region <region> --profile <profile> | docker login --username AWS --password-stdin <account-id>.dkr.ecr.<region>.amazonaws.com
  5. 標記映像並將其推送到您的私有儲存庫。

    docker tag public.ecr.aws/aws-solutions/distributed-load-testing-on-aws-load-tester:<version> \ <account-id>.dkr.ecr.<region>.amazonaws.com/dlt-load-tester:<version> docker push <account-id>.dkr.ecr.<region>.amazonaws.com/dlt-load-tester:<version>
  6. 當您啟動堆疊時,請在 Load Tester Image URI 參數中輸入私有映像 URI。

    <account-id>.dkr.ecr.<region>.amazonaws.com/dlt-load-tester:<version>

AWS GovCloud (US) 部署範例

下列範例顯示 AWS GovCloud (US) 中每個堆疊變體所需的參數。

對於無周邊堆疊,只需要LoadTesterImageUri:

aws cloudformation create-stack \ --stack-name dlt-govcloud \ --template-url https://solutions-reference-us-gov.s3.us-gov-west-1.amazonaws.com/distributed-load-testing-on-aws/latest/distributed-load-testing-on-aws-headless.template \ --parameters \ ParameterKey=AdminName,ParameterValue=admin \ ParameterKey=AdminEmail,ParameterValue=admin@example.com \ ParameterKey=LoadTesterImageUri,ParameterValue=<account-id>.dkr.ecr.us-gov-west-1.amazonaws.com/dlt-load-tester:<version> \ --capabilities CAPABILITY_IAM \ --region us-gov-west-1

對於 AWS Fargate 堆疊上的 Application Load Balancer (ALB) + ECS,請提供 LoadTesterImageUri和 WebConsoleImageUri。AWS GovCloud (US) 中的 ECS 任務無法存取公有 ECR 登錄檔 (public.ecr.aws),因此您必須鏡像這兩個容器映像。

aws cloudformation create-stack \ --stack-name dlt-govcloud \ --template-url https://solutions-reference-us-gov.s3.us-gov-west-1.amazonaws.com/distributed-load-testing-on-aws/latest/distributed-load-testing-on-aws-alb-ecs.template \ --parameters \ ParameterKey=AdminName,ParameterValue=admin \ ParameterKey=AdminEmail,ParameterValue=admin@example.com \ ParameterKey=ConsoleDomainName,ParameterValue=dlt.example.gov \ ParameterKey=ACMCertificateArn,ParameterValue=arn:aws-us-gov:acm:us-gov-west-1:123456789012:certificate/abcd1234-ef56-gh78-ij90-klmnopqrstuv \ ParameterKey=LoadTesterImageUri,ParameterValue=<account-id>.dkr.ecr.us-gov-west-1.amazonaws.com/dlt-load-tester:<version> \ ParameterKey=WebConsoleImageUri,ParameterValue=<account-id>.dkr.ecr.us-gov-west-1.amazonaws.com/dlt-web-console:<version> \ --capabilities CAPABILITY_IAM \ --region us-gov-west-1

如需鏡像 Web 主控台映像的指示,請參閱 Web 主控台映像。