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 mostrato un esempio di come è possibile specificare la variabile di configurazione dell'agente 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 Windows di Amazon ECS.
#!/bin/bash cat <<'EOF' >> /etc/ecs/ecs.config ECS_CLUSTER=MyClusterECS_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 Windows di Amazon ECS
Quando utilizzi pool caldi con stato Stopped pool su istanze Windows, utilizza 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 gli hook del ciclo di vita per le istanze warm pool di Windows:
-
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": "*" } ] } -
Aggiungi un hook del ciclo di vita al tuo gruppo Auto Scaling su Instance Launching con
ABANDONcome risultato predefinito e un timeout heartbeat che consenta 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. -
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 termini il salvataggio del suo stato prima che l'istanza venga interrotta. Sostituisci
MyClustermy-lifecycle-hookemy-asg-namecon i tuoi valori.<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 -ClusterMyCluster-EnableTaskIAMRole $taskAction = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -File C:\ProgramData\Amazon\ECS\complete-lifecycle.ps1" $taskTriggerOnce = New-ScheduledTaskTrigger -Once -At ((Get-Date).AddSeconds(60)) $taskTriggerStartup = New-ScheduledTaskTrigger -AtStartup $taskTriggerStartup.Delay = "PT60S" $settings = New-ScheduledTaskSettingsSet -StartWhenAvailable $taskPrincipal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest Register-ScheduledTask -TaskName "CompleteLifecycleHook" -Action $taskAction -Trigger $taskTriggerOnce, $taskTriggerStartup -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>
Lo script di dati utente svolge le seguenti operazioni:
-
Inizializza l'agente Amazon ECS con il controllo dei warm pool abilitato.
-
Crea un'attività pianificata che attende 60 secondi dopo il completamento dei dati dell'utente, quindi segnala al ciclo di vita di procedere.
-
Crea un'operazione pianificata che viene eseguita a ogni successivo riavvio e segnala all'hook del ciclo di vita di procedere dopo 60 secondi.
-
Se l'inizializzazione non riesce, l'azione del ciclo di vita viene completata,
ABANDONquindi l'istanza viene terminata e sostituita.