Aus der Sicht der Verbindung muss "etwas" Ihre Anfragen beantworten (GET, POST, PUT, alles). Zunächst haben Sie eine TCP-Verbindung und "etwas" muss sicherstellen, dass es Schicht 7 versteht und aus den vom Client gesendeten Bytes einen Sinn ergibt. Nur zu diesem Zeitpunkt ist es möglich, GET-Anforderungen anders als POST-Anforderungen oder eine URL als eine andere URL zu behandeln. Am Ende benötigen Sie also einen Dienst, der HTTP verstehen und weiterleiten kann. Die folgenden Dienste können dies tun: CloudFront ELB / ALB API Gateway (Einschränkung kommt später)
API Gateway verwendet CloudFront intern (ohne dass Sie die Möglichkeit haben, tatsächlich etwas auf CloudFront-Ebene zu konfigurieren). Dies bedeutet, dass CloudFront und API Gateway nicht nebeneinander ausgeführt werden können, da dies letztendlich bedeuten würde, dass Sie CloudFront mit CloudFront ausführen Seite an Seite.
CloudFront bietet Ihnen die Möglichkeit, verschiedene Ursprünge basierend auf Mustern auszuwählen. Sie können jedoch nur S3 oder ELB / ALBs als Ursprung auswählen - keine Lambda-Funktionen (neben der Lambda @ Edge-Funktionalität).
ALB / ELB kann nur EC2-Instanzen als Backend verwenden - hier kein Lambda oder S3.
Die einzigen Möglichkeiten, die ich mir vorstellen kann, um das zu tun, was Sie tun möchten, sind folgende:
- Sie verwenden API Gateway und leiten einen bestimmten "Asset" -Pfad an eine Lambda-Funktion weiter, die eine Art Reverse-Proxy für S3 ausführt (also die statischen Assets durch Lambda leiten). Beachten Sie hier die Kosten für Lambda!
- Sie können das Gleiche tun, aber anstatt das Asset über Lambda zu leiten, generieren Sie einfach eine signierte URL in Lambda und leiten Sie es direkt an S3 weiter, um es zu bedienen (möglicherweise kostengünstiger).
- Verwenden anderer Subdomänen für Ihre Assets als der Rest Ihrer Anwendung - dies ist ein sehr häufiges Muster, da Sie auf DNS-Ebene problemlos aufteilen und verschiedene Dienste für die verschiedenen Anwendungsfälle verwenden können (CloudFront für Assets und API Gateway für nicht statische Anwendungen) Teile)
Mein Anruf wäre also die letzte Option - aber das bedeutet, dass Sie die Clients / Browser für alle statischen Assets (oder für alle POST-Anforderungen) auf eine separate Subdomain verweisen müssen.
Es hört sich so an, als ob Sie sich Technologien wie AngularJS oder React ansehen möchten, um eine wirklich API-gesteuerte Anwendung im Browser zu erstellen. Mit diesem Ansatz führen Sie eine echte API aus, die alle "dynamischen" Anforderungen mit einem API-Gateway verarbeitet und die Anwendung selbst aus S3 als statisches Asset bereitstellt. Vielleicht hilft Ihnen ein Blick auf diese, Ihren Weg zu finden - auch wenn Sie sie nicht verwenden, ist das architektonische Muster, wie man solche Dinge baut, das, wonach Sie imho fragen.