Dokumentation: Flowy auf AWS mit EC2


Please support us to improve our service. We would like to use statistics anonymously.

We do not pass on your data! You can find more information in our privacy policy.

Decline

< Zurück zur Dokumentation

Beim Einsatz von Flowy auf AWS sind zwei unterschiedliche Szenarien zu unterscheiden:

  1. 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.
  2. 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

  1. Überlegen Sie sich eine Namenskonvention für die Hosts. Ein Vorschlag:
    • admin.example.com für das Admin-Frontend, das von den Benutzern verwendet wird, verweist auf CloudFront
    • admin.lb.example.com wird für den Admin-Load-Balancer verwendet
    • processing.lb.example.com wird für den Verarbeitungs-Load-Balancer verwendet
  2. Ermitteln und notieren Sie sich den für die VPC konfigurierten IP-Adressbereich

Durchführung

  1. 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.
  2. 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.
  3. 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?open in new window .
  4. Richten Sie öffentliche Zertifikate in N. Virginia (!) ein und schließen Sie die Validierung ab; dieses Zertifikat wird für CloudFront verwendet.
  5. 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.
  6. 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.
  7. 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)
  8. Erstellen Sie DNS-Einträge für beide Dienste und lassen Sie diese auf die Load Balancer verweisen.
  9. Ö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 CachingDisabled als Cache-Richtlinie respektive AllViewer als Origin-Request-Richtlinie konfiguriert ist.
  10. 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.
  11. Erstellen Sie einen DNS-Eintrag für Admin (und optional für Verarbeitung) und lassen Sie diesen auf CloudFront verweisen.
  12. 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

  1. Erstellen Sie einen S3-Bucket für das Anwendungs-Frontend.
  2. 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.
  3. 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.html in CloudFront, respektive /*, falls die Dateinamen nicht inhaltsbasiert gehasht sind.
  4. 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.
  5. 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:ListBucket auf arn:aws:s3:::bucket-name
    • s3:GetObject, s3:PutObject, s3:DeleteObject auf arn:aws:s3:::bucket-name/* (s3:GetObject wird von vielen Deploy-/Sync-Tools für Vergleiche oder Metadatenprüfungen benötigt)
    • cloudfront:CreateInvalidation auf die Distributions-ARN
  6. 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.com respektive example.com. Optional können Sie auch www.example.com hinzufügen (muss im selben Zertifikat wie example.com enthalten sein). Beachten Sie, dass ein Platzhalterzertifikat für *.example.comhost.example.com abdeckt, jedoch nicht die Root-Domain example.com - für den produktiven Einsatz der Root-Domain muss example.com explizit 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.
  7. Öffnen Sie in CloudFront Ihre Distribution und fügen Sie die Domain unter "Alternate domain names / CNAMEs" (alternative Domainnamen) hinzu: host.example.com respektive example.com (und optional www.example.com).
  8. 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.
  9. Warten Sie, bis der Status der CloudFront-Distribution "Deployed" (bereitgestellt) lautet.
  10. Öffnen Sie die Hosted Zone in Route 53.
  11. Wählen Sie "Create record" (Datensatz erstellen) und legen Sie fest:
    • Datensatzname: host für die Subdomain; für die Root-Domain lassen Sie das Feld leer oder setzen es auf example.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
  12. Erstellen Sie den Datensatz.
  13. Falls Sie die optionale Domain www.example.com verwenden, erstellen Sie einen zusätzlichen Alias-Datensatz mit dem Datensatznamen www, ansonsten mit denselben Einstellungen. Es reicht nicht, www.example.com dem Zertifikat und den alternativen Domainnamen von CloudFront hinzuzufügen - es benötigt einen eigenen Route-53-Alias-Datensatz.
  14. 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.
  15. Ü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
      
  16. Fertig: Ihre Anwendung ist nun unter ihrer eigenen Domain verfügbar!