Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Konfiguration vorinitialisierter Instances für Ihre Auto-Scaling-Gruppe in Amazon ECS
Amazon ECS unterstützt Warm-Pools für Amazon EC2 Auto Scaling. Ein Warm-Pool ist eine Gruppe von vorinitialisierten Amazon-EC2-Instances, die bereit sind, in Betrieb genommen zu werden. Wann immer Ihre Anwendung aufskaliert werden muss, verwendet Amazon EC2 Auto Scaling die vorinitialisierten Instances aus dem Warm-Pool, anstatt kalte Instances zu launchen, erlaubt die Ausführung eines endgültigen Initialisierungsprozesses und stellt die Instance dann in Betrieb.
Weitere Informationen zu Warm-Pools und zum Hinzufügen eines Warm-Pools zu Ihrer Auto-Scaling-Gruppe finden Sie unter Warm-Pools für Amazon EC2 Auto Scaling im Benutzerhandbuch zu Amazon EC2 Auto Scaling.
Wenn Sie einen Warm-Pool für eine Auto-Scaling-Gruppe für Amazon ECS erstellen oder aktualisieren, können Sie die Option nicht festlegen, mit der Instances an den Warm-Pool beim Abskalieren zurückgegeben werden (ReuseOnScaleIn). Weitere Informationen finden Sie unter put-warm-pool in der AWS Command Line Interface Referenz.
Um Warm-Pools mit Ihrem Amazon-ECS-Cluster zu verwenden, setzen Sie die Agent-Konfigurationsvariable ECS_WARM_POOLS_CHECK im Feld User data (Benutzerdaten) der Launchvorlage Ihrer Amazon-EC2-Auto-Scaling-Gruppe auf true.
Im Folgenden wird ein Beispiel dafür gezeigt, wie die Agentenkonfigurationsvariable im Feld Benutzerdaten einer Amazon EC2-Startvorlage für Linux-Instances angegeben werden kann. Ersetzen Sie MyCluster mit dem Namen Ihres Clusters. Für Windows-Instances siehe Verwendung von Warm-Pools mit Amazon ECS-Windows-Instances.
#!/bin/bash cat <<'EOF' >> /etc/ecs/ecs.config ECS_CLUSTER=MyClusterECS_WARM_POOLS_CHECK=true EOF
Diese Variable ECS_WARM_POOLS_CHECK wird nur von den Agenten-Versionen 1.59.0 oder höher unterstützt. Weitere Informationen zu der Variablen finden Sie unter Konfiguration des Amazon-ECS-Container-Agenten.
Verwendung von Warm-Pools mit Amazon ECS-Windows-Instances
Wenn Sie Warm-Pools mit dem Status Stopped Pool auf Windows-Instances verwenden, verwenden Sie Amazon EC2 Auto Scaling-Lifecycle-Hooks, um sicherzustellen, dass die Ausführung der Benutzerdaten abgeschlossen ist, bevor die Instance gestoppt wird. Ohne Lifecycle-Hooks kann die Instance gestoppt werden, bevor die Amazon ECS-Initialisierung abgeschlossen ist.
So konfigurieren Sie Lifecycle-Hooks für Windows Warm Pool-Instances:
-
Fügen Sie Ihrer Container-Instance-Rolle die folgende IAM-Richtlinie hinzu, damit die Instance die Lifecycle-Aktion abschließen kann:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "autoscaling:CompleteLifecycleAction" ], "Resource": "*" } ] } -
Fügen Sie Ihrer Auto Scaling-Gruppe beim Start der Instance einen Lifecycle-Hook hinzu.
ABANDONAls Standardergebnis und ein Heartbeat-Timeout, das genügend Zeit für die Amazon ECS-Initialisierung einräumt (z. B. 10 Minuten). Weitere Informationen finden Sie unter Lebenszyklus-Hooks hinzufügen im Benutzerhandbuch zu Amazon EC2 Auto Scaling. -
Verwenden Sie die folgenden Benutzerdaten, um eine geplante Aufgabe zu erstellen, um die Lifecycle-Aktion nach einer Verzögerung abzuschließen. Die Verzögerung stellt sicher, dass EC2Launch das Speichern seines Status abgeschlossen hat, bevor die Instance gestoppt wird. Ersetzen Sie
MyClustermy-lifecycle-hook, undmy-asg-namedurch Ihre Werte.<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>
Dieses Benutzerdatenskript führt folgende Aktionen aus:
-
Initialisiert den Amazon ECS-Agenten mit aktivierter Warm-Pools-Überprüfung.
-
Erstellt eine geplante Aufgabe, die 60 Sekunden wartet, nachdem die Benutzerdaten abgeschlossen sind, und signalisiert dann dem Lifecycle-Hook, dass er fortfährt.
-
Erstellt eine geplante Aufgabe, die bei jedem nachfolgenden Neustart ausgeführt wird, und signalisiert dem Lifecycle-Hook, dass er nach 60 Sekunden fortfährt.
-
Schlägt die Initialisierung fehl, wird die Lifecycle-Aktion abgeschlossen,
ABANDONsodass die Instanz beendet und ersetzt wird.