Integration CodeDeploy mit Amazon EC2 Auto Scaling - AWS CodeDeploy

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.

Integration CodeDeploy mit Amazon EC2 Auto Scaling

CodeDeploy unterstützt Amazon EC2 Auto Scaling, einen AWS Service, der Amazon EC2 EC2-Instances automatisch gemäß den von Ihnen definierten Bedingungen startet. Zu diesen Bedingungen können Grenzwerte gehören, die in einem bestimmten Zeitintervall für CPU-Auslastung, Lese- oder Schreibvorgänge auf Festplatten oder eingehenden oder ausgehenden Netzwerkverkehr überschritten wurden. Amazon EC2 Auto Scaling beendet die Instances, wenn sie nicht mehr benötigt werden. Weitere Informationen finden Sie unter Was ist Amazon EC2 Auto Scaling? im Amazon EC2 Auto Scaling Scaling-Benutzerhandbuch.

Wenn neue Amazon EC2-Instances als Teil einer Amazon EC2 Auto Scaling Scaling-Gruppe gestartet werden, CodeDeploy kann Ihre Revisionen automatisch für die neuen Instances bereitgestellt werden. Sie können Bereitstellungen auch CodeDeploy mit Amazon EC2 Auto Scaling Scaling-Instances koordinieren, die bei Elastic Load Balancing Load Balancers registriert sind. Weitere Informationen finden Sie unter Integrating CodeDeploy with Elastic Load Balancing und Einen Load Balancer in Elastic Load Balancing für CodeDeploy Amazon EC2 EC2-Bereitstellungen einrichten.

Anmerkung

Es können Probleme auftreten, wenn Sie mehrere Bereitstellungsgruppen einer einzelnen Amazon EC2 Auto Scaling Scaling-Gruppe zuordnen. Wenn eine Bereitstellung z. B. fehlschlägt, wird die Instance heruntergefahren. Bei den anderen Bereitstellungen, die ausgeführt wurden, kann jedoch eine Zeitüberschreitung von einer Stunde auftreten. Weitere Informationen finden Sie unter Vermeiden Sie es, mehrere Bereitstellungsgruppen einer einzigen Amazon EC2 Auto Scaling-Gruppe zuzuordnen und Under the hood: CodeDeploy and Amazon EC2 Auto Scaling integration.

Bereitstellen von CodeDeploy Anwendungen für Amazon EC2 Auto Scaling Scaling-Gruppen

So stellen Sie eine CodeDeploy Anwendungsrevision für eine Amazon EC2 Auto Scaling Scaling-Gruppe bereit:

  1. Erstellen oder suchen Sie ein IAM-Instance-Profil, das es der Amazon EC2 Auto Scaling Scaling-Gruppe ermöglicht, mit Amazon S3 zu arbeiten. Weitere Informationen finden Sie unter Schritt 4: Erstellen Sie ein IAM-Instance-Profil für Ihre Amazon EC2 EC2-Instances.

    Anmerkung

    Sie können es auch verwenden CodeDeploy , um Revisionen aus GitHub Repositorys für Amazon EC2 Auto Scaling Scaling-Gruppen bereitzustellen. Amazon EC2 EC2-Instances benötigen zwar weiterhin ein IAM-Instance-Profil, für die Bereitstellung aus einem GitHub Repository sind jedoch keine zusätzlichen Berechtigungen erforderlich.

  2. Erstellen oder verwenden Sie eine Amazon EC2 Auto Scaling Scaling-Gruppe und geben Sie das IAM-Instance-Profil in Ihrer Startkonfiguration oder Vorlage an. Weitere Informationen finden Sie unter IAM-Rolle für Anwendungen, die auf Amazon EC2 EC2-Instances ausgeführt werden.

  3. Erstellen oder suchen Sie nach einer Servicerolle, die es ermöglicht, eine Bereitstellungsgruppe CodeDeploy zu erstellen, die die Amazon EC2 Auto Scaling Scaling-Gruppe enthält.

  4. Erstellen Sie eine Bereitstellungsgruppe mit CodeDeploy und geben Sie den Namen der Amazon EC2 Auto Scaling Scaling-Gruppe, die Servicerolle und einige andere Optionen an. Weitere Informationen finden Sie unter Erstellen Sie eine Bereitstellungsgruppe für eine direkte Bereitstellung (Konsole) oder Erstellen Sie eine Bereitstellungsgruppe für eine direkte Bereitstellung (Konsole).

  5. Wird verwendet CodeDeploy , um Ihre Version in der Bereitstellungsgruppe bereitzustellen, die die Amazon EC2 Auto Scaling Scaling-Gruppe enthält.

