210

Cloud & DevOps · Cloud für Apps

Public Cloud für Anwendungen nutzen

Du lernst, deine Anwendung mit verwalteten Cloud-Diensten zu betreiben: Hosting, Datenbank, Dateispeicher, Secrets und automatisches Deployment.

Fortgeschritten Fortgeschritten ca. 24 Std. SelbststudiumApplikationsentwicklung: 2. Lehrjahr · üK-WahlpflichtPlattformentwicklung: 2. Lehrjahr · üK-Wahlpflicht
#Azure#AWS#PaaS#Serverless#Managed Database#Blob Storage#Key Vault#Managed Identity#CI/CD

Überblick

Worum geht es?

Als Entwickler:in willst du dich um deinen Code kümmern, nicht um Betriebssystem-Updates. In diesem Modul bringst du eine bestehende Anwendung auf eine PaaS-Plattform, bindest eine verwaltete Datenbank und einen Objektspeicher an und holst Passwörter sicher aus einem Key Vault statt aus dem Code. Du schreibst eine kleine serverlose Funktion für Hintergrundaufgaben und automatisierst das Deployment mit einer Pipeline. Dabei behältst du Region, Skalierung und Kosten im Blick.

Wofür brauchst du das?

Neue Anwendungen in Schweizer Unternehmen werden meist direkt für die Cloud gebaut, oft in Azure Switzerland North oder AWS Zürich. Wer weiss, wie man verwaltete Dienste aus dem Code heraus nutzt, liefert Features schneller und sicherer aus. Das Modul verknüpft 295 (Backend) und 347 (Container) mit dem echten Betrieb und bereitet auf 324 (DevOps) vor.

Das solltest du schon können

  • Ein REST-Backend mit Datenbankanbindung entwickeln und lokal betreiben (Modul 295)
  • Eine Anwendung als Docker-Image bauen (Modul 347)
  • Servicemodelle, Regionen und Grundbegriffe der Cloud kennen (Modul 346)
  • Mit Git und GitHub oder GitLab arbeiten (Branches, Pull Requests)

Typische Tools & Technologien

Azure App ServiceAzure Container AppsAzure Functions / AWS LambdaAzure Database for PostgreSQLAzure Blob Storage / Amazon S3Azure Key VaultAzure CLIGitHub Actions

Lernziele

Was musst du können?

