Ich habe eine Lambda-Funktion in allen AWS-Regionen. Ich habe Kunden auf der ganzen Welt, die einen POST-Anruf an meine Basis-Domain example.com
machen. Es liegt in der Verantwortung meines Lastenverteilers, sicherzustellen, dass die Anforderungen an das API-Gateway der Region weitergeleitet werden, die dem Client am nächsten ist, um die Latenz zu minimieren.Routing zum API-Gateway mit AWS Route 53
So weit habe ich die folgende Konfiguration:
- Lambda-Funktionen in jeder Region eingesetzt
- Benutzerdefinierte Domain-Name für jede des API-Gateways, die eine Cloudfront Domain-Namen macht. Zum Beispiel hat N.California Region benutzerdefinierten Domänennamen
us-west-1.example.com
konfiguriert und eine Zuordnung des Pfades, der mein Lambda aufruft. Die CloudFront-URL für dieses API-Gateway istd12345123.cloudfront.net
- Ein RecordSet vom Typ
A
in der gehosteten Route53-Zone fürus-west-1.example.com
, das ein Alias vond12345123.cloufront.net
ist. Wenn ich einen POST-Anruf anus-west-1.example.com/1.0/localdb
mache, gibt es mir die korrekte Ausgabe zurück. - Eine Verkehrsrichtlinie in Route53 und ein Richtliniensatz für
default.example.com
vom TypA
, dem eine Georeichungsregel zugewiesen ist, die den Datenverkehr an die CloudFront-Instanz umleitet (dieselbe Instanz, die nach dem Hinzufügen der benutzerdefinierten Domäne verfügbar gemacht wird) Name in dieser Region) der Region. Dies erzeugt einen Eintrag fürdefault.example.com
in der gehosteten Zone des TypsA
- A RecordSet vom Typ
A
im Route53 gehosteten Zone fürexample.com
die ein Alias fürdefault.example.com
ist, so dass der Verkehr, der zuexample.com
kommt, kann zudefault.example.com
geroutet
nach diesen Konfigurationen, wenn ich einen Anruf zu example.com
machen, erhalte ich eine 403
Antwort von Cloudfront, es einen Bad Request
Dank Aufruf
Mögliches Duplikat von [DNS-basierte URL-Weiterleitung in Amazon Route53 einrichten] (https://stackoverflow.com/questions/10115799/set-up-dns-based-url-forwarding-in-amazon-route53) – vascop
Sie finden eine Lücke zwischen dem, was Sie bisher erreicht haben, und dem, was Sie bisher erreicht haben. Dein 'default.example.com' wird nicht das tun, was du erwartest. Es hilft also nicht, deine Fragen zu beantworten. Das Aufrufen von Lambda-Funktionen bedeutet in der Regel die Verwendung von API Gateway, und es reicht nicht aus, unterschiedliche CNAME-Datensätze auf unterschiedliche API Gateway-Implementierungen in verschiedenen Regionen zu verweisen. Für einen bestimmten Hostnamen können Sie API Gateway nur so konfigurieren, dass dieser Hostname in * one * -Region erwartet wird. Bitte geben Sie weitere Details darüber an, was Sie tatsächlich erreichen möchten und welche spezifische Konfiguration Sie haben. –
Wenn ein Browser eine HTTP-Anfrage erstellt, setzt er den Host-Header auf den Hostnamen in der URL in der Adressleiste. Unabhängig von den dazwischen liegenden DNS-Auflösungsschritten ist der * ursprüngliche * Hostname das, was das Ziel sieht. Das ist das grundlegende Problem, dem Sie gegenüberstehen. Derzeit gibt es keine native, verwaltete und serverlose AWS-Lösung hierfür. Es erfordert regionale Proxy-Server, um diese Host-Header neu zu schreiben oder an die regionalen Hostnamen umzuleiten, oder ... wenn Ihre APIs immer <3 Sekunden für die Verarbeitung von Anfragen benötigen, dann gibt es eine mögliche Lösung in Lambda @ Edge. –