Instance-Lebenszyklus und Adressen verwalten

AWSBeginner
Jetzt üben

Einführung

Dein Team möchte einen Berichtsserver während der Wartung stoppen und mit einer vorhersehbaren öffentlichen Adresse wieder starten. Du betreibst eine EC2-Instance, vergleichst gestoppte und laufende Zustände, ordnest eine Elastic IP zu und prüfst die Anwendung nach einem weiteren Stop-Start-Zyklus.

Du solltest EC2-Start, SSH und User Data bereits kennen. Diese neue Umgebung stellt ein eigenes Image, Netzwerk, Schlüsselpaar und Startskript bereit. Du startest und betreibst den Server selbst.

Bezug zur Zertifizierung

Instance-Operationen und öffentliche Adressierung unterstützen die Rechen- und Netzwerkkonzepte der Aufgaben 3.3 und 3.5 der Ziele für Domain 3 von AWS Certified Cloud Practitioner CLF-C02.

Den Wartungsserver starten

In diesem Schritt startest du den Anwendungsserver und prüfst seinen Anfangszustand und seine Adressen.

Beginne im Projektverzeichnis:

cd /home/labex/project

Lade die bereitgestellten Image-, Subnetz- und Sicherheitsgruppen-IDs:

source launch.env

Das bereitgestellte Startskript konfiguriert die Begrüßung der Berichtsanwendung. Prüfe es vor der Verwendung:

cat lifecycle-user-data.sh

Suche nach Lifecycle server. Wie im vorherigen Lab liest --user-data file://... das Bash-Skript und übergibt es der Instance beim Start. Erstelle einen Server namens lifecycle-server:

aws ec2 \
  run-instances \
  --image-id "$AMI_ID" \
  --instance-type t3.micro \
  --subnet-id "$SUBNET_ID" \
  --security-group-ids "$SECURITY_GROUP_ID" \
  --key-name report-key \
  --count 1 \
  --user-data file://lifecycle-user-data.sh \
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=lifecycle-server}]'

Speichere die Instance-ID aus der Abfrage nach ihrem Namens-Tag für die folgenden Operationen:

INSTANCE_ID=$(aws ec2 \
  describe-instances \
  --filters Name=tag:Name,Values=lifecycle-server \
  --query 'Reservations[0].Instances[0].InstanceId' \
  --output text)

Prüfe Zustand und Netzwerkadressen:

aws ec2 \
  describe-instances \
  --instance-ids "$INSTANCE_ID" \
  --query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name,PrivateIPv4:PrivateIpAddress,PublicIPv4:PublicIpAddress}'

Bestätige running; falls weiterhin pending angezeigt wird, warte kurz und wiederhole die Abfrage. Merke dir die private und öffentliche IPv4-Adresse aus der Ausgabe. Nach der Wartung vergleichst du sie.

Öffne AWS View und klicke auf Refresh resources. Wähle lifecycle-server unter Application requests und klicke auf Check application. Bestätige HTTP 200 und Lifecycle server, bevor du den Instance-Zustand änderst.

Den Server für die Wartung stoppen

In diesem Schritt stoppst du die Instance und bestätigst, dass sie keine Anwendungsanfragen bearbeiten kann.

Eine stopped Instance ist ausgeschaltet und kann wieder gestartet werden. Eine terminated Instance wurde dauerhaft entfernt. Bei einer Instance mit EBS als Root-Speicher bleibt das Root-Volume beim Stoppen erhalten; ihre Anwendung ist währenddessen nicht verfügbar. Der offizielle Leitfaden zum Instance-Lebenszyklus erklärt diese Zustandsunterschiede.

Stoppe deine Anwendungs-Instance:

aws ec2 \
  stop-instances \
  --instance-ids "$INSTANCE_ID"

Warte auf stopped. Der Waiter fragt den Zustand wiederholt ab und kehrt ohne Ausgabe zurück, sobald die Bedingung erfüllt ist:

aws ec2 \
  wait instance-stopped \
  --instance-ids "$INSTANCE_ID"

Prüfe Zustand und Adressen erneut:

aws ec2 \
  describe-instances \
  --instance-ids "$INSTANCE_ID" \
  --query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name,PrivateIPv4:PrivateIpAddress,PublicIPv4:PublicIpAddress}'

Bestätige stopped. Die private IPv4-Adresse bleibt erhalten, während die automatisch zugewiesene öffentliche IPv4-Adresse freigegeben wird. Nach dem erneuten Start benötigst du die aktuelle öffentliche Adresse.

Aktualisiere AWS View. Bestätige stopped und dass diese Instance nicht mehr in der Auswahl laufender Anwendungen verfügbar ist. Während der Wartung ist der Server nicht verfügbar, obwohl Instance-Datensatz und Root-Speicher bestehen bleiben.

Eine öffentliche Adresse mit einer Elastic IP behalten

In diesem Schritt startest du den Server, ordnest eine Elastic IP zu und prüfst, dass sein öffentlicher Endpunkt über einen weiteren Stop-Start-Zyklus hinweg zugeordnet bleibt.

Starte die vorhandene Instance:

aws ec2 \
  start-instances \
  --instance-ids "$INSTANCE_ID"

Warte auf running:

aws ec2 \
  wait instance-running \
  --instance-ids "$INSTANCE_ID"

Prüfe ihre Adressen:

aws ec2 \
  describe-instances \
  --instance-ids "$INSTANCE_ID" \
  --query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name,PrivateIPv4:PrivateIpAddress,PublicIPv4:PublicIpAddress}'

Instance-ID und private IPv4-Adresse bleiben gleich. Die automatisch zugewiesene öffentliche Adresse ändert sich nach Stoppen und Starten. Aktualisiere AWS View und prüfe die Anwendung erneut; sie sollte weiterhin Lifecycle server liefern.

Eine Elastic IP ist eine öffentliche IPv4-Adresse, die deinem Konto bis zur Freigabe zugewiesen ist. Die Zuweisung reserviert die Adresse; die Zuordnung verbindet sie mit einer Instance oder Netzwerkschnittstelle. Sie kann nach Stoppen und Starten eine stabile Adresse bieten, wie im offiziellen Elastic-IP-Leitfaden beschrieben.

Reserviere eine Elastic IP für die VPC-Verwendung und speichere ihre Zuweisungs-ID:

ALLOCATION_ID=$(aws ec2 \
  allocate-address \
  --domain vpc \
  --query 'AllocationId' \
  --output text)

Ordne diese Zuweisung deiner Instance zu. Speichere die zurückgegebene Zuordnungs-ID für die Bereinigung:

ASSOCIATION_ID=$(aws ec2 \
  associate-address \
  --allocation-id "$ALLOCATION_ID" \
  --instance-id "$INSTANCE_ID" \
  --query 'AssociationId' \
  --output text)

Prüfe Adresse und zugeordnete Instance:

aws ec2 \
  describe-addresses \
  --allocation-ids "$ALLOCATION_ID" \
  --query 'Addresses[].{PublicIPv4:PublicIp,Allocation:AllocationId,Instance:InstanceId}'

Merke dir die Elastic IP. Sie ersetzt die automatisch zugewiesene öffentliche IPv4-Adresse der Instance. Aktualisiere AWS View und prüfe die Anwendung, um zu bestätigen, dass die neue Adresse denselben Server erreicht.

Führe jetzt einen weiteren Wartungszyklus aus:

aws ec2 \
  stop-instances \
  --instance-ids "$INSTANCE_ID"
aws ec2 \
  wait instance-stopped \
  --instance-ids "$INSTANCE_ID"
aws ec2 \
  start-instances \
  --instance-ids "$INSTANCE_ID"
aws ec2 \
  wait instance-running \
  --instance-ids "$INSTANCE_ID"

Prüfe die Instance noch einmal:

aws ec2 \
  describe-instances \
  --instance-ids "$INSTANCE_ID" \
  --query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name,PrivateIPv4:PrivateIpAddress,PublicIPv4:PublicIpAddress}'

Bestätige, dass die öffentliche Adresse weiterhin die notierte Elastic IP ist. Aktualisiere AWS View und klicke auf Check application. HTTP 200 mit Lifecycle server bestätigt, dass der Server nach der Wartung über die beibehaltene Adresse Anfragen beantwortet.

Die Adresse freigeben und den Server beenden

In diesem Schritt gibst du die zugewiesene Adresse frei und entfernst die Anwendungs-Instance dauerhaft.

Das Aufheben der Zuordnung entfernt die Verbindung zur Instance. Es gibt die Adresse nicht aus deinem Konto frei. Hebe zuerst die gespeicherte Zuordnung auf:

aws ec2 \
  disassociate-address \
  --association-id "$ASSOCIATION_ID"

Gib danach die Zuweisung frei:

aws ec2 \
  release-address \
  --allocation-id "$ALLOCATION_ID"

Zugewiesene öffentliche IPv4-Adressen bleiben in AWS kostenpflichtige Ressourcen, auch wenn eine Instance gestoppt ist. Die Freigabe einer nicht mehr benötigten Adresse gehört zur Ressourcenbereinigung.

Beende den Server:

aws ec2 \
  terminate-instances \
  --instance-ids "$INSTANCE_ID"

Warte auf die Beendigung:

aws ec2 \
  wait instance-terminated \
  --instance-ids "$INSTANCE_ID"

Prüfe den endgültigen Instance-Zustand:

aws ec2 \
  describe-instances \
  --instance-ids "$INSTANCE_ID" \
  --query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name}'

Bestätige terminated. Liste die verbleibenden Elastic-IP-Zuweisungen auf:

aws ec2 \
  describe-addresses \
  --query 'Addresses[].{Allocation:AllocationId,PublicIPv4:PublicIp}'

Das Ergebnis sollte eine leere Liste, [], sein. Aktualisiere AWS View und bestätige, dass der Server kein laufendes Ziel mehr ist. Lasse das vorbereitete Netzwerk und Schlüsselpaar bestehen.

Zusammenfassung

Du hast einen EC2-Anwendungsserver gestoppt und gestartet, Adressänderungen beobachtet und eine Elastic IP zugeordnet. Nach einem weiteren Wartungszyklus hast du den Zugriff über die beibehaltene Adresse geprüft. Abschließend hast du die Zuweisung freigegeben und den Server beendet und damit die Bereinigung beider Ressourcen bestätigt.