Blog

Erstellen einer globalen App mit AWS Global Accelerator

Martijn van Dongen

Aktualisiert Oktober 21, 2025
5 Minuten

In diesem Blogbeitrag wird beschrieben, wie Sie den AWS Global Accelerator mit einem einfachen Service über zwei Regionen hinweg nutzen, der mit Terraform bereitgestellt wird. AWS Global Accelerator ist ein Netzwerkservice, der die Verfügbarkeit und Leistung der Anwendungen verbessert, die Sie Ihren globalen Benutzern anbieten. Den Quellcode finden Sie auf GitHub: Github.com/binxio/tf-global-accelerator Ich habe mich stark von dem folgenden Blogbeitrag von Adrian Hornsby inspirieren lassen: "Serverloses Backend mit mehreren Regionen". Es ist ein guter Blogbeitrag, aber er nimmt viel Zeit in Anspruch, da es sich nicht um "Infrastruktur als Code" handelt. Daher habe ich beschlossen, ein vollständiges Beispiel in Terraform zu erstellen. Medium.com Multi-region-serverless-backend-reloaded Mein Kollege Mark van Holsteijn arbeitet derzeit an einer benutzerdefinierten Ressource, die Unterstützung für den AWS Global Accelerator in CloudFormation bietet. Bleiben Sie auf unserem Blog dran.

Einführung

AWS Global Accelerator ist ein Netzwerkservice, der die Verfügbarkeit und Leistung der Anwendungen verbessert, die Sie Ihren globalen Benutzern anbieten. (Quelle: aws.amazon.com) Vorher:

Erstellen einer globalen App mit AWS Global Accelerator - Vorher

Nach:

Erstellen einer globalen App mit AWS Global Accelerator - Nach

Architektur

Ein Bild sagt mehr als tausend Worte. Hier ist also die Architektur der Lösung, die wir aufbauen.

Aufbau einer globalen App mit AWS Global Accelerator - Architektur

Die IP-Adressen des Global Accelerator sind "statische Anycast-IP-Adressen". Mein ISP hier in den Niederlanden leitet also den gesamten Datenverkehr an diese IP-Adresse sofort an das optimierte AWS-Netzwerk weiter. Wenn ich auf dieselbe IP zugreife und eine VPN-Verbindung von einem Standort in der Nähe der USA nutze, leitet der ISP dieses VPN den Datenverkehr an die us-amerikanische Region weiter. Wenn eine Region ausfällt, wird der gesamte Datenverkehr innerhalb von 1 Minute an die andere Region weitergeleitet. Sie können dies im Fehlerteil dieses Blogbeitrags testen. Spoiler: Der Failover funktioniert nur, wenn Sie den Global Accelerator richtig konfigurieren...

Projekt einrichten