Das sind die Fähigkeiten, die am Ende des Moduls sitzen sollten. Jedes Ziel mit einem Beispiel aus dem Lehrbetrieb.

  1. 1

    Eine Webanwendung auf einer PaaS-Plattform bereitstellen

    Kompetenz A

    Du wählst zwischen Code-Deployment (z.B. App Service) und Container-Deployment (z.B. Container Apps), konfigurierst Laufzeit, Port und Umgebungsvariablen und machst die App über HTTPS erreichbar. Logs und Fehlerseiten der Plattform kannst du lesen.

    Situation

    Ein Velokurier in Basel hat eine Spring-Boot-API für Auftragsannahme, die bisher auf einem Laptop im Büro läuft.

    Deine Aufgabe

    Bringe die API in Azure, Region Switzerland North, online.

    Gutes Ergebnis

    Das Container-Image wird in Azure Container Apps mit min. 0 und max. 3 Replikas betrieben. Die API antwortet unter einer HTTPS-URL, die Konfiguration kommt aus Umgebungsvariablen, und der Log Stream zeigt die Anfragen live. Kosten bei 5000 Anfragen pro Tag: wenige Franken pro Monat.

    App ServiceContainer AppsLaufzeit-StackUmgebungsvariableLog Stream
  2. 2

    Eine verwaltete Datenbank anbinden und Schemaänderungen ausrollen

    Kompetenz B

    Statt selbst einen Datenbankserver zu betreiben, nutzt du einen verwalteten Dienst mit automatischen Backups und Updates. Du verbindest die App sicher mit TLS und spielst Schemaänderungen mit einem Migrationstool ein.

    Situation

    Die Kurier-API soll Aufträge dauerhaft speichern, und das Schema ändert sich fast jede Woche.

    Deine Aufgabe

    Lege eine PostgreSQL Flexible Server-Instanz an und führe Migrationen automatisiert aus.

    Gutes Ergebnis

    Stufe Burstable B1ms mit 32 GB für rund CHF 15 pro Monat, nur aus dem VNet erreichbar. Flyway-Migrationen laufen beim App-Start, Point-in-Time-Restore ist für 7 Tage aktiv.

    DBaaSConnection StringTLS-VerbindungMigration (Flyway / EF Core / Prisma)Point-in-Time-Restore
  3. 3

    Dateien über das SDK in einem Objektspeicher ablegen und bereitstellen

    Kompetenz C

    Hochgeladene Dateien gehören nicht auf das Dateisystem der App, weil es bei Neustarts oder Skalierung verloren geht. Du speicherst sie in Blob Storage oder S3 und gibst sie über zeitlich begrenzte Links frei.

    Situation

    Kuriere fotografieren bei der Übergabe die Unterschrift. Die Fotos liegen bisher im Ordner /uploads der App.

    Deine Aufgabe

    Speichere die Fotos über das Azure-SDK in einem privaten Container und gib sie nur kurzzeitig frei.

    Gutes Ergebnis

    Upload über BlobServiceClient in den Container 'quittungen', kein öffentlicher Zugriff. Die API erzeugt bei Bedarf einen SAS-Link, der 10 Minuten gültig ist. Eine Lifecycle-Regel verschiebt Fotos nach 90 Tagen in die günstigere Cool-Stufe.

    ObjektspeicherBlob / BucketSDKSAS-Token / Presigned URLLifecycle-Regel
  4. 4

    Secrets mit Key Vault und Managed Identity verwalten statt im Code

    Kompetenz D

    Passwörter und API-Schlüssel stehen nicht im Code und nicht in der Pipeline im Klartext. Die App erhält eine eigene Identität in der Cloud und darf damit gezielt Secrets lesen oder auf Dienste zugreifen.

    Situation

    Im Git-Repo der Kurier-API wurde ein Storage-Key in der application.properties gefunden.

    Deine Aufgabe

    Entferne alle Secrets aus dem Code und stelle auf Managed Identity um.

    Gutes Ergebnis

    Der Key wird rotiert. Die Container App bekommt eine System-Managed-Identity mit der Rolle 'Storage Blob Data Contributor' auf dem Storage-Konto und 'Key Vault Secrets User' für den Vault. Im Code wird nur noch DefaultAzureCredential verwendet, im Repo gibt es keine Schlüssel mehr.

    Key Vault / Secrets ManagerManaged Identity / IAM-RolleDefaultAzureCredentialSecret-Rotation
  5. 5

    Eine serverlose Funktion für eine Hintergrundaufgabe schreiben

    Kompetenz E

    Manche Aufgaben laufen nur gelegentlich oder werden durch ein Ereignis ausgelöst. Dafür schreibst du eine Funktion, die nur bei Bedarf startet und pro Ausführung abgerechnet wird.

    Situation

    Jeden Abend soll der Disponent eine PDF-Übersicht aller erledigten Aufträge per Mail erhalten.

    Deine Aufgabe

    Setze den Bericht als zeitgesteuerte Funktion um.

    Gutes Ergebnis

    Eine Azure Function mit Timer-Trigger um 18:30 Uhr liest die Aufträge über die API, erstellt das PDF und versendet es über Azure Communication Services. Mit dem Consumption-Plan liegen die Kosten unter CHF 1 pro Monat.

    ServerlessTrigger (Timer, HTTP, Queue)Consumption-PlanCold StartAusführungslimit
  6. 6

    Deployments automatisieren und Test- und Produktionsumgebung trennen

    Kompetenz F

    Jeder Merge soll automatisch getestet und in eine Testumgebung ausgeliefert werden. In die Produktion geht es erst nach Freigabe. Die Pipeline meldet sich ohne gespeichertes Passwort bei der Cloud an.

    Situation

    Bisher deployt eine Person per Rechtsklick aus der IDE, und niemand weiss genau, welche Version produktiv läuft.

    Deine Aufgabe

    Erstelle eine GitHub-Actions-Pipeline mit Test- und Produktionsumgebung.

    Gutes Ergebnis

    Bei Merge auf main: Tests, Image-Build mit Commit-SHA als Tag, Deployment nach 'test'. Für 'prod' braucht es die Freigabe des Berufsbildners in einer GitHub Environment. Die Anmeldung bei Azure läuft über OpenID Connect ohne gespeichertes Secret.

    CI/CD-PipelineUmgebung (Environment)Freigabe (Approval)OIDC / Workload IdentityDeployment-Slot

