Einen EC2-Anwendungsserver starten

AWSBeginner
Jetzt üben

Einführung

Dein Team benötigt einen Server für eine kleine Berichtsanwendung. In diesem Lab startest du eine Amazon-EC2-Instance, verbindest dich per SSH, änderst die Begrüßung der Anwendung und testest ihre Antwort in AWS View. Danach beendest du die Instance und bestätigst ihren endgültigen Zustand.

Du solltest grundlegende Terminalbefehle und den Zweck einer VPC, eines Subnetzes und einer Sicherheitsgruppe kennen. Die Umgebung stellt ein Netzwerk, ein Ubuntu-Image, ein SSH-Schlüsselpaar und die Anwendungssoftware bereit. Du erstellst und konfigurierst die Anwendungs-Instance selbst.

Bezug zur Zertifizierung

Dieses Lab übt programmgesteuerte AWS-Operationen und die Auswahl von EC2 als Rechendienst und unterstützt die Aufgaben 3.1 und 3.3 der Ziele für Domain 3 von AWS Certified Cloud Practitioner CLF-C02. Außerdem unterscheidest du Image, Instance-Typ und laufende Instance.

Die Anwendungs-Instance starten

In diesem Schritt prüfst du ein vorbereitetes Image und startest eine EC2-Instance im bereitgestellten Netzwerk.

Eine EC2-Instance ist ein virtueller Server. Eine Amazon Machine Image (AMI) liefert das Betriebssystem und die anfängliche Software. Ein Instance-Typ legt eine Kombination aus Rechen- und Speicherkapazität fest. Für diese Einstiegsanwendung wählst du t3.micro, einen kleinen Instance-Typ für allgemeine Zwecke.

Beginne im Projektverzeichnis:

cd /home/labex/project

Die Datei launch.env enthält die IDs des vorbereiteten Images, Subnetzes und der Sicherheitsgruppe. Prüfe sie, um die verwendeten Ressourcen zu sehen:

cat launch.env

Die Werte sind Ressourcen-IDs und unterscheiden sich je nach Umgebung. Lade sie mit source in deine aktuelle Shell; dieser Befehl liest die Variablenzuweisungen aus der Datei:

source launch.env

Prüfe die AMI. Die Option --image-ids wählt das Image aus, während --query die angezeigten Felder begrenzt:

aws ec2 \
  describe-images \
  --image-ids "$AMI_ID" \
  --query 'Images[].{Image:ImageId,Name:Name,Architecture:Architecture}'

Achte auf den Image-Namen report-server-ubuntu-2204 und die Architektur x86_64. Dieses Image enthält Ubuntu und die Berichtsanwendung, damit du dich auf den Start und Betrieb des Servers konzentrieren kannst.

Das Subnetz bestimmt die Netzwerkposition der Instance. Die bereitgestellte Sicherheitsgruppe erlaubt SSH auf Port 22 und Anwendungsanfragen auf Port 8081 aus dem Zugriffsnetz des Labs. Das Schlüsselpaar report-key liefert den auf der Instance installierten öffentlichen Schlüssel; sein privater Schlüssel liegt für deine SSH-Verbindung im Projektverzeichnis.

Starte eine Instance mit den vorbereiteten Ressourcen. --count 1 erstellt einen Server, und das Tag gibt ihm den erkennbaren Namen report-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 \
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=report-server}]'

Die Antwort enthält die neue Instance-ID und den Anfangszustand. Speichere die ID für folgende Befehle in einer Shell-Variablen. Die Syntax $(...) führt den Befehl in den Klammern aus und speichert seine Ausgabe; --output text liefert die ID als Klartext:

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

Prüfe Zustand und Adressen der Instance:

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

Bestätige den Zustand running sowie eine private und öffentliche IPv4-Adresse. Falls weiterhin pending angezeigt wird, warte kurz und wiederhole die Prüfung. Die private Adresse identifiziert den Server innerhalb seiner VPC; die öffentliche Adresse ist das Ziel für die Verbindung über das Zugriffsnetz des Labs.

Verbinden und die Anwendung konfigurieren

In diesem Schritt verbindest du dich per SSH mit der Instance, änderst die Begrüßung der Berichtsanwendung und testest die Antwort in AWS View.