Ich habe mein Projekt wie folgt strukturiert. Das von mir erstellte Modul ist für das Backend. In der main.tf sind die Module definiert, eines für eu-west-1 und eines für us-east-1. Die main.tf enthält:

  • Lokale Aktionen; wie das Zippen der Python-Datei
  • Globale Ressourcen; wie IAM-Rollen und -Richtlinien und die DynamoDB Global Table
  • Der Global Accelerator; das ga selbst und ein Zuhörer
  • Eine Ausgabe der IP-Adressen des Global Accelerator
  • Und die beiden Backend-Module, für eu-west-1 und us-east-1. Das Projekt ist eingerichtet:

    ├── backend
    │   ├── alb.tf
    │   ├── dynamodb.tf
    │   ├── ga_endpoint_group.tf
    │   ├── lambda.tf
    │   └── variables.tf
    ├── lambda
    │   ├── lambda.py
    ├── main.tf
    ├── provider.tf
    

    Verwenden Sie die folgenden Befehle, um den Stack zu initialisieren, zu planen und einzusetzen:

    terraform init
    terraform plan
    terraform apply -auto-approve
    

    Wichtig: Ändern Sie keine Regionen in der provider.tf, wenn Ihr Stack bereitgestellt wird. Sie können den Stack dann nicht mehr aktualisieren oder zerstören.

    Nutzen Sie den Service

    Ich habe einen Kurzurl-Dienst erstellt. Für diese Demo habe ich den Code sehr einfach und nicht narrensicher gehalten. Mit Ihrem Browser können Sie eine neue Kurzurl erzeugen: http://ip/create/?url=https://binx.io Es wird die Kurzurl angezeigt, die eine Weiterleitung zu der von Ihnen erstellten Url zurückgibt. Jetzt müssen Sie nur noch einen kurzen Domainnamen kaufen und ihn auf die IP-Adressen des Global Accelerator verweisen.

    Failover-Tests

    Ich habe die Ausfallsicherung ein paar Mal getestet. Bevor ich den in der Einleitung erwähnten Blogbeitrag von Adrian gefunden habe, habe ich zwei Fargate-Container erstellt. Es ist schwierig, die Ausfallsicherung mit Fargate zu testen, denn wenn die ALB-Zustandsprüfung fehlschlägt, stellt AWS den Fargate-Container wieder her. Daher bin ich auf ein Lambda-Backend umgestiegen, um dieses Problem zu vermeiden.

    resource "aws_globalaccelerator_endpoint_group" "ga" {
    listener_arn = var.ga_listener
    health_check_interval_seconds = 10
    health_check_path = "/health"
    health_check_protocol = "HTTP"
    threshold_count = 2
    
    endpoint_configuration {
    endpoint_id = aws_alb.alb.arn
    weight      = 100
    }
    }
    

    Ich habe auch herausgefunden, dass die Gewichtung endpoint_configuration und alle Health Checks auf dem AWS Global Accelerator erforderlich sind, um eine Failover-Funktionalität zu bieten. Andernfalls funktioniert die Ausfallsicherung nicht. Wenn Sie den Stack bereitgestellt haben, können Sie die Ausfallsicherung testen, indem Sie die Umgebungsvariable status=200 zum Beispiel auf status=500 aktualisieren. Sie sollten dies manuell und nicht in Terraform tun. Wenn Sie Terraform verwenden, werden alle Backends aktualisiert, so dass es keine gesunden Endpunkte geben wird.

    1. Sehen Sie auf der Seite: /Gesundheit Ihres GA, um herauszufinden, in welcher Region Sie sich befinden
    2. Erstellen Sie eine neue Kurzurl und notieren Sie die erzeugte Kurzurl
    3. Aktualisieren Sie die Lambda-Umgebungsvariable der Lambda-Funktion in dieser Region
    4. Aktualisieren Sie die Seite ein paar Mal, bis sie auf die andere Region umgeschaltet hat.
    5. Testen Sie die Kurzurl, sie sollte auf die andere Region übertragen werden . Wenn Sie mit dem Testen fertig sind:
    terraform destroy -auto-approve
    

    Fazit

    Als ich mit diesem Projekt begann, habe ich in der CloudFormation-Dokumentation nachgesehen und festgestellt, dass es noch keine Unterstützung für den AWS Global Accelerator gibt. Ich hatte zwei Möglichkeiten: benutzerdefinierte Ressourcen erstellen oder Terraform verwenden. Da die Bereitstellung in mehreren Regionen erfolgen muss, dachte ich, Terraform sei eine gute Wahl. Nach ein paar Stunden musste ich feststellen, dass die Ressource aws_globalaccelerator_endpoint_group noch nicht verfügbar war. Bevor ich also wieder ein solches Projekt beginne, prüfe ich zunächst, ob alle Ressourcen verfügbar sind.Vor einigen Wochen wurde die Ressource verfügbar, so dass ich das Projekt und diesen Blogbeitrag fertigstellen konnte. Nach diesem Blogbeitrag erstellte Mark einen benutzerdefinierten CloudFormation-Anbieter für Global Accelerator.

Verfasst von

Martijn van Dongen

Contact

Let’s discuss how we can support your journey.