Selbsteinschätzung

Wo stehst du?

Die Kompetenzmatrix zerlegt das Modul in Themenstränge und drei Stufen. Für den Kompetenznachweis solltest du überall mindestens Stufe 2 erreichen. Dein Stand bleibt in diesem Browser gespeichert und färbt Lernweg und Übungen ein.

Tippe auf eine Aussage, um deinen Stand zu setzen: offen unsicher sitzt
A

App auf PaaS bereitstellen

Ziel 1

Grundlagen

Fortgeschritten

Erweitert

B

Verwaltete Datenbank

Ziel 2

Grundlagen

Fortgeschritten

Erweitert

C

Objektspeicher über das SDK

Ziel 3

Grundlagen

Fortgeschritten

Erweitert

D

Secrets und Managed Identity

Ziel 4

Grundlagen

Fortgeschritten

Erweitert

E

Serverless-Funktionen

Ziel 5

Grundlagen

Fortgeschritten

Erweitert

F

Deployment automatisieren

Ziel 6

Grundlagen

Fortgeschritten

Erweitert

Praxisfall

Die Mittagsmenü-App zieht in die Cloud

Sara ist im 2. Lehrjahr als Informatikerin Applikationsentwicklung bei der Rheintal Apps GmbH in Buchs SG, einer Softwarefirma mit 20 Mitarbeitenden. Für ein Cateringunternehmen, das drei Firmenkantinen betreibt, hat das Team eine Bestell-App für Mittagsmenüs entwickelt, die bisher auf einem einzelnen Server im Büro läuft. Sara soll die Anwendung nach Azure umziehen und so aufsetzen, dass neue Versionen ohne Handarbeit live gehen.

  1. Kapitel 1

    Fehler 503 beim ersten Start

    Sara erstellt mit der Azure CLI einen App Service Plan in der Region Switzerland North und deployt die Node.js-App. Die Seite zeigt zuerst nur einen Fehler 503, weil die App fest auf Port 3000 hört statt auf dem Port, den App Service vorgibt. Im Log-Stream findet sie den Hinweis und liest den Port neu aus der Umgebungsvariable. Danach aktiviert sie einen Health Check auf die Route /health.

    Ziel 1

  2. Kapitel 2

    Bestellungen und Menüfotos

    Die Bestellungen ziehen in eine verwaltete PostgreSQL-Datenbank um, das Schema spielt Sara mit Migrationsskripten ein. Die Menüfotos lagen bisher in einem Ordner auf dem Server und werden nun über das SDK in Blob Storage hochgeladen. Für die Anzeige in der App erzeugt sie SAS-Links, die eine Stunde gültig sind, statt den Container öffentlich zu machen.

    Ziel 2Ziel 3

  3. Kapitel 3

    Das Passwort im Repository

    Bei einem Code-Review findet ein Kollege das Datenbankpasswort in einer .env-Datei, die versehentlich im Git-Repository gelandet ist. Sara ändert das Passwort sofort, entfernt die Datei aus der Historie und legt alle Secrets in Key Vault ab. Die App greift neu über eine Managed Identity zu, sodass im Code und in den Einstellungen kein einziges Passwort mehr steht.

    Ziel 4

  4. Kapitel 4

    Die Liste für die Küche

    Jeden Morgen um 9.30 Uhr soll jede Kantine eine Übersicht der bestellten Menüs per Mail erhalten. Sara schreibt dafür eine Azure Function mit Timer-Trigger, die die Bestellungen abfragt und ein PDF erstellt. Beim ersten Lauf kommt die Mail erst um 11.30 Uhr an, weil der Zeitplan in UTC läuft. Sie korrigiert den Zeitplan und ergänzt einen Alarm, falls die Funktion fehlschlägt.

    Ziel 5

  5. Kapitel 5

    Push und fertig

    Zum Schluss baut Sara einen GitHub-Actions-Workflow, der bei jedem Push testet und in einen Staging-Slot deployt. Nach der Freigabe durch den Teamleiter bringt ein Slot-Swap die neue Version in die Produktion. Als eine Version einen Fehler im Bestellformular hat, macht Sara den Swap in zwei Minuten rückgängig, ohne dass die Kantinen etwas merken.

    Ziel 6Ziel 1

