Einführung
Die Bestellanwendung hat eine Datenbankverbindung, aber noch keine Bestelltabelle. Du definierst ein kleines Schema, speicherst drei Kundenbestellungen und fragst die Daten ab, die die Anwendung liest.
Schließe zuerst das vorherige Lab zur Datenbankverbindung ab. Dieses Lab startet unabhängig mit einer bereitgestellten PostgreSQL-Instanz, Anwendung und konfigurierten AWS CLI. Nach den Ergebnistests entfernst du die Übungsdatenbank.
Bezug zu Zertifizierungen
Dieses Lab bietet einführende praktische Übungen zu folgenden Prüfungsthemen.
- Cloud Practitioner (CLF-C02) · Aufgabe 3.4: Einen Anwendungsfall relationaler Datenbanken für strukturierte Anwendungsdaten erkennen.
- Solutions Architect – Associate (SAA-C03) · Aufgabe 3.3: Relationale Datenbank-Engines und Zugriffsmuster von Anwendungen verstehen.
Die Bestelltabelle definieren
In diesem Schritt erstellst du ein Schema mit einer eindeutigen Kennung, einem Kundennamen und einem Gesamtbetrag je Bestellung.
Eine Tabelle speichert Zeilen mit festgelegten Spalten. SQL ist die Sprache zum Definieren und Abfragen dieser Zeilen. Die RDS-API verwaltet die Datenbankinstanz; SQL bearbeitet Daten innerhalb der PostgreSQL-Engine.
Lade die vorbereiteten SQL-Verbindungseinstellungen und prüfe die bereitgestellte Instanz:
cd /home/labex/project
source database.env
aws rds \
describe-db-instances \
--db-instance-identifier orders-db \
--query 'DBInstances[0].{Database:DBName,Endpoint:Endpoint,Status:DBInstanceStatus}'
Die Instanz ist verfügbar und enthält die Datenbank orders. Ihre psql-Verbindung ist als service=orders-db vorbereitet.
Erstelle die Tabelle mit einem Heredoc. Der Text zwischen den beiden SQL-Zeilen wird als SQL-Anweisungen an psql übergeben:
psql \
"service=orders-db" \
--set=ON_ERROR_STOP=1 <<'SQL'
CREATE TABLE orders (
order_id integer PRIMARY KEY,
customer text NOT NULL,
total numeric(8,2) NOT NULL CHECK (total > 0)
);
SQL
Der Primärschlüssel verhindert, dass zwei Zeilen dieselbe Bestell-ID haben. NOT NULL verlangt einen Wert. numeric(8,2) speichert eine Dezimalzahl mit zwei Nachkommastellen, und CHECK lehnt nicht positive Gesamtbeträge ab. So weist die Datenbank ungültige Daten zurück.
Prüfe die Tabelle:
psql \
"service=orders-db" \
--command '\d orders'
Du solltest drei Spalten, einen Primärschlüssel und die Prüfung auf einen positiven Gesamtbetrag sehen. Die Tabelle enthält noch keine Zeilen.
Drei Kundenbestellungen speichern
In diesem Schritt fügst du einen kleinen Datensatz ein und liest ihn sofort wieder aus.
INSERT schreibt Zeilen. Benannte Spalten machen die Zuordnung jedes Werts zu seiner Spalte eindeutig:
psql \
"service=orders-db" \
--set=ON_ERROR_STOP=1 <<'SQL'
INSERT INTO orders (order_id, customer, total)
VALUES
(101, 'Maya', 49.90),
(102, 'Owen', 18.50),
(103, 'Nina', 25.25);
SELECT order_id, customer, total
FROM orders
ORDER BY order_id;
SQL
Du solltest drei Zeilen mit den obigen Werten sehen. SELECT liest gespeicherte Daten; ORDER BY sorgt für eine vorhersehbare Anzeige. Ohne Sortierklausel garantiert eine Datenbank keine bestimmte Zeilenreihenfolge.
AWS View sollte jetzt dieselben drei Bestellungen anzeigen. Die Anwendung liest PostgreSQL bei jeder Anfrage. Durch die Tabelle und ihre Zeilen wird aus einer nicht verfügbaren Bestellliste eine nutzbare Anzeige der Anwendungsdaten.
Bestellungen abfragen und die Anwendung prüfen
In diesem Schritt beantwortest du eine geschäftliche Frage und vergleichst SQL-Daten mit der Antwort der Anwendung.
Das Team benötigt Bestellungen mit mindestens 25.00. WHERE filtert Zeilen, bevor sie im Ergebnis erscheinen:
psql \
"service=orders-db" \
--command 'SELECT order_id, customer, total FROM orders WHERE total >= 25.00 ORDER BY order_id;'
Du solltest die Bestellungen 101 und 103 erhalten. Der Filter löscht Bestellung 102 nicht, sondern wählt nur die zurückzugebenden Zeilen aus.
Eine Aggregation fasst Werte mehrerer Zeilen zusammen. Zähle alle Bestellungen und berechne ihren Gesamtbetrag:
psql \
"service=orders-db" \
--command 'SELECT count(*) AS order_count, sum(total) AS order_total FROM orders;'
Du solltest 3 Bestellungen und einen Gesamtbetrag von 93.65 erhalten.
Fordere die Bestellliste der Anwendung an:
curl \
--silent \
--show-error \
--fail \
http://127.0.0.1:8080/application/orders | jq
Du solltest alle drei Bestellungen, die Datenbank orders, den Benutzer orders_admin und read_only: false erhalten. SQL und Anwendung lesen dieselben gespeicherten Daten. Die Anwendung liefert die vollständige Liste; die vorherige SQL-Abfrage verwendete deinen Filter.
Der Hauptbenutzer der Datenbank eignet sich zum Erstellen dieses Schemas. Das nächste Lab gibt der Anwendung eine Datenbankidentität mit weniger Rechten, damit normale Zugriffe keine administrativen Berechtigungen benötigen.

Die Übungsdatenbank entfernen
In diesem Schritt entfernst du die Datenbank dieses Labs und ihre Bestelldaten.
Die bereitgestellte Instanz gehört zu dieser Übung. Du musst weder die Beispielbestellungen noch einen abschließenden Snapshot behalten:
aws rds \
delete-db-instance \
--db-instance-identifier orders-db \
--skip-final-snapshot \
--query 'DBInstance.DBInstanceIdentifier'
aws rds \
wait db-instance-deleted \
--db-instance-identifier orders-db
aws rds \
describe-db-instances \
--query 'DBInstances[].DBInstanceIdentifier'
Du solltest [] erhalten. Das Löschen der Instanz entfernt die Datenbank mit der Tabelle. Es wirkt umfassender als DELETE, das ausgewählte Zeilen innerhalb einer bestehenden Tabelle entfernt. Behalte die vorbereitete Anwendung und die Netzwerkressourcen.
Zusammenfassung
Du hast ein Bestellschema mit Einschränkungen definiert, drei Datensätze eingefügt und mit SQL-Filtern und Aggregationen Datenfragen beantwortet. Die Anwendung las dieselben Zeilen aus PostgreSQL. Anschließend hast du die Übungsdatenbank entfernt und die bereitgestellte Anwendung sowie das Netzwerk beibehalten.
Das nächste Lab beschränkt sowohl den Netzwerkzugriff als auch die Datenbankrechte der Anwendung.


