View a markdown version of this page

Configurazione delle istanze preinizializzate per il tuo gruppo Auto Scaling Amazon ECS - Amazon Elastic Container Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Configurazione delle istanze preinizializzate per il tuo gruppo Auto Scaling Amazon ECS

Amazon ECS supporta i warm pool Amazon EC2 Auto Scaling. Un warm pool è un gruppo di istanze Amazon EC2 pre-inizializzate pronte per essere messe in servizio. Ogni volta che l'applicazione ha bisogno di aumentare orizzontalmente, Amazon EC2 Auto Scaling utilizza le istanze pre-inizializzate dal warm pool anziché avviare istanze cold, consente l'esecuzione di qualsiasi processo di inizializzazione finale e quindi mette in servizio l'istanza.

Per ulteriori informazioni sui warm pool e su come aggiungere un warm pool al gruppo con scalabilità automatica, consulta Warm pool per Amazon EC2 Auto Scaling nella Guida per l'utente di Amazon EC2 Auto Scaling.

Quando crei o aggiorni un warm pool per un gruppo con scalabilità automatica per Amazon ECS, non puoi impostare l'opzione che restituisce le istanze al warm pool alla riduzione orizzontale (ReuseOnScaleIn). Per ulteriori informazioni, consulta put-warm-pool in Riferimenti della AWS Command Line Interface .

Per utilizzare i warm pool con il cluster Amazon ECS, imposta la variabile di configurazione dell'agente ECS_WARM_POOLS_CHECK su true nel campo User data (Dati utente) del modello di avvio del gruppo Amazon EC2 Auto Scaling.

Di seguito viene illustrato un esempio di come la variabile di configurazione dell'agente può essere specificata nel campo Dati utente di un modello di avvio di Amazon EC2 per istanze Linux. Sostituisci MyCluster con il nome del cluster. Per le istanze Windows, consultare Utilizzo di pool caldi con istanze Amazon ECS Windows.

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

La variabile ECS_WARM_POOLS_CHECK è supportata sull'agente solo a partire dalla versione 1.59.0. Per ulteriori informazioni sulle variabili, consulta Configurazione dell'agente del container Amazon ECS.

Utilizzo di pool caldi con istanze Amazon ECS Windows

Quando usi pool caldi con lo stato Stopped pool su istanze Windows, usa gli hook del ciclo di vita di Amazon EC2 Auto Scaling per garantire che l'esecuzione dei dati utente venga completata prima che l'istanza venga interrotta. Senza gli hook del ciclo di vita, l'istanza può essere interrotta prima del termine dell'inizializzazione di Amazon ECS.

Per configurare i lifecycle hook per le istanze Warm Pool di Windows:

  1. Aggiungi la seguente policy IAM al ruolo dell'istanza del contenitore per consentire all'istanza di completare l'azione del ciclo di vita:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "autoscaling:CompleteLifecycleAction" ], "Resource": "*" } ] }
  2. Aggiungi un lifecycle hook al tuo gruppo Auto Scaling su Instance Launching ABANDON con come risultato predefinito e un timeout heartbeat che consente un tempo sufficiente per l'inizializzazione di Amazon ECS (ad esempio, 10 minuti). Per ulteriori informazioni, consulta Aggiungere un hook del ciclo di vita nella Guida per l’utente di Amazon EC2 Auto Scaling.

  3. Utilizza i seguenti dati utente per creare un'attività pianificata per completare l'azione del ciclo di vita dopo un ritardo. Il ritardo assicura che EC2Launch completi il salvataggio dello stato prima che l'istanza venga interrotta. Sostituisci MyCluster e my-asg-name con i tuoi valori. my-lifecycle-hook

    <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>

Lo script di dati utente svolge le seguenti operazioni:

  • Inizializza l'agente Amazon ECS con il controllo delle pool calde abilitato.

  • Crea un'attività pianificata che attende 30 secondi dopo il completamento dei dati dell'utente, quindi segnala al lifecycle hook di procedere. Il ritardo consente a EC2Launch di salvare il proprio stato in modo che i dati dell'utente vengano rieseguiti correttamente agli avvii successivi.

  • Se l'inizializzazione fallisce, l'azione del ciclo di vita viene completata, ABANDON quindi l'istanza viene terminata e sostituita.