View a markdown version of this page

Personnalisation de l'image du conteneur - Tests de charge distribués sur AWS

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Personnalisation de l'image du conteneur

Image du testeur de charge

Cette solution utilise un référentiel d'images public Amazon Elastic Container Registry (Amazon ECR) géré par AWS pour stocker l'image utilisée pour exécuter les tests configurés. Vous pouvez reconstruire et transférer l'image du conteneur dans un référentiel d'images ECR sur votre propre compte AWS.

Vous pouvez modifier l'image du conteneur par défaut en fonction de vos besoins. Définissez ces variables d'environnement avant de créer une image personnalisée.

#!/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

Vous pouvez héberger une image de conteneur personnalisée dans un référentiel d'images privé ou public de votre compte AWS. Les ressources d'image se trouvent dans le deployment/ecr/distributed-load-testing-on-aws-load-tester répertoire de la base de code.

Vous pouvez ensuite créer et envoyer l'image vers la destination hôte.

  • Pour les référentiels privés et les images Amazon ECR, reportez-vous à la section Référentiels privés Amazon ECR et images privées dans le guide de l'utilisateur Amazon ECR.

  • Pour les référentiels publics et les images Amazon ECR, reportez-vous à la section Référentiels publics et images publiques Amazon ECR dans le Guide de l'utilisateur public d'Amazon ECR.

Après avoir créé l'image personnalisée, déclarez les variables d'environnement suivantes avant de créer la solution personnalisée.

#!/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

Le Dockerfile définit l'image de test de charge. Il s'appuie sur une image de base Amazon Linux, installe les environnements d'exécution du langage, les packages système et les outils de test nécessaires pour exécuter les tests de charge, ajoute les fichiers de métadonnées de la version du framework et le script de load-test.sh point d'entrée, et s'exécute en tant qu'utilisateur non root. Pour afficher le Dockerfile, reportez-vous à Dockerfile dans le référentiel. GitHub

Le script de load-test.sh point d'entrée s'exécute dans le conteneur chaque fois qu'une tâche démarre. Il lit la configuration du test et les métadonnées du conteneur. Il télécharge ensuite la définition du test depuis Amazon S3 et fournit le framework de test sélectionné pour l'exécution. Le script attend un signal de démarrage pour que toutes les tâches d'un test commencent en même temps. Il exécute ensuite le test pendant la durée configurée tout en produisant des métriques et des journaux. Une fois le test terminé, le script collecte les résultats et les enrichit avec des informations sur le conteneur qui les a produits. Il télécharge les résultats, les journaux et d'autres artefacts sur Amazon S3. Le script gère également les signaux de fin, de sorte qu'il conserve les résultats partiels et les enregistre si vous annulez un test avant qu'il ne soit terminé. Pour afficher le script complet, reportez-vous à load-test.sh dans le GitHub référentiel.

Image de console Web (modèle ALB + ECS Fargate uniquement)

Le modèle ALB + ECS Fargate exécute la console Web en tant que conteneur sur ECS Fargate. Par défaut, la solution extrait l'image de la console Web d'un référentiel public Amazon ECR géré par AWS.

Dans les environnements où l'accès aux registres de conteneurs publics est restreint (par exemple, les VPC n'ayant pas accès à Internet ou les comptes soumis à des politiques d'accès public ECR), vous devez refléter l'image publique sur un référentiel Amazon ECR privé et fournir l'URI de l'image privée dans le paramètre URL de l'image de la console Web. CloudFormation Vous pouvez également suivre les étapes suivantes pour personnaliser l'image de la console Web.

Reproduisez l'image publique dans un référentiel ECR privé

Pour dupliquer l'image de la console Web dans un référentiel ECR privé, procédez comme suit :

  1. Authentifiez-vous auprès du registre public ECR :

    $ aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
  2. Extrayez l'image de la console Web publique :

    $ docker pull public.ecr.aws/aws-solutions/distributed-load-testing-on-aws-web-console:<version>
  3. Créez un référentiel ECR privé dans votre compte (s'il n'en existe pas déjà un) :

    $ aws ecr create-repository --repository-name <your-repo-name> --region <region> 2>/dev/null || true
  4. Authentifiez-vous auprès de votre registre ECR privé :

    $ aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <account-id>.dkr.ecr.<region>.amazonaws.com
  5. Marquez et transférez l'image vers votre dépôt privé :

    $ 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. Lors du lancement de la pile ALB + ECS Fargate, entrez l'URI de l'image privée dans le paramètre URI de l'image de la console Web :

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

Personnaliser l'image de la console Web

