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.
Probleme mit Amazon EC2 Auto Scaling beheben
Themen
- Allgemeine Amazon EC2 Auto Scaling Scaling-Fehlerbehebung
- "gibt Ihnen CodeDeployRole nicht die Erlaubnis, Operationen im folgenden AWS Dienst auszuführen: AmazonAutoScaling" Fehler
- Instances in einer Amazon EC2 Auto Scaling Scaling-Gruppe werden kontinuierlich bereitgestellt und beendet, bevor eine Revision bereitgestellt werden kann
- Das Beenden oder Neustarten einer Amazon EC2 Auto Scaling Scaling-Instance kann dazu führen, dass Bereitstellungen fehlschlagen
- Vermeiden Sie es, mehrere Bereitstellungsgruppen einer einzigen Amazon EC2 Auto Scaling-Gruppe zuzuordnen
- EC2Instances in einer Amazon EC2 Auto Scaling Scaling-Gruppe können nicht gestartet werden und erhalten den Fehler „Heartbeat Timeout“
- Nicht übereinstimmende Amazon EC2 Auto Scaling Scaling-Lifecycle-Hooks können dazu führen, dass automatische Bereitstellungen für Amazon EC2 Auto Scaling Scaling-Gruppen gestoppt werden oder fehlschlagen
- Fehler „Die Bereitstellung ist fehlgeschlagen, weil keine Instances für Ihre Bereitstellungsgruppe gefunden wurden“
Allgemeine Amazon EC2 Auto Scaling Scaling-Fehlerbehebung
Bereitstellungen für EC2 Instances in einer Amazon EC2 Auto Scaling Scaling-Gruppe können aus den folgenden Gründen fehlschlagen:
-
Amazon EC2 Auto Scaling startet und beendet kontinuierlich EC2 Instances. Wenn Ihre Anwendungsversion CodeDeploy nicht automatisch bereitgestellt werden kann, startet und beendet Amazon EC2 Auto Scaling kontinuierlich EC2 Instances.
Trennen Sie die Amazon EC2 Auto Scaling-Gruppe von der CodeDeploy Bereitstellungsgruppe oder ändern Sie die Konfiguration Ihrer Amazon EC2 Auto Scaling Scaling-Gruppe so, dass die gewünschte Anzahl von Instances der aktuellen Anzahl von Instances entspricht (wodurch verhindert wird, dass Amazon EC2 Auto Scaling weitere EC2 Instances startet). Weitere Informationen finden Sie unter Ändern Sie die Einstellungen der Bereitstellungsgruppe mit CodeDeploy oder Manuelles Skalieren für Amazon EC2 Auto Scaling.
-
Der CodeDeploy Agent reagiert nicht. Der CodeDeploy Agent ist möglicherweise nicht installiert, wenn Initialisierungsskripts (z. B. Cloud-Init-Skripts), die unmittelbar nach dem Starten oder Starten einer EC2 Instance ausgeführt werden, länger als eine Stunde dauern. CodeDeploy hat ein Timeout von einer Stunde, bis der CodeDeploy Agent auf ausstehende Bereitstellungen reagiert. Um dieses Problem zu beheben, verschieben Sie Ihre Initialisierungsskripts in die Revision Ihrer Anwendung. CodeDeploy
-
Eine EC2 Instance in einer Amazon EC2 Auto Scaling Scaling-Gruppe wird während einer Bereitstellung neu gestartet. Ihre Bereitstellung kann fehlschlagen, wenn eine EC2 Instance während einer Bereitstellung neu gestartet wird oder der CodeDeploy Agent während der Verarbeitung eines Bereitstellungsbefehls heruntergefahren wird. Weitere Informationen finden Sie unter Das Beenden oder Neustarten einer Amazon EC2 Auto Scaling Scaling-Instance kann dazu führen, dass Bereitstellungen fehlschlagen.
-
In einer Amazon EC2 Auto Scaling Scaling-Gruppe werden mehrere Anwendungsrevisionen gleichzeitig für dieselbe EC2 Instance bereitgestellt. Die gleichzeitige Bereitstellung mehrerer Anwendungsrevisionen für dieselbe EC2 Instance in einer Amazon EC2 Auto Scaling Scaling-Gruppe kann fehlschlagen, wenn eine der Bereitstellungen Skripts enthält, die länger als ein paar Minuten ausgeführt werden. Stellen Sie nicht mehrere Anwendungsrevisionen für dieselben EC2 Instances in einer Amazon EC2 Auto Scaling Scaling-Gruppe bereit.
-
Eine Bereitstellung schlägt für neue EC2 Instances fehl, die als Teil einer Amazon EC2 Auto Scaling Scaling-Gruppe gestartet werden. In diesem Szenario kann die Ausführung der Skripts in einer Bereitstellung den Start von EC2 Instances in der Amazon EC2 Auto Scaling Scaling-Gruppe verhindern. (Andere EC2 Instances in der Amazon EC2 Auto Scaling Scaling-Gruppe scheinen normal zu laufen.) Um dieses Problem zu beheben, stellen Sie sicher, dass alle anderen Skripts abgeschlossen sind:
-
CodeDeploy Agent ist nicht in Ihrem enthalten AMI: Wenn Sie den cfn-init Befehl verwenden, um den CodeDeploy Agenten zu installieren, während Sie eine neue Instance starten, platzieren Sie das Agenten-Installationsskript am Ende des
cfn-init
Abschnitts Ihrer AWS CloudFormation Vorlage. -
CodeDeploy Der Agent ist in Ihrem enthalten AMI: Konfigurieren Sie den AMI so, dass sich der Agent bei der Erstellung der Instanz in einem
Stopped
Zustand befindet, und fügen Sie dann als letzten Schritt ein Skript zum Starten des Agenten in Ihrecfn-init
Skriptbibliothek ein.
-
"gibt Ihnen CodeDeployRole nicht die Erlaubnis, Operationen im folgenden AWS Dienst auszuführen: AmazonAutoScaling" Fehler
Bereitstellungen, die eine mit einer Startvorlage erstellte Auto Scaling Scaling-Gruppe verwenden, benötigen die folgenden Berechtigungen. Diese gelten zusätzlich zu den Berechtigungen, die durch die AWSCodeDeployRole
AWS verwaltete Richtlinie gewährt werden.
-
EC2:RunInstances
-
EC2:CreateTags
-
iam:PassRole
Sie können diese Fehlermeldung erhalten, wenn diese Berechtigungen fehlen. Weitere Informationen finden Sie unter Tutorial: Wird verwendet CodeDeploy , um eine Anwendung für eine Auto Scaling Scaling-Gruppe bereitzustellen Erstellen einer Startvorlage für eine Auto Scaling Scaling-Gruppe und Berechtigungen im Amazon EC2 Auto Scaling Scaling-Benutzerhandbuch.
Instances in einer Amazon EC2 Auto Scaling Scaling-Gruppe werden kontinuierlich bereitgestellt und beendet, bevor eine Revision bereitgestellt werden kann
In einigen Fällen kann ein Fehler eine erfolgreiche Bereitstellung für neu bereitgestellte Instances in einer Amazon EC2 Auto Scaling Scaling-Gruppe verhindern. Dies führt zu keinen fehlerfreien Instances und keinen erfolgreichen Bereitstellungen. Da die Bereitstellung nicht erfolgreich ausgeführt oder nicht abgeschlossen werden kann, werden die Instances bald nach der Erstellung beendet. Die Amazon EC2 Auto Scaling Scaling-Gruppenkonfiguration veranlasst dann, dass ein weiterer Stapel von Instances bereitgestellt wird, um zu versuchen, die Mindestanforderung für gesunde Hosts zu erfüllen. Dieser Stapel wird außerdem beendet und der Zyklus wird fortgesetzt.
Mögliche Gründe hierfür sind:
-
Fehlgeschlagene Amazon EC2 Auto Scaling Scaling-Gruppenzustandsprüfungen.
-
Ein Fehler in der Anwendungsrevision
Um dieses Problem zu umgehen, führen Sie die folgenden Schritte aus:
-
Erstellen Sie manuell eine EC2 Instance, die nicht Teil der Amazon EC2 Auto Scaling Scaling-Gruppe ist. Kennzeichnen Sie die Instance mit einem eindeutigen EC2 Instance-Tag.
-
Fügen Sie die neue Instance zu der betroffenen Bereitstellungsgruppe hinzu.
-
Stellen Sie eine neue, fehlerfreie Anwendungsrevision für die Bereitstellungsgruppe bereit.
Dadurch wird die Amazon EC2 Auto Scaling Scaling-Gruppe aufgefordert, die Anwendungsrevision für future Instances in der Amazon EC2 Auto Scaling Scaling-Gruppe bereitzustellen.
Anmerkung
Nachdem Sie bestätigt haben, dass die Bereitstellungen erfolgreich waren, löschen Sie die Instance, die Sie erstellt haben, um laufende Gebühren für Ihr AWS Konto zu vermeiden.
Das Beenden oder Neustarten einer Amazon EC2 Auto Scaling Scaling-Instance kann dazu führen, dass Bereitstellungen fehlschlagen
Wenn eine EC2 Instance über Amazon EC2 Auto Scaling gestartet wird und die Instance anschließend beendet oder neu gestartet wird, können Bereitstellungen für diese Instance aus den folgenden Gründen fehlschlagen:
-
Während einer laufenden Bereitstellung führt ein Scale-In-Ereignis oder ein anderes Kündigungsereignis dazu, dass sich die Instance von der Amazon EC2 Auto Scaling Scaling-Gruppe trennt und dann beendet wird. Da die Bereitstellung nicht abgeschlossen werden kann, schlägt sie fehl.
-
Die Instance wird neu gestartet, aber es dauert mehr als fünf Minuten, bis die Instance gestartet wird. CodeDeploy behandelt dies als Timeout. Der Service lässt alle aktuellen und zukünftigen Bereitstellungen in der Instance fehlschlagen.
So beheben Sie dieses Problem:
-
Stellen Sie grundsätzlich sicher, dass alle Bereitstellungen abgeschlossen sind, bevor die Instance beendet oder neu gestartet wird. Stellen Sie sicher, dass alle Bereitstellungen starten, nachdem die Instance gestartet oder neu gestartet wurde.
-
Bereitstellungen können fehlschlagen, wenn Sie ein Amazon Machine Image (AMI) auf Windows Server-Basis für eine Amazon EC2 Auto Scaling Scaling-Konfiguration angeben und den EC2Config Dienst verwenden, um den Computernamen der Instance festzulegen. Um dieses Problem zu beheben, deaktivieren Sie in der Windows Server-Basis AMI auf der Registerkarte Allgemein in den EC2Service-Eigenschaften die Option Computername festlegen. Nachdem Sie dieses Kontrollkästchen deaktiviert haben, ist dieses Verhalten für alle neuen Windows Server Amazon EC2 Auto Scaling Scaling-Instances deaktiviert, die mit dieser Windows Server-Basis gestartet wurdenAMI. Für Windows Server Amazon EC2 Auto Scaling Scaling-Instances, auf denen dieses Verhalten aktiviert ist, müssen Sie dieses Kontrollkästchen nicht deaktivieren. Stellen Sie fehlgeschlagene Bereitstellungen einfach erneut in diesen Instances bereit, nachdem sie neu gestartet wurden.
Vermeiden Sie es, mehrere Bereitstellungsgruppen einer einzigen Amazon EC2 Auto Scaling-Gruppe zuzuordnen
Als bewährte Methode sollten Sie jeder Amazon EC2 Auto Scaling Scaling-Gruppe nur eine Bereitstellungsgruppe zuordnen.
Das liegt daran, dass Amazon EC2 Auto Scaling, wenn es eine Instance hochskaliert, deren Hooks mehreren Bereitstellungsgruppen zugeordnet sind, Benachrichtigungen für alle Hooks gleichzeitig sendet. Dies bewirkt, dass mehrere Bereitstellungen für jede Instance gleichzeitig starten. Wenn mehrere Bereitstellungen gleichzeitig Befehle an den CodeDeploy Agenten senden, kann das Zeitlimit von fünf Minuten zwischen einem Lebenszyklusereignis und entweder dem Beginn der Bereitstellung oder dem Ende des vorherigen Lebenszyklusereignisses erreicht sein. In diesem Fall schlägt die Bereitstellung fehl, auch wenn ein Bereitstellungsprozess ansonsten wie erwartet abläuft.
Anmerkung
Das Standard-Timeout für ein Skript in einem Lebenszyklusereignis beträgt 30 Minuten. Sie können das Timeout in der Datei auf einen anderen Wert ändern. AppSpec Weitere Informationen finden Sie unter Fügen Sie eine AppSpec Datei für eine EC2/On-Premises-Bereitstellung hinzu.
Es ist nicht möglich, die Reihenfolge der Bereitstellungen zu steuern, wenn mehrere Bereitstellungen gleichzeitig ausgeführt werden sollen.
Und wenn die Bereitstellung auf einer Instance fehlschlägt, beendet Amazon EC2 Auto Scaling die Instance sofort. Wenn die erste Instance heruntergefahren wird, beginnen die anderen laufenden Bereitstellungen auszufallen. Da es für den CodeDeploy Agenten ein Timeout von einer Stunde CodeDeploy gibt, um auf ausstehende Bereitstellungen zu reagieren, kann es bis zu 60 Minuten dauern, bis das Timeout für jede Instance eintritt.
Weitere Informationen zu Amazon EC2 Auto Scaling finden Sie unter Under the hood: CodeDeploy and Auto Scaling Scaling-Integration
EC2Instances in einer Amazon EC2 Auto Scaling Scaling-Gruppe können nicht gestartet werden und erhalten den Fehler „Heartbeat Timeout“
Eine Amazon EC2 Auto Scaling Scaling-Gruppe kann möglicherweise keine neuen EC2 Instances starten und generiert eine Meldung ähnlich der folgenden:
Launching a new EC2 instance
. <instance-Id>
. Status Reason: Instance failed to
complete user's Lifecycle Action: Lifecycle Action with
token<token-Id>
was abandoned: Heartbeat
Timeout
Diese Meldung weist normalerweise auf einen der folgenden Sachverhalte hin:
-
Die maximale Anzahl gleichzeitiger Bereitstellungen, die einem AWS Konto zugeordnet sind, wurde erreicht. Weitere Informationen zu Bereitstellungslimits finden Sie unter CodeDeploy Kontingente.
-
Die Auto Scaling Scaling-Gruppe hat versucht, zu viele EC2 Instances zu schnell zu starten. Die API Aufrufe zu RecordLifecycleActionHeartbeatoder CompleteLifecycleActionfür jede neue Instance wurden gedrosselt.
-
Eine Anwendung CodeDeploy wurde gelöscht, bevor die zugehörigen Bereitstellungsgruppen aktualisiert oder gelöscht wurden.
Wenn Sie eine Anwendung oder Bereitstellungsgruppe löschen, CodeDeploy versucht es, alle damit verknüpften Amazon EC2 Auto Scaling Scaling-Hooks zu bereinigen, aber einige Hooks bleiben möglicherweise bestehen. Wenn Sie einen Befehl zum Löschen einer Bereitstellungsgruppe ausführen, werden die restlichen Hooks in der Ausgabe zurückgegeben. Wenn Sie jedoch einen Befehl zum Löschen einer Anwendung ausführen, werden die restlichen Hooks nicht in der Ausgabe angezeigt.
Löschen Sie daher als bewährte Methode alle Bereitstellungsgruppen, die einer Anwendung zugeordnet sind, bevor Sie die Anwendung löschen. Sie können anhand der Befehlsausgabe die Lebenszyklus-Hooks bestimmen, die manuell gelöscht werden müssen.
Wenn Sie die Fehlermeldung „Heartbeat Timeout“ erhalten, können Sie bestimmen, ob übrige Lebenszyklus-Hooks der Grund sind, und das Problem wie folgt beheben:
-
Führen Sie eine der folgenden Aktionen aus:
-
Rufen Sie den delete-deployment-groupBefehl auf, um die Bereitstellungsgruppe zu löschen, die der Auto Scaling Scaling-Gruppe zugeordnet ist, die das Heartbeat-Timeout verursacht.
-
Rufen Sie den update-deployment-groupBefehl mit einer leeren Liste von Auto Scaling Scaling-Gruppennamen auf, die nicht Null ist, um alle von CodeDeploy -managed Auto Scaling Scaling-Lifecycle-Hooks zu trennen.
Geben Sie beispielsweise den folgenden Befehl ein: AWS CLI
aws deploy update-deployment-group --application-name my-example-app --current-deployment-group-name my-deployment-group --auto-scaling-groups
Ein weiteres Beispiel: Wenn Sie das CodeDeploy API mit Java verwenden, rufen Sie auf
UpdateDeploymentGroup
und setzen SieautoScalingGroups
es aufnew ArrayList<String>()
. Dadurch wirdautoScalingGroups
eine leere Liste angezeigt und die bestehende Liste wird entfernt. Verwenden Sie diese Option nichtnull
, was die Standardeinstellung ist, da sie soautoScalingGroups
bleibt, wie sie ist, was Sie nicht möchten.
Überprüfen Sie die Ausgabe des Aufrufs. Wenn die Ausgabe eine
hooksNotCleanedUp
Struktur mit einer Liste von Amazon EC2 Auto Scaling Scaling-Lifecycle-Hooks enthält, gibt es übrig gebliebene Lifecycle-Hooks. -
-
Rufen Sie den describe-lifecycle-hooksBefehl auf und geben Sie den Namen der Amazon EC2 Auto Scaling Scaling-Gruppe an, die den EC2 Instances zugeordnet ist, die nicht gestartet werden konnten. Suchen Sie in der Ausgabe nach einem der folgenden Elemente:
-
Namen von Amazon EC2 Auto Scaling Scaling-Lifecycle-Hooks, die der
hooksNotCleanedUp
Struktur entsprechen, die Sie in Schritt 1 identifiziert haben. -
Amazon EC2 Auto Scaling Scaling-Lifecycle-Hook-Namen, die den Namen der Bereitstellungsgruppe enthalten, die der fehlerhaften Auto Scaling Scaling-Gruppe zugeordnet ist.
-
Namen von Amazon EC2 Auto Scaling Scaling-Lifecycle-Hooks, die möglicherweise das Heartbeat-Timeout für die CodeDeploy Bereitstellung verursacht haben.
-
-
Wenn ein Hook in eine der in Schritt 2 aufgeführten Kategorien fällt, rufen Sie den delete-lifecycle-hookBefehl auf, um ihn zu löschen. Geben Sie die Amazon EC2 Auto Scaling Scaling-Gruppe und den Lifecycle-Hook im Aufruf an.
Wichtig
Löschen Sie nur Hooks, die Probleme verursachen, wie in Schritt 2 beschrieben. Wenn Sie brauchbare Hooks löschen, schlagen Ihre Bereitstellungen möglicherweise fehl oder Sie können Ihre Anwendungsrevisionen CodeDeploy möglicherweise nicht auf skalierten Instanzen bereitstellen. EC2
-
Rufen Sie entweder den create-deployment-groupBefehl update-deployment-groupoder mit den gewünschten Auto Scaling Scaling-Gruppennamen auf. CodeDeployinstalliert die Auto Scaling Scaling-Hooks mit neuen neu neuUUIDs.
Anmerkung
Wenn Sie eine Auto Scaling Scaling-Gruppe von einer CodeDeploy Bereitstellungsgruppe trennen, können alle laufenden Bereitstellungen für die Auto Scaling-Gruppe fehlschlagen, und neue EC2 Instances, die von der Auto Scaling-Gruppe horizontal skaliert werden, erhalten Ihre Anwendungsrevisionen nicht von. CodeDeploy Damit Auto Scaling wieder funktioniert CodeDeploy, müssen Sie die Auto Scaling Scaling-Gruppe erneut der Bereitstellungsgruppe zuordnen und eine neue anrufen, um eine flottenweite Bereitstellung CreateDeployment
zu starten.
Nicht übereinstimmende Amazon EC2 Auto Scaling Scaling-Lifecycle-Hooks können dazu führen, dass automatische Bereitstellungen für Amazon EC2 Auto Scaling Scaling-Gruppen gestoppt werden oder fehlschlagen
Amazon EC2 Auto Scaling und CodeDeploy verwenden Lifecycle-Hooks, um zu bestimmen, welche Anwendungsrevisionen für welche EC2 Instances bereitgestellt werden sollen, nachdem sie in Amazon EC2 Auto Scaling Scaling-Gruppen gestartet wurden. Automatische Bereitstellungen können gestoppt werden oder fehlschlagen, wenn Lifecycle-Hooks und Informationen zu diesen Hooks in Amazon EC2 Auto Scaling und CodeDeploy nicht exakt übereinstimmen.
Wenn Bereitstellungen für eine Amazon EC2 Auto Scaling-Gruppe fehlschlagen, überprüfen Sie, ob die Lifecycle-Hook-Namen in Amazon EC2 Auto Scaling CodeDeploy übereinstimmen. Wenn nicht, verwenden Sie diese AWS CLI Befehlsaufrufe.
Rufen Sie zunächst die Liste der Lifecycle-Hook-Namen sowohl für die Amazon EC2 Auto Scaling Scaling-Gruppe als auch für die Bereitstellungsgruppe ab:
-
Rufen Sie den describe-lifecycle-hooksBefehl auf und geben Sie den Namen der Amazon EC2 Auto Scaling Scaling-Gruppe an, die der Bereitstellungsgruppe in zugeordnet ist CodeDeploy. Notieren Sie sich jeden
LifecycleHooks
-Wert der ListeLifecycleHookName
der Ausgabe. -
Rufen Sie den get-deployment-groupBefehl auf und geben Sie den Namen der Bereitstellungsgruppe an, die der Amazon EC2 Auto Scaling Scaling-Gruppe zugeordnet ist. Suchen Sie in der Ausgabe in der
autoScalingGroups
Liste nach jedem Element, dessen Namenswert mit dem Amazon EC2 Auto Scaling Scaling-Gruppennamen übereinstimmt, und notieren Sie sich dann den entsprechendenhook
Wert.
Vergleichen Sie nun die beiden Mengen von Lebenszyklus-Hook-Namen. Wenn sie Zeichen für Zeichen exakt übereinstimmen, liegt das Problem woanders. Möglicherweise möchten Sie andere Schritte zur Fehlerbehebung bei Amazon EC2 Auto Scaling ausprobieren, die an anderer Stelle in diesem Abschnitt beschrieben werden.
Wenn jedoch die beiden Mengen von Lebenszyklus-Hook-Namen nicht Zeichen für Zeichen exakt übereinstimmen, führen Sie die folgenden Schritte aus:
-
Wenn es Lebenszyklus-Hook-Namen in der Ausgabe des Befehls describe-lifecycle-hooks gibt, die nicht auch in der Ausgabe des Befehls get-deployment-group vorkommen, führen Sie die folgenden Schritte aus:
-
Rufen Sie für jeden Lifecycle-Hook-Namen in der describe-lifecycle-hooks Befehlsausgabe den delete-lifecycle-hookBefehl auf.
-
Rufen Sie den update-deployment-groupBefehl auf und geben Sie den Namen der ursprünglichen Amazon EC2 Auto Scaling Scaling-Gruppe an. CodeDeploy erstellt neue Ersatz-Lifecycle-Hooks in der Amazon EC2 Auto Scaling Scaling-Gruppe und ordnet die Lifecycle-Hooks der Bereitstellungsgruppe zu. Automatische Bereitstellungen sollten jetzt wieder aufgenommen werden, sobald neue Instances zur Amazon EC2 Auto Scaling Scaling-Gruppe hinzugefügt werden.
-
-
Wenn es Lebenszyklus-Hook-Namen in der Ausgabe des Befehls get-deployment-group gibt, die nicht auch in der Ausgabe des Befehls describe-lifecycle-hooks vorkommen, führen Sie die folgenden Schritte aus:
-
Rufen Sie den update-deployment-groupBefehl auf, geben Sie jedoch nicht den Namen der ursprünglichen Amazon EC2 Auto Scaling Scaling-Gruppe an.
-
Rufen Sie den update-deployment-group Befehl erneut auf, geben Sie diesmal jedoch den Namen der ursprünglichen Amazon EC2 Auto Scaling Scaling-Gruppe an. CodeDeploy erstellt die fehlenden Lifecycle-Hooks in der Amazon EC2 Auto Scaling Scaling-Gruppe neu. Automatische Bereitstellungen sollten jetzt wieder aufgenommen werden, sobald neue Instances zur Amazon EC2 Auto Scaling Scaling-Gruppe hinzugefügt werden.
-
Nachdem Sie sichergestellt haben, dass die beiden Gruppen von Lifecycle-Hook-Namen Zeichen für Zeichen exakt übereinstimmen, sollten Anwendungsrevisionen erneut bereitgestellt werden, jedoch nur für neue Instances, die der Amazon EC2 Auto Scaling Scaling-Gruppe hinzugefügt werden. Bereitstellungen erfolgen nicht automatisch für Instances, die sich bereits in der Amazon EC2 Auto Scaling Scaling-Gruppe befinden.
Fehler „Die Bereitstellung ist fehlgeschlagen, weil keine Instances für Ihre Bereitstellungsgruppe gefunden wurden“
Lesen Sie diesen Abschnitt, wenn Sie den folgenden CodeDeploy Fehler sehen:
The deployment failed because no instances were found for your deployment group.
Check your deployment group settings to make sure the tags for your EC2 instances
or Auto Scaling groups correctly identify the instances you want to deploy to, and then try
again.
Mögliche Ursachen für diesen Fehler sind:
-
Ihre Bereitstellungsgruppeneinstellungen enthalten Tags für EC2 Instances, lokale Instances oder Auto Scaling Scaling-Gruppen, die nicht korrekt sind. Um dieses Problem zu beheben, überprüfen Sie, ob Ihre Tags korrekt sind, und stellen Sie dann Ihre Anwendung erneut bereit.
-
Ihre Flotte wurde nach Beginn der Bereitstellung skaliert. In diesem Szenario werden fehlerfreie Instances in dem
InService
Status Ihrer Flotte angezeigt, es wird jedoch auch der obige Fehler angezeigt. Um dieses Problem zu beheben, stellen Sie Ihre Anwendung erneut bereit. -
Ihre Auto Scaling Scaling-Gruppe umfasst keine Instances, die sich im
InService
Bundesstaat befinden. Wenn Sie in diesem Szenario versuchen, eine flottenweite Bereitstellung durchzuführen, schlägt die Bereitstellung mit der obigen Fehlermeldung fehl, da mindestens eine Instance in diesem Status sein CodeDeploy muss.InService
Es gibt viele Gründe, warum Sie möglicherweise keine Instanzen imInService
Bundesstaat haben. Einige davon beinhalten:-
Sie haben die Auto Scaling Scaling-Gruppengröße so geplant (oder manuell konfiguriert)
0
. -
Auto Scaling hat fehlerhafte EC2 Instances erkannt (die EC2 Instances hatten beispielsweise Hardwarefehler) und hat sie alle storniert, sodass keine Instances mehr im
InService
Status verbleiben. -
Während eines Scale-Out-Ereignisses von
0
bis1
CodeDeploy wurde eine zuvor erfolgreiche Revision (die so genannte letzte erfolgreiche Revision) bereitgestellt, die seit der letzten Bereitstellung fehlerhaft geworden war. Dies führte dazu, dass die Bereitstellung auf der Scaled-Out-Instance fehlschlug, was wiederum dazu führte, dass Auto Scaling die Instance stornierte und keine Instances imInService
Status zurückblieben.Wenn Sie feststellen, dass Sie keine Instances im
InService
Status haben, beheben Sie das Problem wie im folgenden Verfahren beschrieben. To troubleshoot the error if there are no instances in the InService state
-
Um den Fehler zu beheben, wenn es im InService Bundesstaat keine Instanzen gibt
-
Überprüfen Sie in der EC2 Amazon-Konsole die Einstellung Gewünschte Kapazität. Wenn sie Null ist, setzen Sie sie auf eine positive Zahl. Warten Sie, bis die Instanz fertig ist
InService
, was bedeutet, dass die Bereitstellung erfolgreich war. Sie haben das Problem behoben und können die verbleibenden Schritte dieses Fehlerbehebungsverfahrens überspringen. Informationen zur Einstellung der gewünschten Kapazität finden Sie unter Festlegen von Kapazitätsgrenzen für Ihre Auto Scaling Scaling-Gruppe im Amazon EC2 Auto Scaling Scaling-Benutzerhandbuch. -
Wenn Auto Scaling immer wieder versucht, neue EC2 Instances zu starten, um die gewünschte Kapazität zu erreichen, das Scale-Out aber nie erreichen kann, liegt das in der Regel an einem fehlgeschlagenen Auto Scaling Scaling-Lifecycle-Hook. Beheben Sie dieses Problem wie folgt:
-
Informationen dazu, welches Auto Scaling Scaling-Lifecycle-Hook-Ereignis fehlschlägt, finden Sie unter Verifizieren einer Skalierungsaktivität für eine Auto Scaling Scaling-Gruppe im Amazon EC2 Auto Scaling Scaling-Benutzerhandbuch.
-
Wenn der Name des fehlgeschlagenen Hooks lautet
CodeDeploy-managed-automatic-launch-deployment-hook-
, gehen Sie zu CodeDeploy, suchen Sie die Bereitstellungsgruppe und suchen Sie die fehlgeschlagene Bereitstellung, die von Auto Scaling gestartet wurde. Untersuchen Sie dann, warum die Bereitstellung fehlgeschlagen ist.DEPLOYMENT_GROUP_NAME
-
Wenn Sie wissen, warum die Bereitstellung fehlgeschlagen ist (z. B. dass CloudWatch Alarme aufgetreten sind), und Sie das Problem beheben können, ohne die Version zu ändern, sollten Sie dies jetzt tun.
-
Wenn Sie nach einer Untersuchung feststellen, dass die CodeDeploy letzte erfolgreiche Revision nicht mehr fehlerfrei ist und es keine fehlerfreien Instances in Ihrer Auto Scaling Scaling-Gruppe gibt, befinden Sie sich in einem Bereitstellungs-Deadlock-Szenario. Um dieses Problem zu lösen, müssen Sie die fehlerhafte CodeDeploy Revision reparieren, indem Sie den Lifecycle-Hook vorübergehend aus der Auto Scaling Scaling-Gruppe entfernen CodeDeploy, den Hook dann erneut installieren und eine neue (gute) Revision erneut bereitstellen. Detaillierte Anweisungen finden Sie unter:
-
Um das Deployment-Deadlock-Problem zu beheben () CLI
-
(Optional) Blockieren Sie Ihre CI/CD-Pipelines, die den CodeDeploy Fehler verursachen, sodass es nicht zu unerwarteten Bereitstellungen kommt, während Sie dieses Problem beheben.
-
Notieren Sie sich Ihre aktuelle Auto Scaling DesiredCapacityScaling-Einstellung:
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name
ASG_NAME
Möglicherweise müssen Sie am Ende dieses Vorgangs wieder auf diese Zahl zurückskalieren.
-
Stellen Sie Ihre Auto Scaling DesiredCapacityScaling-Einstellung auf ein
1
. Dies ist optional, wenn Ihre gewünschte Kapazität höher war als1
ursprünglich angegeben. Wenn Sie sie auf reduzieren1
, nimmt die Instanz weniger Zeit für die Bereitstellung und spätere Bereitstellung in Anspruch, was die Fehlerbehebung beschleunigt. Wenn Ihre gewünschte Auto Scaling-Kapazität ursprünglich auf eingestellt war0
, müssen Sie sie auf erhöhen1
. Dies ist verpflichtend.als Autoscaling set-desired-capacity -- auto-scaling-group-name
ASG_NAME
--gewünschte Kapazität 1Anmerkung
Bei den verbleibenden Schritten dieses Verfahrens wird davon ausgegangen, dass Sie Ihren Wert auf eingestellt haben. DesiredCapacity
1
An diesem Punkt versucht Auto Scaling, auf eine Instanz zu skalieren. Da der CodeDeploy hinzugefügte Hook immer noch vorhanden ist, CodeDeploy versucht er dann die Bereitstellung; die Bereitstellung schlägt fehl; Auto Scaling bricht die Instance ab; und Auto Scaling versucht, eine Instance neu zu starten, um die gewünschte Kapazität von einer Instanz zu erreichen, was wiederum fehlschlägt. Sie befinden sich in einer Abbruch-Relaunch-Schleife.
-
Deregistrieren Sie die Auto Scaling Scaling-Gruppe von der Bereitstellungsgruppe ab:
Warnung
Mit dem folgenden Befehl wird eine neue EC2 Instance ohne Software gestartet. Bevor Sie den Befehl ausführen, stellen Sie sicher, dass eine Auto Scaling
InService
Scaling-Instanz, auf der keine Software ausgeführt wird, akzeptabel ist. Stellen Sie beispielsweise sicher, dass der der Instance zugeordnete Load Balancer ohne Software keinen Datenverkehr an diesen Host sendet.Wichtig
Verwenden Sie den unten abgebildeten CodeDeploy Befehl, um den Hook zu entfernen. Entfernen Sie den Hook nicht über den Auto Scaling Scaling-Dienst, da das Entfernen von nicht erkannt wird CodeDeploy.
aws deploy update-deployment-group --application-name
APPLICATION_NAME
--current-deployment-group-nameDEPLOYMENT_GROUP_NAME
--auto-scaling-groupsNach der Ausführung dieses Befehls passiert Folgendes:
-
CodeDeploy Deregistriert die Auto Scaling Scaling-Gruppe von der Bereitstellungsgruppe ab.
-
CodeDeploy entfernt den Auto Scaling Scaling-Lifecycle-Hook aus der Auto Scaling Scaling-Gruppe.
-
Da der Hook, der zu einer fehlgeschlagenen Bereitstellung geführt hat, nicht mehr vorhanden ist, storniert Auto Scaling die bestehende EC2 Instanz und startet sofort eine neue, um sie auf die gewünschte Kapazität zu skalieren. Die neue Instanz sollte bald ihren
InService
Status annehmen. Die neue Instanz enthält keine Software.
-
-
Warten Sie, bis die EC2 Instanz den
InService
Status erreicht hat. Verwenden Sie den folgenden Befehl, um ihren Status zu überprüfen:aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names
ASG_NAME
--query AutoScalingGroups[0].Instances[*].LifecycleState -
Fügen Sie den Hook wieder zur EC2 Instanz hinzu:
Wichtig
Verwenden Sie den unten abgebildeten CodeDeploy Befehl, um den Hook hinzuzufügen. Verwenden Sie nicht den Auto Scaling Scaling-Dienst, um den Hook hinzuzufügen, da der Zusatz von nicht erkannt wird CodeDeploy.
aws deploy update-deployment-group --application-name
APPLICATION_NAME
--current-deployment-group-nameDEPLOYMENT_GROUP_NAME
--auto-scaling-groupsASG_NAME
Nach der Ausführung dieses Befehls passiert Folgendes:
-
CodeDeploy installiert den Auto Scaling Scaling-Lifecycle-Hook erneut für die EC2 Instance
-
CodeDeploy registriert die Auto Scaling Scaling-Gruppe erneut bei der Bereitstellungsgruppe.
-
-
Erstellen Sie eine flottenweite Bereitstellung mit Amazon S3 oder einer GitHub Version, von der Sie wissen, dass sie fehlerfrei ist und die Sie verwenden möchten.
Wenn es sich bei der Revision beispielsweise um eine ZIP-Datei in einem Amazon S3 S3-Bucket handelt, der
my-revision-bucket
mit dem Objektschlüssel von aufgerufen wirdhttpd_app.zip
, geben Sie den folgenden Befehl ein:aws deploy create-deployment --application-name
APPLICATION_NAME
--deployment-group-nameDEPLOYMENT_GROUP_NAME
--revision "revisionType=S3,s3Location={bucket=my-revision-bucket,bundleType=zip,key=httpd_app.zip}"Da es jetzt eine
InService
Instanz in der Auto Scaling Scaling-Gruppe gibt, sollte diese Bereitstellung funktionieren, und der Fehler Die Bereitstellung ist fehlgeschlagen, weil für Ihre Bereitstellungsgruppe keine Instanzen gefunden wurden, sollte nicht mehr angezeigt werden. -
Wenn die Bereitstellung erfolgreich war, skalieren Sie Ihre Auto Scaling Scaling-Gruppe wieder auf die ursprüngliche Kapazität, falls Sie sie zuvor skaliert haben:
aws autoscaling set-desired-capacity --auto-scaling-group-name
ASG_NAME
--desired-capacityORIGINAL_CAPACITY
So beheben Sie das Deadlock-Problem bei der Bereitstellung (Konsole)
-
(Optional) Blockieren Sie Ihre CI/CD-Pipelines, die den CodeDeploy Fehler verursachen, sodass es nicht zu unerwarteten Bereitstellungen kommt, während Sie dieses Problem beheben.
-
Gehen Sie zur EC2 Amazon-Konsole und notieren Sie sich Ihre Einstellung „Auto Scaling Desired Capacity“. Möglicherweise müssen Sie am Ende dieses Vorgangs wieder auf diese Zahl zurückskalieren. Informationen zum Auffinden dieser Einstellung finden Sie unter Kapazitätsgrenzen für Ihre Auto Scaling Scaling-Gruppe festlegen.
-
Stellen Sie die gewünschte Anzahl von EC2 Instanzen wie folgt ein
1
:Dies ist optional, wenn Ihre gewünschte Kapazität höher war als
1
ursprünglich angegeben. Wenn Sie sie auf reduzieren1
, nimmt die Instanz weniger Zeit für die Bereitstellung und spätere Bereitstellung in Anspruch, was die Fehlerbehebung beschleunigt. Wenn Ihre gewünschte Auto Scaling-Kapazität ursprünglich auf eingestellt war0
, müssen Sie sie auf erhöhen1
. Dies ist verpflichtend.Anmerkung
Bei den verbleibenden Schritten dieses Verfahrens wird davon ausgegangen, dass Sie Ihre gewünschte Kapazität auf eingestellt haben
1
.Öffnen Sie die EC2 Amazon-Konsole unter https://console.aws.amazon.com/ec2/
und wählen Sie im Navigationsbereich Auto Scaling Groups aus. -
Wählen Sie die entsprechende Region aus.
-
Gehen Sie zur problematischen Auto Scaling Scaling-Gruppe.
-
Wählen Sie in den Gruppendetails die Option Bearbeiten aus.
-
Stellen Sie Gewünschte Kapazität auf ein
1
. -
Wählen Sie Aktualisieren.
-
Deregistrieren Sie die Auto Scaling Scaling-Gruppe von der Bereitstellungsgruppe ab:
Warnung
Mit den folgenden Teilschritten wird eine neue EC2 Instance ohne Software gestartet. Bevor Sie den Befehl ausführen, stellen Sie sicher, dass eine Auto Scaling
InService
Scaling-Instanz, auf der keine Software ausgeführt wird, akzeptabel ist. Stellen Sie beispielsweise sicher, dass der der Instance zugeordnete Load Balancer ohne Software keinen Datenverkehr an diesen Host sendet.Öffnen Sie die CodeDeploy Konsole unter. https://console.aws.amazon.com/codedeploy/
-
Wählen Sie die entsprechende Region aus.
-
Wählen Sie im Navigationsbereich Applications (Anwendungen).
-
Wählen Sie den Namen Ihrer CodeDeploy Anwendung.
-
Wählen Sie den Namen Ihrer CodeDeploy Bereitstellungsgruppe.
-
Wählen Sie Edit (Bearbeiten) aus.
-
Deaktivieren Sie in der Umgebungskonfiguration die Amazon EC2 Auto Scaling Scaling-Gruppen.
Anmerkung
In der Konsole können Sie die Konfiguration nicht speichern, wenn keine Umgebungskonfiguration definiert ist. Um die Prüfung zu umgehen, fügen Sie vorübergehend ein Tag von
EC2
oder hinzu, von dem Sie wissenOn-premises
, dass es nicht zu Hosts aufgelöst wird. Um ein Tag hinzuzufügen, wählen Sie EC2Amazon-Instances oder On-Premises-Instance aus und fügen Sie einen Tag-Schlüssel vonEC2
oderOn-premises
hinzu. Sie können das Tag Value leer lassen. -
Wählen Sie Änderungen speichern.
Nach Abschluss dieser Teilschritte geschieht Folgendes:
-
CodeDeploy Deregistriert die Auto Scaling Scaling-Gruppe von der Bereitstellungsgruppe ab.
-
CodeDeploy entfernt den Auto Scaling Scaling-Lifecycle-Hook aus der Auto Scaling Scaling-Gruppe.
-
Da der Hook, der zu einer fehlgeschlagenen Bereitstellung geführt hat, nicht mehr vorhanden ist, storniert Auto Scaling die bestehende EC2 Instanz und startet sofort eine neue, um sie auf die gewünschte Kapazität zu skalieren. Die neue Instanz sollte bald ihren
InService
Status annehmen. Die neue Instanz enthält keine Software.
-
-
Warten Sie, bis die EC2 Instanz den
InService
Status erreicht hat. Um ihren Status zu überprüfen:-
Öffnen Sie die EC2 Amazon-Konsole unter https://console.aws.amazon.com/ec2/
. -
Wählen Sie im Navigationsbereich die Option Auto Scaling Groups (Gruppen).
-
Wählen Sie Ihre Auto Scaling Scaling-Gruppe.
-
Wählen Sie im Inhaltsbereich die Registerkarte Instance Management aus.
-
Vergewissern Sie sich, dass unter Instances in der Spalte Lifecycle InServiceneben der Instanz angezeigt wird.
-
-
Registrieren Sie die Auto Scaling Scaling-Gruppe erneut bei der CodeDeploy Bereitstellungsgruppe. Verwenden Sie dabei dieselbe Methode, mit der Sie sie entfernt haben:
Öffnen Sie die CodeDeploy Konsole unter. https://console.aws.amazon.com/codedeploy/
-
Wählen Sie die entsprechende Region aus.
-
Wählen Sie im Navigationsbereich Applications (Anwendungen).
-
Wählen Sie den Namen Ihrer CodeDeploy Anwendung.
-
Wählen Sie den Namen Ihrer CodeDeploy Bereitstellungsgruppe.
-
Wählen Sie Edit (Bearbeiten) aus.
-
Wählen Sie in der Umgebungskonfiguration Amazon EC2 Auto Scaling Scaling-Gruppen und wählen Sie Ihre Auto Scaling Scaling-Gruppe aus der Liste aus.
-
Suchen Sie unter EC2Amazon-Instances oder On-Premises-Instances nach dem Tag, den Sie hinzugefügt haben, und entfernen Sie es.
-
Deaktivieren Sie das Kontrollkästchen neben EC2Amazon-Instances oder On-Premises-Instances.
-
Wählen Sie Änderungen speichern.
Diese Konfiguration installiert den Lifecycle-Hook erneut in der Auto Scaling Scaling-Gruppe.
-
Erstellen Sie eine flottenweite Bereitstellung mit Amazon S3 oder einer GitHub Version, von der Sie wissen, dass sie fehlerfrei ist und die Sie verwenden möchten.
Wenn es sich bei der Revision beispielsweise um eine ZIP-Datei in einem Amazon S3 S3-Bucket handelt, der
my-revision-bucket
mit dem Objektschlüssel von aufgerufen wirdhttpd_app.zip
, gehen Sie wie folgt vor:-
Wählen Sie in der CodeDeploy Konsole auf der Seite Deployment Group die Option Create deployment aus.
-
Wählen Sie unter Revision type (Revisionstyp) die Option My application is stored in Amazon S3 (Meine Anwendung ist in Amazon S3 gespeichert) aus.
-
Wählen Sie als Speicherort der Version die Option
s3://my-revision-bucket/httpd_app.zip
. -
Wählen Sie als Revisionsdateityp die Option
.zip
. -
Wählen Sie Create deployment.
Da es jetzt eine
InService
Instanz in der Auto Scaling Scaling-Gruppe gibt, sollte diese Bereitstellung funktionieren, und der Fehler Die Bereitstellung ist fehlgeschlagen, weil für Ihre Bereitstellungsgruppe keine Instanzen gefunden wurden, sollte nicht mehr angezeigt werden. -
-
Wenn die Bereitstellung erfolgreich war, skalieren Sie Ihre Auto Scaling Scaling-Gruppe wieder auf die ursprüngliche Kapazität, falls Sie sie zuvor skaliert haben:
-
Öffnen Sie die EC2 Amazon-Konsole unter https://console.aws.amazon.com/ec2/
und wählen Sie im Navigationsbereich Auto Scaling Groups aus. -
Wählen Sie die entsprechende Region aus.
-
Gehen Sie zu Ihrer Auto Scaling Scaling-Gruppe.
-
Wählen Sie in den Gruppendetails die Option Bearbeiten aus.
-
Setzen Sie die gewünschte Kapazität auf ihren ursprünglichen Wert zurück.
-
Wählen Sie Aktualisieren.
-