Weitere Informationen finden Sie unter Tutorial: Wird verwendet CodeDeploy , um eine Anwendung für eine Auto Scaling Scaling-Gruppe bereitzustellen.

Aktivierung von Terminierungsbereitstellungen bei Auto Scaling-Scale-In-Ereignissen

Eine Terminierungsbereitstellung ist eine Art von CodeDeploy Bereitstellung, die automatisch aktiviert wird, wenn ein Auto Scaling-Scale-In-Ereignis eintritt. CodeDeploy führt die Terminierungsbereitstellung durch, unmittelbar bevor der Auto Scaling Scaling-Dienst die Instanz beendet. Stellt während einer Terminierungsbereitstellung CodeDeploy nichts bereit. Stattdessen generiert es Lebenszyklusereignisse, die Sie mit Ihren eigenen Skripten verknüpfen können, um benutzerdefinierte Shutdown-Funktionen zu aktivieren. Sie könnten das ApplicationStop Lebenszyklusereignis beispielsweise mit einem Skript verknüpfen, das Ihre Anwendung ordnungsgemäß herunterfährt, bevor die Instanz beendet wird.

Eine Liste der Lebenszyklusereignisse, die während einer Terminierungsbereitstellung CodeDeploy generiert werden, finden Sie unter. Verfügbarkeit von Hooks für Lebenszyklus-Ereignisse

Wenn die Bereitstellung zur Kündigung aus irgendeinem Grund fehlschlägt, kann die Instance-Kündigung fortgesetzt CodeDeploy werden. Das bedeutet, dass die Instance heruntergefahren wird, obwohl CodeDeploy nicht alle (oder einige) der Lifecycle-Ereignisse vollständig ausgeführt wurden.

Wenn Sie Terminierungsbereitstellungen nicht aktivieren, beendet der Auto Scaling-Service trotzdem Amazon EC2 EC2-Instances, wenn ein Scale-In-Ereignis eintritt, generiert aber keine CodeDeploy Lebenszyklusereignisse.

Anmerkung

Unabhängig davon, ob Sie Terminierungsbereitstellungen aktivieren oder nicht, kann es zu einem Wettlauf zwischen den durch Auto Scaling generierten Lebenszyklusereignissen und den Services kommen, wenn der Auto Scaling-Service eine Amazon EC2 EC2-Instance beendet, während eine CodeDeploy Bereitstellung läuft. CodeDeploy Beispielsweise kann das Terminating Lebenszyklusereignis (vom Auto Scaling Scaling-Dienst generiert) das ApplicationStart Ereignis (generiert durch die CodeDeploy Bereitstellung) überschreiben. In diesem Szenario kann es entweder bei der Kündigung der Amazon EC2 EC2-Instance oder bei der CodeDeploy Bereitstellung zu einem Fehler kommen.

Um Bereitstellungen CodeDeploy zur Terminierung durchführen zu können

