1. Projektkontext
Übersicht: Welche Komponenten im Lift & Shift genutzt wurden, welche Probleme dabei entstehen, und welche AWS Cloud-Native Services diese ersetzen – inklusive Nutzen.
| Lift & Shift – genutzt | Problem im Lift & Shift | Cloud Native – AWS Lösung | Nutzen (Cloud Native) |
|---|---|---|---|
| Tomcat auf EC2/VM | Server-Management (Patches, OS), Skalierung aufwendig | Elastic Beanstalk (Tomcat) | Einfaches Deployment, Auto-Scaling & Rollback integriert |
| Nginx auf EC2 + ELB | Konfiguration/Wartung manuell, mehr Ops-Aufwand | Application Load Balancer (ALB) | Managed, hochverfügbar, weniger Betrieb |
| Kein/Manuelles Auto Scaling | Langsame Reaktion bei Last, Risiko von Überlastung | Auto Scaling (integriert) | Skaliert automatisch nach Metriken (CPU/Requests) |
| NFS / S3 / EFS manuell gemountet | Komplexes Setup, Mount-/Berechtigungsfehler möglich | S3 / EFS (managed) | Hohe Verfügbarkeit, weniger Fehlerquellen |
| MySQL auf EC2 | Backups/HA müssen selbst gebaut werden | Amazon RDS (MySQL) | Automatische Backups, Multi-AZ, stabiler Betrieb |
| Memcached auf EC2 | Skalierung & OS-Betrieb manuell | ElastiCache (Memcached) | Managed Cache, bessere Performance & Skalierung |
| RabbitMQ auf EC2 | Cluster/Erlang/Upgrades komplex | Amazon MQ (RabbitMQ) | Managed Broker, weniger Wartung, höhere Verfügbarkeit |
| GoDaddy / lokales DNS | IP-Abhängigkeit, schwieriger bei Änderungen | Route 53 | Dynamisches DNS, AWS-Integration |
| Kein CDN | Höhere Latenz für entfernte Nutzer | CloudFront | Globales Caching, schnellere Auslieferung |
| TLS-Zertifikate manuell | Erneuerung fehleranfällig, manueller Aufwand | AWS Certificate Manager (ACM) | Kostenlos + automatische Verlängerung |
Lift & Shift = IaaS
Cloud Native = PaaS, SaaS, IaaC
Fokus dieses Projekts: Re-Architecting – also Architektur neu entwerfen, um AWS-native Vorteile zu nutzen.
IaaS: Infrastructure as a ServicePaaS: Platform as a Service
SaaS: Software as a Service
IaaC: Infrastructure as Code
2. Ziel des Projekts
Ziel ist es, die bestehende Java-Webanwendung profile so umzubauen, dass sie:
- Cloud Native betrieben werden kann (containerisiert, service-orientiert)
- skalierbar und hochverfügbar ist
- Managed AWS Services nutzt (weniger Ops, mehr Fokus auf Business)
3. Cloud-Native Architektur (AWS) – Übersicht
Re-Architecture der „profile“-Web-App: Managed Services ersetzen EC2-VMs (Tomcat/DB/Cache/MQ) und liefern Skalierung, Hochverfügbarkeit und weniger Betriebsaufwand.
Statt selbstverwalteter EC2-VMs nutzt die Architektur Managed Services (Beanstalk, RDS, ElastiCache, Amazon MQ), wodurch Skalierung, Updates und Hochverfügbarkeit weitgehend automatisiert sind.
User → Route 53
Der Benutzer ruft die Anwendung über den Domainnamen auf.
Route 53 löst den Domainnamen in den CloudFront-Endpunkt auf.
Route 53 → CloudFront (CDN)
CloudFront dient als globaler Einstiegspunkt.
Statische Inhalte werden gecacht, dynamische Requests weitergeleitet.
CloudFront → Application Load Balancer (ALB)
CloudFront leitet Anfragen sicher per HTTPS an den ALB weiter.
Der ALB terminiert TLS/HTTPS.
ALB → Elastic Beanstalk (Tomcat Auto Scaling Group)
Der ALB verteilt den Traffic auf mehrere Tomcat-Instanzen,
die von Elastic Beanstalk automatisch verwaltet und skaliert werden.
Application → Managed Backend Services
Die Java-Webanwendung greift auf folgende AWS-Services zu:
- Amazon RDS für MySQL-Datenbankzugriffe
- Amazon ElastiCache (Memcached) für Caching
- Amazon MQ (ActiveMQ) für Messaging
Monitoring & Health Checks
- ALB Health Checks prüfen die Anwendung
- Elastic Beanstalk & CloudWatch überwachen Instanzen und skalieren automatisch
4. Re-Factoring der Java-Webanwendung in AWS
1) Login to AWS Account
- Ziel:
Zugriff auf die AWS Management Console, um alle Cloud-Ressourcen zentral zu erstellen und zu verwalten.- Warum:
Ohne AWS-Account/Console können weder Netzwerk, Services (RDS/ElastiCache/MQ) noch Elastic Beanstalk erstellt werden.- Wie (Vorgehen):
- In die AWS Console einloggen
- Region auswählen (z.B.
us-east-1) - Überprüfen: EC2, VPC, RDS, Elastic Beanstalk sind verfügbar
2) Create Key Pair for Beanstalk Instance Login
- Ziel:
SSH-Key (.pem) erstellen, um bei Bedarf auf die EC2-Instanzen im Elastic-Beanstalk-Environment zuzugreifen (Debugging).- Warum:
Elastic Beanstalk läuft intern auf EC2-Instanzen. Für Troubleshooting (Logs, Config, Connectivity) braucht man optional SSH-Zugriff.- Wie (Vorgehen):
- EC2 → Key Pairs → Create key pair
- Name setzen (
profile-rearch-key) - Format:
.pemdownloaden und sicher speichern
3) Create Security Group for Backend (ElastiCache, RDS & ActiveMQ)
- Ziel:
Netzwerkzugriff so begrenzen, dass nur die Anwendung (Beanstalk(EC2)/Tomcat) die Backend-Services erreichen kann.- Warum:
Backend Services sollen nicht öffentlich erreichbar sein. Security Groups sorgen für minimale Angriffsfläche und klare Service-Kommunikation.- Wie (Vorgehen):
- EC2 → Security Groups → Create security group (name:
profile-backend-SG) - Inbound nur aus dem Beanstalk-SG erlauben (später, nachdem Beanstalk existiert)
Inbound Rules (später hinfügen, nachdem Beanstalk, RDS existier)
- RDS MySQL: 3306 → Source: Beanstalk SG
- ElastiCache Memcached: 11211 → Source: Beanstalk SG
- Amazon MQ (je nach Broker/Protokoll): → Source: Beanstalk SG
- All traffic → Backend SG( für interne backend )Service-Kommunikation
Outbound Rules (Erlaubter ausgehender Traffic)
- All traffic → 0.0.0.0/0 (IPv4)
4) Create Backend Managed Services: RDS, Amazon ElastiCache, Amazon ActiveMQ
- Ziel:
Backend-Komponenten als Managed Services bereitstellen (ohne eigene EC2-Wartung).- Warum:
Weniger Betrieb/Updates/Backups manuell, höhere Stabilität, bessere Skalierung und Standard-Security (Patch-Management, Monitoring).- Wie (Vorgehen)
4.1 RDS (MySQL)
-
Amazon RDS → Parameter Group (Konfiguration) herstellen:
- In AWS wird das Verhalten von MySQL (Datenbank-Parameter) nicht „direkt“ an der RDS-Instanz konfiguriert, sondern sauber über eine DB Parameter Group
-
Amazon RDS → Subnet Groups herstellen:
- Ein DB Subnet Group definiert, in welchen Subnets (und Availability Zones) eine RDS-Datenbank betrieben werden darf und für sichere und hochverfügbare Platzierung der Datenbank im VPC
-
Amazon RDS → database herstellen:
- Engine: MySQL
- Parameter Group
- Subnets auswählen (private)
- Security Group: SG-backend (
profile-backend-SG) - DB-Name/User/Password definieren
- Endpoint notieren (für App-Config)
4.2 ElastiCache (Memcached)
- Amazon ElastiCache → Parameter Group herstellen
- Amazon ElastiCache → Subnet Groups herstellen
-
Amazon ElastiCache → database herstellen:
- Memcached
- Parameter Group
- Subnets Group
- Security Group: SG-backend (
profile-backend-SG) - Name
4.3 Amazon MQ (RabbitMQ)
- Amazon MQ → Create broker → RabbitMQ
- Ein Broker ist der zentrale Nachrichtenserver, der Nachrichten entgegennimmt, speichert und weiterleitet.
- VPC/Subnets (default) auswählen
- Security Group:
profile-backend-SG - Broker Endpoint + User/Password notieren
Screenshot-Idee: RDS Endpoint / ElastiCache Endpoint / MQ Broker Details
5) DB aus der App-Quellcode in RDS-Datenbank initialisieren
- Ziel:
Die in der Anwendung enthaltene Datenbankstruktur (Schema + Initialdaten) soll in eine Amazon RDS MySQL Datenbank importiert werden.- Warum:
- Die Applikation erwartet eine vordefinierte Datenbankstruktur
- Amazon RDS startet ohne Tabellen oder Daten
- Der Import stellt sicher, dass:
- Tabellen korrekt angelegt sind
- Constraints & Relationen vorhanden sind
- Wie (Vorgehen):
Die Initialisierung erfolgt einmalig über eine temporäre EC2-Instanz (MySQL-Client). Nach dem Import wird die Instanz wieder gelöscht.
-
Temporäre EC2 erstellen (mysql-client)
Ubuntu-Instanz mit eigene Security Group nur für den Import. Inbound:SSH (22)→MyIP. -
Temporäre EC Per Git Bash verbinden
ssh -i project-prod-key.pem ubuntu@<PUBLIC_IP_MYSQL_CLIENT> -
mysql-client & git installieren (Verbindung zu Amazon RDS / git → Source Code klonen)
sudo apt update sudo apt install mysql-client git -y -
RDS Security Group öffnen (nur für mysql-client)
Inbound Rule in RDS-SG:MySQL (3306)→ Source: SG der mysql-client EC2. -
Source Code klonen & Branch wechseln
Hier liegtgit clone https://github.com/<username>/profile.git cd profile git checkout awsrefactor cd src/main/resourcesdb_backup.sql(Schema + Initialdaten). -
Schema in RDS importieren
mysql -h <RDS_ENDPOINT> -u <RDS_DB_USERNAME> -p <RDS_DB_NAME> < src/main/resources/db_backup.sql -
Ergebnis prüfen
mysql -h <RDS_ENDPOINT> -u <DB_USERNAME> -p SHOW TABLES;
Schema erfolgreich in Amazon RDS importiert (Tabellen vorhanden). -
mysql-client EC2 löschen
Instanz wird nicht mehr gebraucht → terminieren.
6) Create Elastic Beanstalk Environment
- Ziel:
Die Java-Web-App als Elastic-Beanstalk-Environment betreiben (Tomcat + Auto Scaling + Load Balancer).- Warum
Elastic Beanstalk übernimmt Infrastruktur-Basics: Instanzen, Scaling, Health Checks, Rolling Deployments, Logs & Monitoring.- Wie (Vorgehen)
Elastic Beanstalk – Architektur (ALB + Auto Scaling + Tomcat)
Elastic Beanstalk verwaltet das komplette Runtime-Setup: Load Balancer, Auto Scaling Group, EC2/Tomcat-Instanzen sowie Monitoring (CloudWatch). Das Artefakt (WAR) liegt in einem S3 Bucket.
6.1 IAM-Rolle für EB erstellen (EC2 starten, ALB konfigurieren, Logs schreiben: benötigen explizite Berechtigungen)
- Policy:
AdministratorAccess-AWSElasticBeanstalk(Erlaubt EB, alle benötigten Ressourcen zu orchestrieren) - Policy:
AWSElasticBeanstalkWebTier(Zugriff für Web-/App-Komponenten (ALB, EC2, Health Checks) - Policy:
AWSELasticBeanstalkCustomPlatformforEC2Role - Policy:
AWSElasticBeanstalkRoleSNS
6.2 EB Application erstellen
- AWS Console → Elastic Beanstalk
- Platform: Tomcat
6.3 Environment konfigurieren (Tomcat)
- Platform: Sample Application auswählen(eigenes Artefakt (WAR) wird später deployed)
- Service Role: Automatisch erstellt von Elastic Beanstalk
- EC2 Instance Profile(zuvor erstellte IAM-Rolle, Key Pair)
- Environment Type: Load balanced
- Deployment Policy: Rolling Deployment(Keine Downtime, Instanzen werden nacheinander aktualisiert)
Egebnis, Nach wenigen Minuten erstellt Elastic Beanstalk automatisch:
- Application Load Balancer
- Auto Scaling Group
- EC2 Tomcat Instanzen
- Health Checks
- CloudWatch Monitoring
Die Umgebung ist bereit, das eigene WAR-File kann jetzt deployed werden
7) Deploy Artifact to Beanstalk
- Ziel:
Das WAR so bauen, dass es auf die Managed Backends zeigt (RDS/ElastiCache/MQ Endpoints).- Warum
In Cloud-Native ist die Konfiguration service-basiert: Endpoints statt lokale IPs/VM-Hosts.- Wie (deployment des Artefakts zu Elastic Beanstal)
-
Backend-Informationen im Code prüfen
Sicherstellen, dass der Quellcode alle notwendigen AWS-Backend-Daten enthält:- Amazon RDS (Endpoint, Benutzername, Passwort)
- Amazon MQ (Endpoint, Benutzername, Passwort)
- Amazon ElastiCache (Endpoint)
-
Quellcode lokal klonen und öffnen
Das Repository aus GitHub auf die lokale Maschine klonen und in VS Code öffnen. -
Backend-Endpunkte konfigurieren
Datei öffnen:src/main/resources/application.properties
Die bisherigen lokalen Namen (db01,mc01,rmq01) durch die echten AWS-Endpoints von RDS, ElastiCache und Amazon MQ ersetzen. -
Artefakt lokal bauen
Im Projektverzeichnis über Git Bash den Build starten:mvn install -
Artefakt prüfen
Nach erfolgreichem Build wird der Ordnertarget/erzeugt.
Darin befindet sich das Deploy-Artefakt:profile-v2.war -
Deployment zu Elastic Beanstalk
In der AWS Console:- Elastic Beanstalk → Environments
- Environment auswählen:
profile-refactor-beanapp-prod - Upload and Deploy →
profile-v2.warauswählen
Zugriff über die Elastic-Beanstalk-Domain (HTTP – „Nicht sicher“)
Die Events zeigen den laufenden Deployment-Prozess.
-
HTTPS Listener konfigurieren
Elastic Beanstalk → Configuration → Instance traffic and scaling → Load Balancer:- Neuen Listener hinzufügen
- Protocol: HTTPS (443)
- SSL-Zertifikat aus AWS Certificate Manager auswählen
-
Domain mit GoDaddy verbinden
In GoDaddy einen neuen DNS-Record anlegen:- Name:
profilerefarch - Value: Elastic Beanstalk / ALB Domain Name
- Name:
Ergebnis: Die Java-Webanwendung läuft cloud-nativ auf Elastic Beanstalk, ist automatisch skaliert, überwacht und sicher per HTTPS erreichbar.
8) Create CDN with SSL Cert (CloudFront)
- Ziel:
CloudFront als globalen Entry-Point nutzen: Caching, Performance, SSL-Frontdoor.- Warum
Schnellere Ladezeiten weltweit, weniger Last auf dem Origin (ALB/Beanstalk), bessere User Experience.Wie (Vorgehen)
Aktuell zeigt unsere Domain noch direkt auf den Elastic-Beanstalk-Load-Balancer (Beanstalk-Endpunkt). Im nächsten Schritt wird dieser DNS-Eintrag entfernt und durch eine Amazon CloudFront Distribution ersetzt.
Dazu wird in GoDaddy der bestehende DNS-Record gelöscht, der auf den Beanstalk-Endpunkt verweist. Anschließend wird ein neuer DNS-Record erstellt, der auf die CloudFront-Distribution zeigt.
- CloudFront Distribution erstellen
- Origin: ALB/Beanstalk Endpoint
- ACM Zertifikat (für CloudFront: in us-east-1) wählen
- Cache Behavior konfigurieren
5. Fazit – Cloud-Native Re-Architecture der Java-Web-Anwendung „Profile“
In diesem Projekt wurde die bestehende Java-Webanwendung Profile erfolgreich von einer klassischen Lift-&-Shift-Architektur zu einer modernen Cloud-Native Architektur auf AWS weiterentwickelt.
Was wurde erreicht?
- Entkopplung der Anwendung von der Infrastruktur
- Ersatz selbstverwalteter Server durch gemanagte AWS-Services
- Automatische Skalierung, hohe Verfügbarkeit und bessere Sicherheit
- Klare Trennung von Build, Deployment und Runtime
Technischer Mehrwert
- Elastic Beanstalk übernimmt Betrieb, Skalierung und Load Balancing der Tomcat-Anwendung
- Amazon RDS, ElastiCache und Amazon MQ ersetzen manuell betriebene Backend-Services
- CloudFront + Route 53 sorgen für globale Erreichbarkeit, Performance und HTTPS-Sicherheit
- CloudWatch ermöglicht Monitoring, Logs und automatische Reaktionen
Ausblick – Nächste Evolutionsstufe
- Containerisierung mit Docker
- CI/CD-Pipeline mit GitHub Actions oder AWS CodePipeline