View a markdown version of this page

Configuration d’instances préinitialisées pour votre groupe Auto Scaling Amazon ECS - Amazon Elastic Container Service

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.

Configuration d’instances préinitialisées pour votre groupe Auto Scaling Amazon ECS

Amazon ECS prend en charge les groupes d'instances pré-initialisées Amazon EC2 Auto Scaling. Un groupe d'instances pré-initialisées est un groupe d'instances Amazon EC2 pré-initialisées prêtes à être mises en service. Chaque fois que votre application doit monter en puissance, Amazon EC2 Auto Scaling utilise les instances pré-initialisées du groupe d'instances pré-initialisées plutôt que de lancer des instances froides, permet l'exécution de tout processus d'initialisation final, puis met l'instance en service.

Pour en savoir plus sur les groupes instances pré-initialisées et comment les ajouter à votre groupe Auto Scaling, consultez la section Groupes d'instances pré-initialisées pour Amazon EC2 Auto Scaling dans le Guide de l'utilisateur Amazon EC2 Auto Scaling.

Lorsque vous créez ou mettez à jour un groupe instances pré-initialisées pour un groupe Auto Scaling pour Amazon ECS, vous ne pouvez pas définir l'option qui renvoie les instances vers le groupe instances pré-initialisées à mise à l'échelle horizontale (ReuseOnScaleIn). Pour plus d'informations, consultez put-warm-pool dans la Référence AWS Command Line Interface .

Pour utiliser des groupes d'instances pré-initialisées avec votre cluster Amazon ECS, définissez la variable de configuration de l'agent ECS_WARM_POOLS_CHECK sur true dans le champ User data (Données utilisateur) du modèle de lancement de votre groupe Amazon EC2 Auto Scaling.

Voici un exemple de la manière dont la variable de configuration de l'agent peut être spécifiée dans le champ Données utilisateur d'un modèle de lancement Amazon EC2 pour les instances Linux. Remplacez MyCluster par le nom de votre cluster. Pour les instances Windows, consultez Utilisation de pools chauds avec des instances Windows Amazon ECS.

#!/bin/bash cat <<'EOF' >> /etc/ecs/ecs.config ECS_CLUSTER=MyCluster ECS_WARM_POOLS_CHECK=true EOF

La variable ECS_WARM_POOLS_CHECK est uniquement prise en charge sur les versions d'agent 1.59.0 et ultérieures. Pour plus d'informations sur la variable, veuillez consulter Configuration de l'agent de conteneur Amazon ECS.

Utilisation de pools chauds avec des instances Windows Amazon ECS

Lorsque vous utilisez des pools chauds avec l'état Stopped pool sur des instances Windows, utilisez les hooks de cycle de vie Amazon EC2 Auto Scaling pour vous assurer que l'exécution des données utilisateur est terminée avant que l'instance ne soit arrêtée. Sans crochets liés au cycle de vie, l'instance peut être arrêtée avant la fin de l'initialisation d'Amazon ECS.

Pour configurer les hooks du cycle de vie pour les instances de warm pool Windows :

  1. Ajoutez la politique IAM suivante à votre rôle d'instance de conteneur pour permettre à l'instance de terminer l'action du cycle de vie :

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "autoscaling:CompleteLifecycleAction" ], "Resource": "*" } ] }
  2. Ajoutez un lien de cycle de vie à votre groupe Auto Scaling lors du lancement d'instance avec ABANDON comme résultat par défaut un délai d'attente suffisant pour l'initialisation d'Amazon ECS (par exemple, 10 minutes). Pour plus d'informations, consultez la rubrique Utilisation de hooks de cycle de vie du Guide de l'utilisateur Amazon EC2 Auto Scaling.

  3. Utilisez les données utilisateur suivantes qui créent une tâche planifiée pour terminer l'action du cycle de vie après un certain délai. Ce délai garantit qu'EC2Launch termine d'enregistrer son état avant que l'instance ne soit arrêtée. Remplacez MyClustermy-lifecycle-hook, et my-asg-name par vos valeurs.

    <powershell> $lifecycleHookName = "my-lifecycle-hook" $autoScalingGroupName = "my-asg-name" $scriptContent = @' $token = Invoke-RestMethod -Method Put -Uri http://169.254.169.254/latest/api/token -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} $instanceId = Invoke-RestMethod -Method Get -Uri http://169.254.169.254/latest/meta-data/instance-id -Headers @{"X-aws-ec2-metadata-token" = $token} $region = Invoke-RestMethod -Method Get -Uri http://169.254.169.254/latest/meta-data/placement/region -Headers @{"X-aws-ec2-metadata-token" = $token} $lifecycleHookName = "my-lifecycle-hook" $autoScalingGroupName = "my-asg-name" Complete-ASLifecycleAction -LifecycleHookName $lifecycleHookName -AutoScalingGroupName $autoScalingGroupName -InstanceId $instanceId -LifecycleActionResult 'CONTINUE' -Region $region '@ Set-Content -Path "C:\ProgramData\Amazon\ECS\complete-lifecycle.ps1" -Value $scriptContent try { [Environment]::SetEnvironmentVariable("ECS_WARM_POOLS_CHECK", "true", "Machine") Import-Module ECSTools Initialize-ECSAgent -Cluster MyCluster -EnableTaskIAMRole $taskAction = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -File C:\ProgramData\Amazon\ECS\complete-lifecycle.ps1" $taskTrigger = New-ScheduledTaskTrigger -Once -At ((Get-Date).AddSeconds(60)) $settings = New-ScheduledTaskSettingsSet -StartWhenAvailable $taskPrincipal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest Register-ScheduledTask -TaskName "CompleteLifecycleHook" -Action $taskAction -Trigger $taskTrigger -Principal $taskPrincipal -Settings $settings -Force } catch { $token = Invoke-RestMethod -Method Put -Uri http://169.254.169.254/latest/api/token -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} $INSTANCE = Invoke-RestMethod -Method Get -Uri http://169.254.169.254/latest/meta-data/instance-id -Headers @{"X-aws-ec2-metadata-token" = $token} $region = Invoke-RestMethod -Method Get -Uri http://169.254.169.254/latest/meta-data/placement/region -Headers @{"X-aws-ec2-metadata-token" = $token} Complete-ASLifecycleAction -InstanceId $INSTANCE -LifecycleHookName $lifecycleHookName -AutoScalingGroupName $autoScalingGroupName -LifecycleActionResult ABANDON -Region $region } </powershell> <persist>true</persist>

Ce script de données utilisateur effectue les opérations suivantes :

  • Initialise l'agent Amazon ECS en activant la vérification des pools chauds.

  • Crée une tâche planifiée qui attend 30 secondes après la fin des données utilisateur, puis indique au hook du cycle de vie de continuer. Ce délai permet à EC2Launch de sauvegarder son état afin que les données utilisateur soient réexécutées correctement lors des démarrages suivants.

  • Si l'initialisation échoue, l'action du cycle de vie est terminée, de ABANDON sorte que l'instance est arrêtée et remplacée.