本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
容器镜像定制
负载测试仪图像
该解决方案使用由 AWS 管理的公共亚马逊弹性容器注册表 (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目录中。
然后,您可以构建映像并将其推送到主机目的地。
-
有关私有亚马逊 ECR 存储库和镜像,请参阅《亚马逊 ECR 用户指南》中的 Amazon ECR 私有存储库和私有镜像。
-
有关亚马逊 ECR 公共存储库和镜像,请参阅《亚马逊 ECR 公共用户指南》中的 Amazon ECR 公共存储库和公共镜像。
创建自定义映像后,在构建自定义解决方案之前声明以下环境变量。
#!/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入口点脚本,并以非 root 用户身份运行。要查看 Dockerfile,请参阅存储库中的 Dockerfile
每次任务启动时,load-test.sh入口点脚本都会在容器内运行。它读取测试配置和容器元数据。然后,它从 Amazon S3 下载测试定义并为运行预置选定的测试框架。该脚本等待启动信号,以便测试中的所有任务同时开始。然后,它会在配置的持续时间内运行测试,同时生成指标和日志。测试完成后,脚本收集结果并使用有关生成结果的容器的详细信息来丰富这些结果。它将结果、日志和其他项目上传到 Amazon S3。该脚本还处理终止信号,因此,如果您在测试完成之前取消测试,它会保留部分结果和日志。要查看完整脚本,请参阅 GitHub 存储库中的
Web 控制台镜像(仅限 ALB + ECS Fargate 模板)
ALB + ECS Fargate 模板在 ECS Fargate 上将 Web 控制台作为容器运行。默认情况下,该解决方案从 AWS 管理的公共 Amazon ECR 存储库中提取 Web 控制台镜像。
在限制访问公共容器注册表的环境中(例如,无法访问互联网的 VPC 或拥有 ECR 公共访问政策的账户),您必须将公共映像镜像到私有 Amazon ECR 存储库,并在 Web 控制台映像 URI 参数中提供私有镜像 URI。 CloudFormation 您也可以使用以下步骤自定义 Web 控制台镜像。
将公共镜像镜像到私有 ECR 存储库
要将 Web 控制台映像镜像到私有 ECR 存储库,请执行以下操作:
-
向公共 ECR 注册表进行身份验证:
$ aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws -
提取公共 Web 控制台镜像:
$ docker pull public.ecr.aws/aws-solutions/distributed-load-testing-on-aws-web-console:<version> -
在您的账户中创建私有 ECR 存储库(如果尚不存在):
$ aws ecr create-repository --repository-name <your-repo-name> --region <region> 2>/dev/null || true -
向您的私有 ECR 注册表进行身份验证:
$ aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <account-id>.dkr.ecr.<region>.amazonaws.com -
标记图像并将其推送到您的私有存储库:
$ 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> -
启动 ALB + ECS Fargate 堆栈时,在 Web 控制台镜像 URI 参数中输入私有镜像 URI:
<account-id>.dkr.ecr.<region>.amazonaws.com/<your-repo-name>:<version>
自定义 Web 控制台镜像
您也可以自定义 Web 控制台镜像。图像资源位于GitHub 存储库中的deployment/ecr/distributed-load-testing-on-aws-web-console目录中
Web 控制台容器镜像建立在 Nginx 基础映像基础上并安装 AWS CLI。它的 Dockerfile
有关更多信息,请参阅《亚马逊 ECR 用户指南》中的 “将 Docker 镜像推送到亚马逊 ECR 私有存储库”。
加载测试器图像 URI
所有三个部署模板(Amazon CloudFront + S3、AWS Fargate 上的应用程序负载均衡器 (ALB) + ECS 和无头)都在部署时从亚马逊弹性容器注册表 (Amazon ECR) 公共注册表 () 中提取负载测试器容器镜像。public.ecr.aws
在限制访问公共容器注册表的环境中,将负载测试器映像镜像到私有 Amazon ECR 存储库,并在负载测试器映像 URI (LoadTesterImageUri) AWS CloudFormation 参数中提供私有镜像 URI。常见示例包括无法访问互联网的 VPC、拥有 ECR 公有访问策略的账户以及 ECS 任务无法访问公有 ECR 注册表的 AWS GovCloud (美国)区域。AWS GovCloud (美国)部署需要镜像到部署区域中的私有存储库,在其他地方则是可选的。
将负载测试器镜像镜像到私有 ECR 存储库
注意
当您提供时LoadTesterImageUri,Auto-update 容器镜像 (UseStableTagging) 参数将不再管理负载测试器镜像。要获取安全补丁,必须重新镜像更新的映像标签。
要将负载测试器映像镜像到私有 ECR 存储库,请完成以下步骤。在以下命令中,<version>替换为图像标签(例如v4.0.0)、<region>您的部署区域(例如us-gov-west-1)、您的 AWS 命令行接口 (AWS CLI) 配置文件名称以及<account-id>您的 12 位数 AWS 账户 ID。<profile>
-
从可以访问互联网的计算机向公共 ECR 注册表进行身份验证。
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws -
提取公共负载测试器镜像。
docker pull public.ecr.aws/aws-solutions/distributed-load-testing-on-aws-load-tester:<version> -
在您的账户中创建私有 ECR 存储库(如果尚不存在)。
aws ecr create-repository --repository-name dlt-load-tester --region <region> --profile <profile> 2>/dev/null || true -
向您的私有 ECR 注册表进行身份验证。
aws ecr get-login-password --region <region> --profile <profile> | docker login --username AWS --password-stdin <account-id>.dkr.ecr.<region>.amazonaws.com -
标记图像并将其推送到您的私有存储库。
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> -
启动堆栈时,在负载测试器镜像 URI 参数中输入私有镜像 URI。
<account-id>.dkr.ecr.<region>.amazonaws.com/dlt-load-tester:<version>
AWS GovCloud (美国)部署示例
以下示例显示了 AWS GovCloud (美国)中每个堆栈变体所需的参数。
对于无头堆栈,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 堆栈上的应用程序负载均衡器 (ALB) + ECS,请同时提供和LoadTesterImageUri。WebConsoleImageUriAWS GovCloud (美国)中的 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 控制台镜像。