Nach der Installation des Terminations-Hooks läuft ein Scale-In-Ereignis (Terminierung) wie folgt ab:

  1. Der Auto Scaling-Dienst (oder einfach Auto Scaling) stellt fest, dass ein Scale-In-Ereignis eintreten muss, und kontaktiert den EC2-Dienst, um eine EC2-Instance zu beenden.

  2. Der EC2-Dienst beginnt mit dem Beenden der EC2-Instance. Die Instanz wechselt in den Terminating Status und dann in den Status. Terminating:Wait

  3. Terminating:WaitWährenddessen führt Auto Scaling alle Lifecycle-Hooks aus, die an die Auto Scaling Scaling-Gruppe angehängt sind, einschließlich des Terminierungs-Hooks, der von installiert wurde CodeDeploy.

  4. Der Termination-Hook sendet eine Benachrichtigung an die Amazon SQS SQS-Warteschlange, die von abgerufen wird. CodeDeploy

  5. Nach Erhalt der Benachrichtigung CodeDeploy analysiert er die Nachricht, führt einige Validierungen durch und führt eine Terminierung durch.

  6. Während die Terminierungsbereitstellung läuft, CodeDeploy sendet alle fünf Minuten Heartbeats an Auto Scaling, um es darüber zu informieren, dass an der Instance noch gearbeitet wird.

  7. Bisher befindet sich die EC2-Instance immer noch im Terminating:Wait Status (oder möglicherweise im Warmed:Pending:Wait Status, wenn Sie Auto Scaling Scaling-Gruppen-Warm-Pools aktiviert haben).

  8. Wenn die Bereitstellung abgeschlossen ist, CodeDeploy weist Auto Scaling auf CONTINUE den EC2-Kündigungsprozess hin, unabhängig davon, ob die Terminierungsbereitstellung erfolgreich war oder fehlgeschlagen ist.

So funktioniert Amazon EC2 Auto Scaling mit CodeDeploy

Wenn Sie eine CodeDeploy Bereitstellungsgruppe erstellen oder aktualisieren, sodass sie eine Auto Scaling Scaling-Gruppe enthält, CodeDeploy greift er über die CodeDeploy Service-Rolle auf die Auto Scaling Scaling-Gruppe zu und installiert dann Auto Scaling Scaling-Lebenszyklus-Hooks in Ihren Auto Scaling Scaling-Gruppen.

Anmerkung

Auto Scaling Scaling-Lebenszyklus-Hooks unterscheiden sich von den Lebenszyklusereignissen (auch als Lifecycle-Event-Hooks bezeichnet), die AppSpec Abschnitt „Hooks“ von diesem Handbuch generiert CodeDeploy und in diesem Handbuch beschrieben werden.

Die Auto Scaling Scaling-Lifecycle-Hooks, die CodeDeploy installiert werden, sind:

  • Ein Start-Hook — Dieser Hook benachrichtigt CodeDeploy , dass ein Auto Scale-Out-Ereignis im Gange ist und dass eine Startbereitstellung gestartet CodeDeploy werden muss.

    Während einer Startbereitstellung: CodeDeploy

    • Stellt eine Version Ihrer Anwendung auf der Scaled-Out-Instance bereit.

    • Generiert Lebenszyklusereignisse, um den Fortschritt der Bereitstellung anzuzeigen. Sie können diese Lebenszyklusereignisse mit Ihren eigenen Skripten verknüpfen, um benutzerdefinierte Startfunktionen zu aktivieren. Weitere Informationen finden Sie in der Tabelle unterVerfügbarkeit von Hooks für Lebenszyklus-Ereignisse.

    Der Launch-Hook und die zugehörige Startbereitstellung sind immer aktiviert und können nicht ausgeschaltet werden.

  • Ein Terminierungs-Hook — Dieser optionale Hook benachrichtigt CodeDeploy , dass ein Auto Scaling-Scale-In-Ereignis im Gange ist und dass eine Terminierungsbereitstellung gestartet CodeDeploy werden muss.

    CodeDeploy Generiert während einer Terminierungsbereitstellung Lebenszyklusereignisse, um den Fortschritt des Herunterfahrens der Instance anzuzeigen. Weitere Informationen finden Sie unter Aktivierung von Terminierungsbereitstellungen bei Auto Scaling-Scale-In-Ereignissen.

