Dokumentation: Flowy auf AWS mit EC2
Beim Einsatz von Flowy auf AWS sind zwei unterschiedliche Szenarien zu unterscheiden:
- Flowy selbst hosten: die Einrichtung der Flowy-Plattform (Admin- und Verarbeitungsdienst) auf der eigenen AWS-Infrastruktur, damit darauf Anwendungen erstellt und betrieben werden können.
- Bereitstellung einer mit Flowy erstellten Anwendung: eine mit Flowy erstellte Anwendung für ihre Endnutzer verfügbar machen.
Die folgenden Abschnitte beschreiben die erforderliche AWS-Einrichtung für jedes Szenario.
Flowy selbst hosten
Annahmen
Die folgende Anleitung geht davon aus, dass für den Admin- respektive Verarbeitungsdienst separate Load Balancer eingerichtet werden und dass CloudFront (zumindest) zur Auslieferung der Inhalte des Flowy-Admin-Portals verwendet wird.
Vorbereitung
- Überlegen Sie sich eine Namenskonvention für die Hosts. Ein Vorschlag:
admin.example.comfür das Admin-Frontend, das von den Benutzern verwendet wird, verweist auf CloudFrontadmin.lb.example.comwird für den Admin-Load-Balancer verwendetprocessing.lb.example.comwird für den Verarbeitungs-Load-Balancer verwendet
- Ermitteln und notieren Sie sich den für die VPC konfigurierten IP-Adressbereich
Durchführung
- Richten Sie einen S3-Bucket ein, aktivieren Sie das statische Website-Hosting und laden Sie das Flowy-Frontend hoch. Bitte stellen Sie sicher, dass die index.html im Stammordner des Buckets angezeigt wird.
- Richten Sie die EC2-Instanz(en) ein und installieren Sie den Admin- respektive Verarbeitungsdienst. Die Dienste können auf derselben oder auf unterschiedlichen EC2-Instanzen laufen. Notieren Sie sich unbedingt die verwendeten Ports, standardmäßig 8080 für Admin und 8081 für Verarbeitung.
- Erstellen und weisen Sie den EC2-Instanz(en) Sicherheitsgruppen zu. Es wird dringend empfohlen, den Zugriff auf diese internen Ports einzuschränken, indem der VPC-CIDR (= der interne IP-Bereich der VPC) als einzige zulässige IP-Adresse definiert wird. Alternativ ist es auch möglich, den Zugriff auf die IP-Adressen der Load Balancer zu beschränken, siehe die entsprechende AWS-Dokumentation What's the source IP address of the traffic that Elastic Load Balancing sends to my web servers? .
- Richten Sie öffentliche Zertifikate in N. Virginia (!) ein und schließen Sie die Validierung ab; dieses Zertifikat wird für CloudFront verwendet.
- Richten Sie eine CloudFront-Distribution ein, konfigurieren Sie den Domainnamen und das neu erzeugte Zertifikat. Fügen Sie den S3-Bucket als Standard-Quelle hinzu und stellen Sie sicher, dass als Viewer-Protokollrichtlinie "Redirect HTTP to HTTPS" (HTTP zu HTTPS umleiten) gesetzt ist.
- Richten Sie öffentliche Zertifikate für die Load Balancer ein; diese müssen in derselben Region wie die EC2- und Load-Balancer-Instanzen erstellt werden.
- Konfigurieren Sie den Load Balancer vor beiden Diensten und beachten Sie die zwei unterschiedlichen Health-Check-URLs:
- Admin: /api/actuator/health
- Verarbeitung: /actuator/health (abhängig von der Nutzung von CloudFront)
- Erstellen Sie DNS-Einträge für beide Dienste und lassen Sie diese auf die Load Balancer verweisen.
- Öffnen Sie die zuvor erzeugte CloudFront-Distribution und erstellen Sie eine neue Quelle, die auf den Admin-DNS-Eintrag verweist, mit /api als Pfadmuster. Stellen Sie sicher, dass als Viewer-Protokollrichtlinie "Redirect HTTP to HTTPS" gesetzt ist, dass alle HTTP-Methoden (GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE) erlaubt sind und dass
CachingDisabledals Cache-Richtlinie respektive AllViewer als Origin-Request-Richtlinie konfiguriert ist. - Fügen Sie eine zweite Quelle hinzu, die auf den Verarbeitungsdienst verweist, und verwenden Sie /rest als Pfadmuster. Verwenden Sie dieselben Einstellungen wie für den Admin-Dienst.
- Erstellen Sie einen DNS-Eintrag für Admin (und optional für Verarbeitung) und lassen Sie diesen auf CloudFront verweisen.
- Fertig: Ihre neu konfigurierte Umgebung ist einsatzbereit!
Die obige Anleitung soll einen Überblick über die notwendigen Schritte geben. Bitte prüfen und befolgen Sie die AWS-Anleitungen sowie den Rat von Experten, um sicherzustellen, dass Ihre Umgebung gehärtet und für den öffentlichen Einsatz sicher ist.
HINWEIS
Erwägen Sie, den
<flowyContextPath>zu setzen, um Präfixe wie z. B. /api zu unterstützen. Siehe Flowy-Konfiguration für Details.
Bereitstellung einer mit Flowy erstellten Anwendung
Annahmen
Die folgende Anleitung geht davon aus, dass für die Domain example.com Route 53 für die DNS-Verwaltung verwendet wird - die Domain muss eine öffentliche Route-53-Hosted-Zone als ihre maßgebliche DNS-Zone verwenden - und dass der Flowy-Verarbeitungsdienst bereits hinter einem Load Balancer verfügbar ist (siehe vorheriger Abschnitt). Die Anwendung kann entweder unter einer Subdomain wie host.example.com oder direkt auf der Root-Domain example.com bereitgestellt werden - verwenden Sie in den folgenden Schritten einfach den jeweils zutreffenden Domainnamen.
Durchführung
- Erstellen Sie einen S3-Bucket für das Anwendungs-Frontend.
- Gewähren Sie CloudFront Zugriff auf die Bucket-Inhalte. Dabei handelt es sich um zwei unterschiedliche Modelle - wählen Sie eines aus, mischen Sie sie nicht:
- Empfohlen - privater Bucket mit Origin Access Control (OAC): Block Public Access bleibt aktiviert und das statische Website-Hosting wird nicht aktiviert. CloudFront verbindet sich mit dem regulären S3-REST-Endpunkt; erstellen und verknüpfen Sie beim Hinzufügen der S3-Quelle zur CloudFront-Distribution (siehe unten) eine Origin Access Control und wenden Sie das generierte Statement auf die Bucket-Richtlinie an, damit nur die Distribution die Bucket-Inhalte lesen darf.
- Alternative - statischer S3-Website-Endpunkt: Aktivieren Sie das statische Website-Hosting auf dem Bucket und setzen Sie sowohl das Index-Dokument als auch das Fehlerdokument auf
index.html. Das Fehlerdokument stellt sicher, dass Anfragen für unbekannte Pfade weiterhin die Anwendung zurückliefern (allerdings mit dem HTTP-Status 404). Dieses Modell erfordert öffentlichen Lesezugriff, und CloudFront verbindet sich nur über HTTP mit dem S3-Website-Endpunkt.
- Laden Sie die Inhalte der Anwendung in den Bucket hoch. Dies kann entweder über Flowy (mittels der Upload-Funktion des Anwendungsobjekts) oder manuell erfolgen. Invalidieren Sie nach jeder Bereitstellung mindestens
/index.htmlin CloudFront, respektive/*, falls die Dateinamen nicht inhaltsbasiert gehasht sind. - Erstellen Sie eine CloudFront-Distribution:
- Fügen Sie zwei Quellen hinzu: den Load Balancer des Verarbeitungsdienstes (verwenden Sie unbedingt die URL des Verarbeitungs-Load-Balancers, wie z. B.
your-alb.region.elb.amazonaws.com) sowie den S3-Bucket. - Fügen Sie ein Verhalten mit dem Pfadmuster api/* hinzu, das auf die Load-Balancer-Quelle verweist, mit folgenden Einstellungen:
- Objekte automatisch komprimieren: Nein
- Viewer-Protokollrichtlinie: Redirect HTTP to HTTPS
- Erlaubte HTTP-Methoden: GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE
- Viewer-Zugriff einschränken: Nein
- Cache-Richtlinie: Erstellen und wählen Sie eine benutzerdefinierte Cache-Richtlinie, die das Caching vollständig deaktiviert (entspricht der verwalteten Richtlinie
CachingDisabled), z. B.myapp-caching-disabled - Origin-Request-Richtlinie: Erstellen und wählen Sie eine benutzerdefinierte Origin-Request-Richtlinie, die alle Viewer-Header, Cookies und Query-Strings an den Origin weiterleitet (entspricht der verwalteten Richtlinie
AllViewer), z. B.myapp-api
- Setzen Sie das Standardverhalten so, dass es auf die S3-Quelle verweist, mit folgenden Einstellungen:
- Viewer-Protokollrichtlinie: Redirect HTTP to HTTPS
- Setzen Sie das Standard-Stammobjekt auf
index.html.
- Fügen Sie zwei Quellen hinzu: den Load Balancer des Verarbeitungsdienstes (verwenden Sie unbedingt die URL des Verarbeitungs-Load-Balancers, wie z. B.
- Erstellen Sie einen IAM-Benutzer mit einem Access-Key-Paar, das für Bereitstellungen verwendet wird. Vergeben Sie eine Richtlinie nach dem Least-Privilege-Prinzip, die sowohl die Verwaltung der Bucket-Inhalte als auch die Aktualisierung des CDN abdeckt:
s3:ListBucketaufarn:aws:s3:::bucket-names3:GetObject,s3:PutObject,s3:DeleteObjectaufarn:aws:s3:::bucket-name/*(s3:GetObjectwird von vielen Deploy-/Sync-Tools für Vergleiche oder Metadatenprüfungen benötigt)cloudfront:CreateInvalidationauf die Distributions-ARN
- Erstellen Sie das SSL/TLS-Zertifikat im AWS Certificate Manager:
- Öffnen Sie AWS Certificate Manager / ACM.
- Wechseln Sie die AWS-Region zu US East (N. Virginia) / us-east-1. Dies ist für CloudFront erforderlich!
- Wählen Sie "Request certificate" (Zertifikat anfordern).
- Wählen Sie "Request a public certificate" (öffentliches Zertifikat anfordern).
- Fügen Sie den Domainnamen hinzu, den das Zertifikat abdecken soll:
host.example.comrespektiveexample.com. Optional können Sie auchwww.example.comhinzufügen (muss im selben Zertifikat wieexample.comenthalten sein). Beachten Sie, dass ein Platzhalterzertifikat für*.example.comhost.example.comabdeckt, jedoch nicht die Root-Domainexample.com- für den produktiven Einsatz der Root-Domain mussexample.comexplizit hinzugefügt werden. - Wählen Sie DNS-Validierung.
- Senden Sie die Anfrage ab.
- Öffnen Sie das ausstehende Zertifikat und wählen Sie "Create records in Route 53" (Datensätze in Route 53 erstellen).
- Bestätigen Sie die Hosted Zone und erstellen Sie die Validierungsdatensätze.
- Warten Sie, bis der Zertifikatsstatus "Issued" (ausgestellt) erreicht. Dies dauert in der Regel <= 5 Minuten.
- Öffnen Sie in CloudFront Ihre Distribution und fügen Sie die Domain unter "Alternate domain names / CNAMEs" (alternative Domainnamen) hinzu:
host.example.comrespektiveexample.com(und optionalwww.example.com). - Verknüpfen Sie das passende ACM-Zertifikat mit der CloudFront-Distribution. Wichtig: Für CloudFront muss sich das ACM-Zertifikat in us-east-1 / N. Virginia befinden.
- Warten Sie, bis der Status der CloudFront-Distribution "Deployed" (bereitgestellt) lautet.
- Öffnen Sie die Hosted Zone in Route 53.
- Wählen Sie "Create record" (Datensatz erstellen) und legen Sie fest:
- Datensatzname:
hostfür die Subdomain; für die Root-Domain lassen Sie das Feld leer oder setzen es aufexample.com, je nach Route-53-Oberfläche - Datensatztyp: A
- Alias: aktiviert
- Traffic weiterleiten an: Alias zur CloudFront-Distribution
- Distribution: Wählen Sie Ihre CloudFront-Domain, wie z. B. dxxxxx.cloudfront.net
- Zielintegrität auswerten: Nein
- Datensatzname:
- Erstellen Sie den Datensatz.
- Falls Sie die optionale Domain
www.example.comverwenden, erstellen Sie einen zusätzlichen Alias-Datensatz mit dem Datensatznamenwww, ansonsten mit denselben Einstellungen. Es reicht nicht,www.example.comdem Zertifikat und den alternativen Domainnamen von CloudFront hinzuzufügen - es benötigt einen eigenen Route-53-Alias-Datensatz. - Warten Sie etwa 10 Minuten. Auch bei einer kurzen TTL für Ihre Domain können DNS-Propagierung und die CloudFront-Bereitstellung noch einige Minuten in Anspruch nehmen.
- Überprüfen Sie die Einrichtung:
- Unter Windows mit PowerShell:
nslookup host.example.com curl.exe -I https://host.example.com - Auf anderen Betriebssystemen:
nslookup host.example.com curl -I https://host.example.com
- Unter Windows mit PowerShell:
- Fertig: Ihre Anwendung ist nun unter ihrer eigenen Domain verfügbar!