Vous pouvez également personnaliser l'image de la console Web. Les ressources d'images se trouvent dans le deployment/ecr/distributed-load-testing-on-aws-web-console répertoire, situé dans le GitHub référentiel. Vous pouvez modifier les fichiers conteneurs, créer une image locale, la transférer vers un référentiel ECR privé et fournir l'URI de l'image résultante dans le paramètre URI de l'image de la console Web.

L'image du conteneur de la console Web s'appuie sur une image de base Nginx et installe l'AWS CLI. Son Dockerfile copie la configuration Nginx et un script de point d'entrée. Le Dockerfile expose le port HTTP et définit le script de point d'entrée à exécuter au démarrage du conteneur. Lorsque le conteneur démarre, le fichier entrypoint.sh utilise l'interface de ligne de commande AWS pour télécharger les ressources de la console Web depuis Amazon S3. Il les extrait dans la racine du document Nginx, puis démarre Nginx au premier plan. Le fichier nginx.conf dessert l'application monopage (SPA) et redirige des chemins inégalés vers le point d'entrée de l'application. Il ajoute également un point de terminaison de contrôle de santé pour l'équilibreur de charge des applications, permet la compression gzip, définit une mise en cache de longue durée pour les actifs statiques (tout en désactivant la mise en cache pour le point d'entrée et la configuration d'exécution) et ajoute des en-têtes de réponse de sécurité courants.

Pour plus d'informations, consultez la section Envoyer une image Docker vers un référentiel privé Amazon ECR dans le Guide de l'utilisateur Amazon ECR.

URI d'image du testeur de charge

Les trois modèles de déploiement (Amazon CloudFront + S3, Application Load Balancer (ALB) + ECS sur AWS Fargate et headless) extraient une image de conteneur de testeur de charge depuis le registre public Amazon Elastic Container Registry (Amazon ECR) () au moment du déploiement. public.ecr.aws

Dans les environnements où l'accès aux registres de conteneurs publics est restreint, reproduisez l'image du testeur de charge sur un référentiel Amazon ECR privé et indiquez l'URI de l'image privée dans le paramètre AWS CloudFormation Load Tester Image URI (LoadTesterImageUri). Les exemples courants incluent les VPC sans accès à Internet, les comptes dotés de politiques d'accès public ECR et les régions AWS GovCloud (États-Unis), où les tâches ECS ne peuvent pas accéder au registre ECR public. La mise en miroir vers un référentiel privé dans votre région de déploiement est requise pour les déploiements AWS GovCloud (États-Unis) et facultative ailleurs.

Reproduisez l'image du testeur de charge dans un référentiel ECR privé

Note

Lorsque vous fournissezLoadTesterImageUri, le paramètre Auto-update Container Image (UseStableTagging) ne gère plus l'image du testeur de charge. Pour récupérer les correctifs de sécurité, vous devez reproduire les balises d'image mises à jour.

Pour dupliquer l'image du testeur de charge dans un référentiel ECR privé, procédez comme suit. Dans les commandes suivantes, remplacez <version> par la balise image (par exemplev4.0.0), <region> par votre région de déploiement (par exempleus-gov-west-1), <profile> par le nom de votre profil AWS Command Line Interface (AWS CLI) et <account-id> par votre identifiant de compte AWS à 12 chiffres.

  1. Authentifiez-vous auprès du registre public ECR à partir d'une machine ayant accès à Internet.

    aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
  2. Extrayez l'image du testeur de charge public.

    docker pull public.ecr.aws/aws-solutions/distributed-load-testing-on-aws-load-tester:<version>
  3. Créez un référentiel ECR privé dans votre compte (s'il n'en existe pas déjà un).

    aws ecr create-repository --repository-name dlt-load-tester --region <region> --profile <profile> 2>/dev/null || true
  4. Authentifiez-vous auprès de votre registre ECR privé.

    aws ecr get-login-password --region <region> --profile <profile> | docker login --username AWS --password-stdin <account-id>.dkr.ecr.<region>.amazonaws.com
  5. Marquez et transférez l'image vers votre référentiel privé.

    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. Entrez l'URI de l'image privée dans le paramètre Load Tester Image URI lorsque vous lancez la pile.

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

Exemples de déploiement d'AWS GovCloud (États-Unis)

Les exemples suivants montrent les paramètres requis pour chaque variante de pile dans AWS GovCloud (États-Unis).

Pour la pile sans tête, seuls LoadTesterImageUri sont requis :

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

Pour l'équilibreur de charge d'application (ALB) + ECS sur la pile AWS Fargate, fournissez à la fois et. LoadTesterImageUri WebConsoleImageUri Les tâches ECS dans AWS GovCloud (États-Unis) ne peuvent pas accéder au registre ECR public (public.ecr.aws), vous devez donc dupliquer les deux images de conteneur.

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

Pour obtenir des instructions sur la mise en miroir de l'image de la console Web, voir Image de la console Web.