Wie CodeDeploy werden die Lifecycle-Hooks nach der Installation verwendet?

Nachdem die Start- und Terminierungs-Lifecycle-Hooks installiert wurden, werden sie von jeweils CodeDeploy während Auto Scaling-Gruppen-Scale-Out- und Scale-In-Ereignissen verwendet.

Ein Scale-Out-Ereignis (Start) läuft wie folgt ab:

  1. Der Auto Scaling-Dienst (oder einfach Auto Scaling) stellt fest, dass ein Scale-Out-Ereignis eintreten muss, und kontaktiert den EC2-Dienst, um eine neue EC2-Instance zu starten.

  2. Der EC2-Dienst startet eine neue EC2-Instance. Die Instanz wechselt in den Pending Status und dann in den Pending:Wait Status.

  3. Pending:WaitWährenddessen führt Auto Scaling alle Lifecycle-Hooks aus, die an die Auto Scaling Scaling-Gruppe angehängt sind, einschließlich des Start-Hooks, der von installiert wurde CodeDeploy.

  4. Der Launch-Hook sendet eine Benachrichtigung an die Amazon SQS SQS-Warteschlange, die von abgerufen wird. CodeDeploy

  5. Nach Erhalt der Benachrichtigung CodeDeploy analysiert er die Nachricht, führt einige Validierungen durch und startet eine Startbereitstellung.

  6. Während die Startbereitstellung läuft, CodeDeploy sendet sie alle fünf Minuten Heartbeats an Auto Scaling, um das System darüber zu informieren, dass an der Instance noch gearbeitet wird.

  7. Bisher befindet sich die EC2-Instance immer noch im Pending:Wait Status.

  8. Wenn die Bereitstellung abgeschlossen ist, CodeDeploy zeigt Auto Scaling entweder CONTINUE ABANDON den EC2-Startvorgang an, je nachdem, ob die Bereitstellung erfolgreich war oder fehlgeschlagen ist.

    • Falls CodeDeploy angegebenCONTINUE, setzt Auto Scaling den Startvorgang fort und wartet entweder darauf, dass andere Hooks abgeschlossen sind, oder versetzt die Instance in den Status Pending:Proceed und dann in den InService Status.

    • Wenn CodeDeploy angegebenABANDON, beendet Auto Scaling die EC2-Instance und startet den Startvorgang neu, falls erforderlich, um die gewünschte Anzahl von Instances zu erreichen, wie in der Einstellung Auto Scaling Desired Capacity definiert.

Ein Scale-In-Ereignis (Terminierung) läuft wie folgt ab:

Siehe Aktivierung von Terminierungsbereitstellungen bei Auto Scaling-Scale-In-Ereignissen.

Wie CodeDeploy benennt Amazon EC2 Auto Scaling Scaling-Gruppen

Bei Bereitstellungen in Blau/Grün auf einer EC2/lokalen Rechenplattform haben Sie zwei Möglichkeiten, Instances zu Ihrer (grünen) Ersatzumgebung hinzuzufügen:

  • Verwenden Sie Instances, die bereits vorhanden sind oder die Sie manuell erstellen.

  • Verwenden Sie Einstellungen aus einer Amazon EC2 Auto Scaling Scaling-Gruppe, die Sie angeben, um Instances in einer neuen Amazon EC2 Auto Scaling Scaling-Gruppe zu definieren und zu erstellen.

Wenn Sie sich für die zweite Option entscheiden, wird eine CodeDeploy neue Amazon EC2 Auto Scaling Scaling-Gruppe für Sie bereitgestellt. Es verwendet die folgende Konventione für die Benennung der Gruppe:

CodeDeploy_deployment_group_name_deployment_id