Rufe die öffentliche IPv4-Adresse der Instance ab und speichere sie in einer weiteren Shell-Variablen:

PUBLIC_IP=$(aws ec2 \
  describe-instances \
  --instance-ids "$INSTANCE_ID" \
  --query 'Reservations[0].Instances[0].PublicIpAddress' \
  --output text)

SSH erstellt eine verschlüsselte Terminalverbindung zum Server. Ubuntu-Images verwenden den Anmeldenamen ubuntu. Die bereitgestellte ssh_config wählt deinen privaten Schlüssel und den Verbindungsweg des Labs; -F weist SSH an, diese Konfigurationsdatei zu lesen:

ssh -F ssh_config ubuntu@"$PUBLIC_IP"

Dein Terminal befindet sich jetzt in der Anwendungs-Instance. Bestätige den angemeldeten Benutzer:

whoami

Die Ausgabe sollte ubuntu sein. Damit unterscheidest du die Anwendungs-Instance von deinem LabEx-Terminal, dessen Benutzer labex ist.

Die bereitgestellte Anwendung liest ihre Begrüßung aus /etc/report-app/config.json. Zum Ändern dieser Systemdatei benötigst du Administratorrechte. sudo tee schreibt den folgenden Text in die Datei; das Here-Dokument zwischen den beiden JSON-Markierungen liefert diesen Text:

sudo tee /etc/report-app/config.json <<'JSON'
{
  "message": "Hello from EC2"
}
JSON

Die Anwendung liest diese Konfiguration bei jeder Anfrage erneut. Verwende curl, um ihren Health-Endpunkt über die Loopback-Adresse der Instance aufzurufen:

curl -sS http://127.0.0.1:8081/health

Die JSON-Antwort sollte den Dienst Report server identifizieren und "message": "Hello from EC2" enthalten. Damit ist belegt, dass die Anwendung innerhalb der Instance mit deiner Konfiguration antwortet.

Verlasse die SSH-Sitzung, um zum LabEx-Terminal zurückzukehren:

exit

Öffne AWS View und klicke auf Refresh resources. Suche report-server in der Instance-Tabelle. Bestätige den Zustand running und vergleiche die öffentliche IPv4-Adresse mit der CLI-Ausgabe.

Wähle unter Application requests die laufende Instance und klicke auf Check application. Bestätige eine HTTP-200-Antwort mit Hello from EC2. Diese Anfrage nutzt die aktuelle öffentliche Adresse und testet die Anwendung über das Netzwerk zusätzlich zur Prüfung innerhalb des Servers.

AWS View zeigt report-server im laufenden Zustand und die Antwort der konfigurierten Anwendung

Beispiel-Prüfpunkt: Die Anwendung liefert HTTP 200 mit Hello from EC2. Deine Ressourcen-IDs und Adressen werden anders sein.

Deinen Server beenden

In diesem Schritt beendest du die Anwendungs-Instance und bestätigst, dass sie nicht mehr läuft.

Das Beenden entfernt die Instance dauerhaft. Wähle mit der zuvor gespeicherten ID nur deinen Anwendungsserver aus:

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

Die Antwort zeigt den vorherigen und aktuellen Zustand. Die AWS CLI stellt auch einen Waiter bereit, der eine Ressource abfragt, bis sie den angegebenen Zustand erreicht. Warte, bis die Beendigung abgeschlossen ist:

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

Der Waiter kehrt ohne Ausgabe zurück, sobald die Bedingung erfüllt ist. Prüfe den endgültigen Zustand:

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

Bestätige terminated. Ein Instance-Datensatz kann nach der Beendigung weiterhin sichtbar sein; das bedeutet nicht, dass der Server noch läuft.

Klicke in AWS View auf Refresh resources. Die Instance sollte terminated zeigen und nicht mehr als laufendes Anwendungsziel verfügbar sein. Lasse das vorbereitete Netzwerk und Schlüsselpaar bestehen.

Zusammenfassung

Du hast eine EC2-Instance mit einer AMI, einem Instance-Typ, Netzwerkressourcen und einem SSH-Schlüsselpaar gestartet. Du hast dich mit dem Server verbunden, die Berichtsanwendung konfiguriert und ihre Antwort in AWS View geprüft. Abschließend hast du die Instance beendet und ihren endgültigen Zustand bestätigt.