Lernweg

Wie lernst du das?

  1. 1

    Erste App in die Cloud

    ca. 4 Std.

    Du startest mit dem einfachsten Weg und bringst eine bestehende App auf eine PaaS-Plattform. Azure for Students liefert dafür Guthaben ohne Kreditkarte.

    • Azure for Students aktivieren und einen Budget-Alarm bei CHF 20 setzen
    • Eine kleine API aus dem Modul 295 auf App Service oder Container Apps deployen
    • Konfiguration über App-Einstellungen setzen und Logs im Log Stream lesen

    Trainiert Kompetenz A1A2

    Lernziel1

  2. 2

    Daten in verwaltete Dienste auslagern

    ca. 5 Std.

    Du bindest eine verwaltete Datenbank und einen Objektspeicher an und lernst, warum das lokale Dateisystem der App tabu ist.

    • PostgreSQL Flexible Server anlegen, Firewall schliessen und Migrationen ausführen
    • Einen Datei-Upload so umbauen, dass er Blob Storage oder S3 verwendet
    • Einen Download über einen zeitlich begrenzten Link umsetzen

    Trainiert Kompetenz B1B2C1C2

    Lernziel23

  3. 3

    Secrets aus dem Code entfernen

    ca. 4 Std.

    Du stellst die App auf Managed Identity um und prüfst dein Repo auf vergessene Schlüssel.

    • Mit gitleaks oder dem GitHub Secret Scanning das Repo durchsuchen
    • Einen Key Vault anlegen und Secrets per Referenz in die App-Einstellungen holen
    • Den Storage-Zugriff auf Managed Identity und RBAC umstellen

    Trainiert Kompetenz D1D2

    Lernziel4

  4. 4

    Ereignisgesteuert mit Serverless

    ca. 3 Std.

    Du schreibst eine Funktion, die durch Zeit, HTTP oder eine Warteschlange ausgelöst wird, und testest sie lokal.

    • Mit den Azure Functions Core Tools eine Funktion lokal erstellen und testen
    • Einen Timer- und einen Queue-Trigger ausprobieren
    • Kosten von Consumption-Plan und dauerhaft laufendem Container vergleichen

    Trainiert Kompetenz E1E2

    Lernziel5

  5. 5

    Deployment automatisieren

    ca. 5 Std.

    Du baust eine Pipeline, die testet, baut und in zwei Umgebungen ausliefert, und führst das ganze Projekt zusammen.

    • OIDC-Anmeldung von GitHub Actions bei Azure einrichten
    • Workflow mit Test-Job, Build-Job und zwei Deploy-Jobs schreiben
    • Ein absichtlich fehlerhaftes Deployment zurückrollen und dokumentieren
    • Alle Lernressourcen am Ende löschen oder stoppen

    Trainiert Kompetenz F1F2A3

    Lernziel61

Üben

Übungen aus der Praxis

Notizen-App online stellen

Einstieg Einstieg

Für den Klassenchat soll eine kleine Notizen-App (Node oder Python) mit Datenbank erreichbar sein.

Weist nach A1B1

  1. Die App auf App Service oder Container Apps in Switzerland North deployen
  2. Eine verwaltete Datenbank anbinden
  3. Die Verbindungsdaten nur über App-Einstellungen setzen
Tipp anzeigen

Wenn die App lokal läuft, aber in der Cloud nicht startet, prüfe zuerst den Port und den Log Stream.

Lösungsskizze anzeigen