Wenn beispielsweise eine Bereitstellung mit ID eine Bereitstellungsgruppe mit dem Namen 10 bereitstelltalpha-deployments, wird die bereitgestellte Amazon EC2 Auto Scaling Scaling-Gruppe benannt. CodeDeploy_alpha-deployments_10 Weitere Informationen finden Sie unter Erstellen Sie eine Bereitstellungsgruppe für eine EC2/On-Premises-Implementierung in Blau/Grün (Konsole) und GreenFleetProvisioningOption.

Reihenfolge der Ausführung von benutzerdefinierten Lifecycle-Hook-Ereignissen

Sie können Ihre eigenen Lifecycle-Hooks zu Amazon EC2 Auto Scaling Scaling-Gruppen hinzufügen, für die sie CodeDeploy bereitgestellt werden. Die Reihenfolge, in der diese benutzerdefinierten Lifecycle-Hook-Ereignisse ausgeführt werden, kann jedoch nicht im Verhältnis zu den CodeDeploy standardmäßigen Deployment-Lifecycle-Ereignissen festgelegt werden. Wenn Sie beispielsweise einen benutzerdefinierten Lifecycle-Hook mit dem Namen ReadyForSoftwareInstall einer Amazon EC2 Auto Scaling Scaling-Gruppe hinzufügen, können Sie im Voraus nicht wissen, ob er vor dem ersten oder nach dem letzten CodeDeploy Standard-Deployment-Lifecycle-Ereignis ausgeführt wird.

Informationen zum Hinzufügen von benutzerdefinierten Lifecycle-Hooks zu einer Amazon EC2 Auto Scaling Scaling-Gruppe finden Sie unter Hinzufügen von Lifecycle-Hooks im Amazon EC2 Auto Scaling Scaling-Benutzerhandbuch.

Scale-Out-Ereignisse während einer Bereitstellung

Wenn während einer Implementierung ein Auto Scaling-Scale-Out-Ereignis eintritt, werden die neuen Instances mit der Anwendungsversion aktualisiert, die zuvor bereitgestellt wurde, und nicht mit der neuesten Anwendungsrevision. Wenn die Bereitstellung erfolgreich ist, werden die alten Instances und die neu skalierten Instances unterschiedliche Anwendungsrevisionen hosten. Um die Instanzen mit der älteren Version auf den neuesten Stand zu bringen, CodeDeploy wird automatisch eine Folgebereitstellung (unmittelbar nach der ersten) gestartet, um alle veralteten Instanzen zu aktualisieren. Wenn Sie dieses Standardverhalten ändern möchten, sodass veraltete EC2-Instances in der älteren Version verbleiben, finden Sie unter. Automatic updates to outdated instances

Wenn Sie Amazon EC2 Auto Scale-Out-Prozesse während Bereitstellungen aussetzen möchten, können Sie dies über eine Einstellung im common_functions.sh Skript tun, das für den Lastenausgleich mit verwendet wird. CodeDeploy Wenn HANDLE_PROCS=true die folgenden Auto Scaling Scaling-Ereignisse während des Bereitstellungsprozesses automatisch unterbrochen werden:

  • AZRebalance

  • AlarmNotification

  • ScheduledActions

  • ReplaceUnhealthy

Wichtig

Nur der CodeDeployDefault. OneAtDie ATime-Bereitstellungskonfiguration unterstützt diese Funktionalität.

Weitere Informationen zur Verwendung HANDLE_PROCS=true zur Vermeidung von Bereitstellungsproblemen bei der Verwendung von Amazon EC2 Auto Scaling finden Sie unter Wichtiger Hinweis zur Handhabung von AutoScaling Prozessen in aws-codedeploy-sampleson GitHub.

Scale-in-Ereignisse während einer Bereitstellung

