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 참조하세요.

웹 콘솔 이미지(ALB + ECS Fargate 템플릿만 해당)

ALB + ECS Fargate 템플릿은 ECS Fargate에서 웹 콘솔을 컨테이너로 실행합니다. 기본적으로 솔루션은 AWS에서 관리하는 퍼블릭 Amazon ECR 리포지토리에서 웹 콘솔 이미지를 가져옵니다.

퍼블릭 컨테이너 레지스트리에 대한 액세스가 제한된 환경(예: 인터넷 액세스가 없는 VPCs 또는 ECR 퍼블릭 액세스 정책이 있는 계정)에서는 퍼블릭 이미지를 프라이빗 Amazon ECR 리포지토리에 미러링하고 웹 콘솔 이미지 URI CloudFormation 파라미터에 프라이빗 이미지 URI를 제공해야 합니다. CloudFormation 다음 단계를 사용하여 웹 콘솔 이미지를 사용자 지정할 수도 있습니다.

퍼블릭 이미지를 프라이빗 ECR 리포지토리에 미러링

웹 콘솔 이미지를 프라이빗 ECR 리포지토리에 미러링하려면:

  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-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 스택을 시작할 때 웹 콘솔 이미지 URI 파라미터에 프라이빗 이미지 URI를 입력합니다.

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

웹 콘솔 이미지 사용자 지정

웹 콘솔 이미지를 사용자 지정할 수도 있습니다. 이미지 리소스는 GitHub 리포지토리에 있는 deployment/ecr/distributed-load-testing-on-aws-web-console 디렉터리에 있습니다. 컨테이너 파일을 편집하고, 로컬 이미지를 빌드하고, 프라이빗 ECR 리포지토리로 푸시하고, 웹 콘솔 이미지 URI 파라미터에 결과 이미지 URI를 제공할 수 있습니다.

웹 콘솔 컨테이너 이미지는 Nginx 기본 이미지를 기반으로 빌드되고 AWS CLI를 설치합니다. Dockerfile은 Nginx 구성 및 진입점 스크립트에 복사합니다. Dockerfile은 HTTP 포트를 노출하고 컨테이너가 시작될 때 실행되도록 진입점 스크립트를 설정합니다. 컨테이너가 시작되면 entrypoint.sh는 AWS CLI를 사용하여 Amazon S3에서 웹 콘솔 자산을 다운로드합니다. Nginx 문서 루트로 추출한 다음 포그라운드에서 Nginx를 시작합니다. nginx.conf는 단일 페이지 애플리케이션(SPA)을 제공하고 일치하지 않는 경로를 다시 애플리케이션 진입점으로 라우팅합니다. 또한 Application Load Balancer에 대한 상태 확인 엔드포인트를 추가하고, gzip 압축을 활성화하고, 정적 자산에 대한 수명이 긴 캐싱을 설정하고(입력점 및 런타임 구성에 대한 캐싱을 비활성화하는 동안), 일반적인 보안 응답 헤더를 추가합니다.

자세한 내용은 Amazon ECR 사용 설명서의 Amazon ECR 프라이빗 리포지토리로 도커 이미지 푸시를 참조하세요.

테스터 이미지 URI 로드

세 가지 배포 템플릿(Amazon CloudFront + S3, AWS Fargate의 Application Load Balancer(ALB) + 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(미국) 배포의 경우 배포 리전의 프라이빗 리포지토리에 미러링이 필요하며 다른 곳에서는 선택 사항입니다.

로드 테스터 이미지를 프라이빗 ECR 리포지토리에 미러링

참고

LoadTesterImageUri를 제공하면 컨테이너 이미지 자동 업데이트(UseStableTagging) 파라미터가 더 이상 로드 테스터 이미지를 관리하지 않습니다. 보안 패치를 선택하려면 업데이트된 이미지 태그를 다시 미러링해야 합니다.

로드 테스터 이미지를 프라이빗 ECR 리포지토리에 미러링하려면 다음 단계를 완료하세요. 다음 명령에서 <version>를 이미지 태그(예: v4.0.0), <region>를 배포 리전(예: us-gov-west-1), <profile>를 AWS 명령줄 인터페이스(AWS CLI) 프로파일 이름으로,를 12자리 AWS 계정 ID<account-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. 스택을 시작할 때 로드 테스터 이미지 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 스택의 Application Load Balancer(ALB) + ECS에 LoadTesterImageUri 및를 모두 제공합니다WebConsoleImageUri. AWS 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

웹 콘솔 이미지 미러링에 대한 지침은 웹 콘솔 이미지를 참조하세요.