App liest PORT und DATABASE_URL aus Umgebungsvariablen. Die Datenbank erlaubt nur Verbindungen aus Azure-Diensten oder dem VNet. Nach dem Deployment ist die App per HTTPS erreichbar, ein Neustart verliert keine Daten.

Spesenbelege sicher hochladen

Fortgeschritten Fortgeschritten

Mitarbeitende eines Ingenieurbüros sollen Spesenbelege als Foto hochladen. Die Belege dürfen nicht öffentlich sein und müssen 10 Jahre aufbewahrt werden.

Weist nach C2D2

  1. Upload-Endpunkt bauen, der Dateien in einen privaten Storage-Container schreibt
  2. Zugriff per Managed Identity statt mit Storage-Key einrichten
  3. Download nur über zeitlich begrenzte Links erlauben
  4. Eine Lifecycle-Regel für günstige Langzeitspeicherung definieren
Tipp anzeigen

Denke an die Aufbewahrungspflicht. Archiv-Speicher ist günstig, aber das Abrufen dauert Stunden.

Lösungsskizze anzeigen

Container ohne öffentlichen Zugriff, RBAC-Rolle für die Identity der App, User-Delegation-SAS mit kurzer Gültigkeit. Lifecycle: nach 30 Tagen Cool, nach 365 Tagen Archive, Löschung nach 10 Jahren. Optional unveränderliche Speicherung (Immutability Policy).

Kurier-Plattform mit Pipeline und Abendbericht

Anspruchsvoll Anspruchsvoll

Der Velokurier will die API, einen täglichen Bericht und eine saubere Trennung von Test und Produktion. Das Budget ist CHF 60 pro Monat.

Weist nach F3E3A2B2

  1. Architektur mit API, Datenbank, Storage, Key Vault und Funktion skizzieren
  2. Pipeline mit Tests, Image-Build und zwei Umgebungen erstellen
  3. Abendbericht als Timer-Funktion umsetzen
  4. Kosten pro Umgebung schätzen und mit dem Budget vergleichen
Tipp anzeigen

Die Testumgebung muss nicht rund um die Uhr laufen. Scale-to-zero oder kleinere Stufen sparen viel.

Lösungsskizze anzeigen

Container Apps mit Scale-to-zero für Test, min. 1 Replika für Prod. Gemeinsame Registry, getrennte Datenbanken. Pipeline mit OIDC und Approval für Prod. Funktion im Consumption-Plan. Kostenschätzung mit Pricing Calculator, Prod rund CHF 35, Test unter CHF 15.

Selbstcheck

Kannst du das beantworten?

Warum speichert man Uploads nicht im Dateisystem einer PaaS-App?

Weil es bei Neustart, Neu-Deployment oder mehreren Instanzen verloren geht oder nicht geteilt wird.

Was ist eine Managed Identity?

Eine von der Cloud verwaltete Identität für eine Ressource, mit der sie sich ohne gespeichertes Passwort bei anderen Diensten anmeldet.

Was ist ein Cold Start?

Die Verzögerung, wenn eine serverlose Funktion oder ein auf null skalierter Dienst erst gestartet werden muss, bevor er antwortet.

Wofür sind SAS-Token oder Presigned URLs gut?

Um einen zeitlich und rechtlich begrenzten Zugriff auf eine einzelne Datei zu geben, ohne den Speicher öffentlich zu machen.

Warum ist OIDC in der Pipeline besser als ein gespeichertes Client Secret?

Es gibt kein langlebiges Secret, das gestohlen werden kann. Die Pipeline erhält bei jedem Lauf ein kurzlebiges Token.

Was bringt ein Migrationstool wie Flyway?

Schemaänderungen sind versioniert, nachvollziehbar und laufen in jeder Umgebung in derselben Reihenfolge.

Prüfung

Stolpersteine & Prüfungstipps