Wenn eine Auto Scaling Scaling-Gruppe mit der Skalierung beginnt, während eine CodeDeploy Bereitstellung in dieser Auto Scaling Scaling-Gruppe im Gange ist, kann es zu einem Wettlauf zwischen dem Kündigungsprozess (einschließlich der Ereignisse im Lebenszyklus der Terminierung der Bereitstellung) und anderen CodeDeploy Lebenszyklusereignissen auf der CodeDeploy beendenden Instance kommen. Die Bereitstellung auf dieser speziellen Instance kann fehlschlagen, wenn die Instance beendet wird, bevor alle CodeDeploy Lebenszyklusereignisse abgeschlossen sind. Außerdem kann die gesamte CodeDeploy Bereitstellung fehlschlagen oder auch nicht, je nachdem, wie Sie in Ihrer Bereitstellungskonfiguration die Einstellung Mindestanzahl fehlerfreier Hosts festgelegt haben.

Reihenfolge der Ereignisse in AWS CloudFormation cfn-init-Skripten

Wenn Sie für die Ausführung von Skripts auf neu bereitgestellten Linux-basierten Instances cfn-init (oder cloud-init) verwenden, kann es sein, dass Ihre Bereitstellungen fehlschlagen, es sei denn, Sie kontrollieren die Reihenfolge der Ereignisse sorgfältig, die nach dem Start der Instance auftreten.

Diese Reihenfolge muss folgendermaßen aussehen:

  1. Die neu bereitgestellte Instance wird gestartet.

  2. Alle cfn-init-Bootstrapping-Skripts werden abgeschlossen.

  3. Der CodeDeploy Agent wird gestartet.

  4. Die neueste Anwendungsrevision wird auf der Instance bereitgestellt.

Wenn die Reihenfolge der Ereignisse nicht sorgfältig kontrolliert wird, startet der CodeDeploy Agent möglicherweise eine Bereitstellung, bevor die Ausführung aller Skripts abgeschlossen ist.

Um die Reihenfolge der Ereignisse zu kontrollieren, verwenden Sie eine dieser bewährten Methoden:

  • Installieren Sie den CodeDeploy Agenten über ein cfn-init Skript und platzieren Sie ihn hinter allen anderen Skripten.

  • Binden Sie den CodeDeploy Agenten in ein benutzerdefiniertes AMI ein und verwenden Sie ein cfn-init Skript, um ihn zu starten. Platzieren Sie ihn hinter allen anderen Skripten.

Informationen zur Verwendung finden Sie cfn-init unter cfn-init im AWS CloudFormation Benutzerhandbuch.

Verwenden eines benutzerdefinierten AMI mit CodeDeploy Amazon EC2 Auto Scaling

Sie haben zwei Möglichkeiten, das Basis-AMI anzugeben, das verwendet werden soll, wenn neue Amazon EC2-Instances in einer Amazon EC2 Auto Scaling Scaling-Gruppe gestartet werden:

  • Sie können ein benutzerdefiniertes Basis-AMI angeben, auf dem der CodeDeploy Agent bereits installiert ist. Da der Agent bereits installiert ist, startet diese Option neue Amazon EC2 EC2-Instances schneller als die andere Option. Diese Option erhöht jedoch die Wahrscheinlichkeit, dass erste Bereitstellungen von Amazon EC2 EC2-Instances fehlschlagen, insbesondere wenn der CodeDeploy Agent veraltet ist. Wenn Sie diese Option wählen, empfehlen wir Ihnen, den CodeDeploy Agenten in Ihrem benutzerdefinierten Basis-AMI regelmäßig zu aktualisieren.

  • Sie können ein Basis-AMI angeben, bei dem der CodeDeploy Agent nicht installiert ist, und den Agenten installieren, wenn jede neue Instance in einer Amazon EC2 Auto Scaling Scaling-Gruppe gestartet wird. Diese Option startet neue Amazon EC2 EC2-Instances zwar langsamer als die andere Option, bietet jedoch eine höhere Wahrscheinlichkeit, dass die ersten Bereitstellungen von Instances erfolgreich sein werden. Diese Option verwendet die neueste Version des CodeDeploy Agenten.