Typische Stolpersteine

  • Connection Strings mit Passwort in appsettings.json oder .env committen.
  • Die Datenbank-Firewall für alle IP-Adressen öffnen, um ein Verbindungsproblem schnell zu lösen.
  • Ressourcen in 'West Europe' oder 'East US' anlegen, obwohl Personendaten in der Schweiz bleiben sollen.
  • Die Testumgebung in derselben Grösse wie Produktion rund um die Uhr laufen lassen.
  • Serverless für lange Berechnungen nutzen und an Zeitlimits scheitern.
  • Direkt aus der IDE in die Produktion deployen, ohne Pipeline und ohne Versionsangabe.

Tipps für den Kompetenznachweis

  • Zeige im Nachweis die ganze Kette: Code, Pipeline, laufende App, Logs. Ein Screenshot pro Schritt reicht.
  • Begründe die Wahl des Dienstes mit Last, Kosten und Betriebsaufwand, nicht nur mit 'weil es einfach ist'.
  • Wenn etwas nicht funktioniert, lies zuerst die Plattform-Logs. Die meisten Fehler sind Port, Umgebungsvariable oder Firewall.
  • Halte Region und Datenschutzüberlegungen schriftlich fest. Das wird oft gefragt.

Glossar

Begriffe kurz erklärt

PaaS
Plattform, auf der du Code oder Container betreibst, ohne Server und Betriebssystem selbst zu verwalten.
Serverless
Ausführungsmodell, bei dem Code nur bei Bedarf läuft und nach Ausführungen und tatsächlich genutzter Rechenzeit abgerechnet wird, nicht nach bereitgestellter Laufzeit.
Blob Storage
Objektspeicher von Azure für unstrukturierte Daten wie Bilder, PDFs oder Backups.
Key Vault
Verwalteter Tresor für Passwörter, Schlüssel und Zertifikate.
Managed Identity
Identität einer Cloud-Ressource, mit der sie ohne gespeicherte Zugangsdaten auf andere Dienste zugreift.
SAS-Token
Signierter, zeitlich begrenzter Zugriffsschlüssel auf einzelne Speicherressourcen.
Scale-to-zero
Fähigkeit eines Dienstes, ohne Last auf null Instanzen herunterzufahren und dann nichts zu kosten.
Deployment-Slot
Zusätzliche Instanz einer App für Tests, die per Swap ohne Ausfall in die Produktion getauscht werden kann.

Mit KI-Tutor

Jeder Kurs hat einen persönlichen KI-Tutor

  • Erklärt in deinem Tempo
  • Debuggt mit dir
  • Fachgespräch wie im QV
  • Unbegrenzt neue Übungen

Denkanstösse statt fertiger Lösungen. In der Gratis-Lektion zum Ausprobieren.

KI-Tutor · Modul 164Nur Tipps

Mein JOIN liefert plötzlich doppelte Zeilen. Was mache ich falsch?
Gute Frage! Schau dir die Spalte an, über die du verbindest: Ist sie in beiden Tabellen eindeutig? Was passiert mit einer Kundin, die zwei Bestellungen hat?
Ah, dann kommt sie zweimal vor …
Genau. Willst du die Bestellungen zählen oder nur die Kundinnen sehen? Je nachdem hilft dir GROUP BY oder DISTINCT.

Tutavio

So helfen wir dir bei Modul 210

  • Wir deployen mit dir dein Schul- oder Betriebsprojekt in Azure oder AWS und klären dabei Port-, Konfigurations- und Logprobleme live.
  • Wir durchsuchen gemeinsam dein Repository nach Secrets und stellen deine App Schritt für Schritt auf Key Vault und Managed Identity um.
  • Wir bauen mit dir eine GitHub-Actions-Pipeline mit OIDC-Anmeldung und getrennten Umgebungen auf.
  • Wir rechnen mit dir die Kosten deiner Lösung durch und zeigen, wo du mit Scale-to-zero oder kleineren Stufen sparen kannst.

Unverbindlich anfragen. Wir melden uns innert 24 Stunden.

Tutor:in für Modul 210 finden

Passende Module

Diese Seite ist eine eigene Lernhilfe von Tutavio und keine offizielle Modulbeschreibung. Nummer, Titel und Einordnung stammen aus den öffentlichen Bildungsplänen. Die verbindliche Modulidentifikation findest du im Modulbaukasten von ICT-Berufsbildung Schweiz.

Gratis-LektionNachhilfe