Wie richte ich API Gateway mit meiner eigenen CloudFront-Distribution ein?

Lesedauer: 8 Minute
0

Ich möchte einen Edge-optimierten API-Endpunkt in Amazon API Gateway, benötige aber mehr Kontrolle über die Amazon CloudFront-Distribution. Wie erstelle und verwende ich meine eigene Distribution?

Kurzbeschreibung

Wenn Ihre API-Clients geografisch verteilt sind, sollten Sie erwägen, einen Edge-optimierten API-Endpunkt in API Gateway zu verwenden. Diese Art Endpunkt fungiert als regionaler Endpunkt mit einer von AWS verwalteten CloudFront-Webverteilung, um die Verbindungszeit der Kunden zu verbessern.

Um das globale CloudFront-Content Delivery Network zu nutzen und mehr Kontrolle über die Verteilung zu behalten, verwenden Sie eine Regionale API mit einer benutzerdefinierten CloudFront-Webverteilung.

Behebung

Erstellen Sie eine regionale API in API Gateway. Gehen Sie anschließend wie folgt vor:

Richten Sie eine GET-Methode für Ihre API ein

1.    Wählen Sie in der API Gateway-Konsole den Namen Ihrer neuen regionalen API aus.

2.    Wählen Sie im Bereich Ressourcen die Option Aktionen aus. Wählen Sie anschließend Methode erstellen aus. Unter dem Knoten /Ressourcen wird eine Liste angezeigt.

3.    Wählen Sie GET aus der Liste aus. Wählen Sie anschließend das Häkchensymbol aus.

4.    Wählen Sie in**/- GET - Einstellung** für Integrationstyp die Option Mock aus. Wählen Sie anschließend Speichern aus.
Hinweis: Eine Mock-Integration reagiert auf jede Anfrage, die sie erreicht, was beim Testen hilft.

Stellen Sie Ihre API bereit und identifizieren Sie die Aufruf-URL Ihrer API

1.    Stellen Sie Ihre API auf einer Stufe bereit.

2.    Kopieren Sie oben im Bereich Stage-Editor die Invoke-URL in Ihre Zwischenablage.

Beispiel für eine API Gateway-API zum Aufrufen einer URL

https://restApiId.execute-api.region.amazonaws.com/stageName.

Testen Sie Ihre API für eine Antwort von 200 OK

Um zu bestätigen, dass Ihre API die Antwort 200 OK zurückgibt, testen Sie die Aufruf-URL Ihrer API mit der API Gateway-Konsole, der Postman-App oder curl.

So testen Sie Ihre API mit curl auf eine Antwort vom Typ 200 OK

Führen Sie je nach Betriebssystem einen der folgenden Befehle aus:

**Hinweis:**Ersetzen Sie https://restApiId.execute-api.region.amazonaws.com/stageName durch die Aufruf-URL Ihrer API, bevor Sie einen der folgenden Befehle ausführen.

Verwenden Sie für Linux den folgenden Befehl:

curl -IX GET https://restApiId.execute-api.region.amazonaws.com/stageName

Führen Sie für Windows PowerShell den folgenden Befehl aus:

curl https://restApiId.execute-api.region.amazonaws.com/stageName

**Hinweis:**Wenn Sie einen anderen Statuscode als die Antwort 200 OK erhalten, überprüfen Sie Folgendes in der Konsole:
Ihre API wird auf Ihrer Stufe bereitgestellt.
Ihre Stufe ist in Ihrer Aufruf-URL angegeben.

Eine CloudFront-Webverteilung erstellen

1.    Wählen Sie in der CloudFront-Konsole Verteilung erstellen aus.

2.    Wählen Sie auf der Seite Auswahl einer Verteilungsmethode für Ihre Inhalte unter Web, die Option Erste Schritte aus.

3.    Fügen Sie auf der Seite Verteilung erstellen für Origin-Domainname die Aufruf-URL Ihrer API ein. Löschen Sie dann den Phasennamen.

Beispiel für einen Origin-Domainnamen

https://1a2bc3d456.execute-api.us-east-1.amazonaws.com

4.    Geben Sie für Ursprungspfad den Phasennamen Ihrer API mit einem Schrägstrich davor ein (/StufenName). Oder, wenn Sie den Stufennamen beim Aufrufen der URL selbst eingeben möchten, geben Sie keinen Ursprungspfad ein.
**Hinweis:**Wenn Sie beim Aufrufen der CloudFront-Verteilung einen falschen Stufennamen für den Ursprungspfad eingeben, wird manchmal ein Fehler angezeigt. Beispiel: Ein Fehler bei unautorisierten Anfragen führt zur Fehlermeldung „Missing Authentication Token“ und zum Fehlercode „403 Forbidden“.

5.    Für das Minimale Origin-SSL-Protokoll empfiehlt es sich, TLSv1.2 auszuwählen. Wählen Sie nicht SSLv3 aus. API Gateway unterstützt das SSLv3-Protokoll nicht.

6.    Wählen Sie für Origin-Protokoll-Richtlinie die Option Nur HTTPS aus.
**Hinweis:**API Gateway unterstützt keine unverschlüsselten Endpunkte (HTTP). Weitere Informationen finden Sie in den Häufig gestellten Fragen zu Amazon API Gateway.

7.    (Optional) Um dem Ursprung benutzerdefinierte Kopfzeilen zuzuordnen, geben Sie eine oder mehrere benutzerdefinierte Kopfzeilen für benutzerdefinierte Origin-Header ein.
Hinweis: Es gibt mehrere benutzerdefinierte Kopfzeilen, die CloudFront nicht an Ihren Ursprung weiterleiten kann.

8.    Folgen Sie gegebenenfalls den Anweisungen im Abschnitt Wenn Sie die IAM-Authentifizierung für Ihre API oder benutzerdefinierte Domainnamen für Ihren Vertrieb verwenden.

9.    (Optional) Konfigurieren Sie unter Verteilungseinstellungen alle zusätzlichen Einstellungen, die Sie anpassen möchten.

10.    Wählen Sie Verteilung erstellen aus.

11.    Warten Sie, bis Ihre Verteilung bereitgestellt wird. Dies dauert 15 bis 20 Minuten. Wenn der Status in der Konsole Bereitgestellt entspricht, ist die Verteilung bereit.

Weitere Informationen finden Sie unter Erstellen einer Verteilung.

So testen Sie Ihre CloudFront-Webverteilung

1.    Kopieren Sie in der CloudFront-Konsole den Domainnamen Ihrer Verteilung in Ihre Zwischenablage.

Beispiel für einen nicht benutzerdefinierten Domainnamen

a222222bcdefg5.cloudfront.net.

2.    Testen Sie den Domainnamen auf eine Antwort vom Typ 200 OK, indem Sie einen der zuvor im Abschnitt Testen Sie Ihre API genannten Befehle verwenden. Wenn Sie den Fehlercode 500 server error erhalten, wird die Verteilung möglicherweise nicht bereitgestellt. Wenn Sie keine Antwort erhalten, wurde der CloudFront-DNS-Eintrag noch nicht weitergegeben. Vergewissern Sie sich in beiden Fällen, dass seit der Erstellung Ihrer Verteilung 15 bis 20 Minuten vergangen sind. Versuchen Sie es anschließend erneut.

**Wichtig:**Wenn Sie die AWS Identity and Access Management-Authentifizierung (IAM) mit einer Methode für eine bestimmte API-Ressource aktiviert haben, müssen Sie den Ressourcennamen an das Ende des Domänennamens der Verteilung anhängen, wenn Sie Ihre API aufrufen. Die vollständige Aufruf-URL (einschließlich des Ressourcennamens) ähnelt einem der folgenden Beispiele. Die Ausgabe hängt davon ab, ob Sie bei der Erstellung der Verteilung einen Ursprungspfad eingegeben haben:

Beispiel für eine API Gateway API-Aufruf-URL mit Ursprungspfad

https://distributionDomainName/stageName/resourceName

Beispiel für eine API Gateway-API-Aufruf-URL ohne Ursprungspfad

https://distributionDomainName/resourceName

Weitere Informationen zum Testen finden Sie unter Wie aktiviere ich die IAM-Authentifizierung für API-Gateway-APIs?

Ihre API verwendet jetzt die Webverteilung, die Sie erstellt haben. Ressourcen sind über die API-CloudFront-URL zugänglich.

Wenn Sie die IAM-Authentifizierung für Ihre API oder benutzerdefinierte Domainnamen für Ihre CloudFront-Webverteilung verwenden

Standardmäßig leitet CloudFront eingehende Authorization-Header nicht an den Ursprung weiter (in diesem Anwendungsfall API Gateway). Wenn Sie die IAM-Authentifizierung für Ihre API oder benutzerdefinierte Domainnamen für Ihre Verteilung verwenden, müssen Sie einen der folgenden Schritte ausführen:

(Für die IAM-Authentifizierung) Fügen Sie den Authorization-Header zu Ihrer CloudFront-Zulassungsliste hinzu

1.    Falls dies nicht bereits abgeschlossen ist, folgen Sie den Schritten 1–7 im Abschnitt Erstellen einer CloudFront-Webverteilung in diesem Artikel.

2.    Wählen Sie auf der Seite Verteilung erstellen unter Cache- und Origin-Request-Einstellungen, Verwenden einer Cache- und einer Origin-Request-Richtlinie aus. Wählen Sie dann unter Cache-Richtlinie entweder eine vorhandene Cache-Richtlinie aus oder erstellen Sie eine neue Cache-Richtlinie, die den Authorization-Header zu Ihrer CloudFront-Zulassungsliste hinzufügt.

3.    Wenn Sie eine vorhandene Cache-Richtlinie verwenden, wählen Sie für Cache basierend auf ausgewählten Anforderungs-Headern die Option Whitelist aus. Fügen Sie dann für Whitelist-Header Authorization zur Liste der zulässigen Header hinzu.

Wichtig: Wenn Sie die Einstellung Cache basierend auf ausgewählten Anforderungsheadern auf Alle ändern. Sollten Sie den Host-Header zulassen, funktioniert Ihr Setup nicht. Weitere Informationen finden Sie unter Zwischenspeichern von Inhalten auf der Grundlage von Anforderungsheadern.

4.    (Optional) Gehen Sie wie folgt vor, um das Setup zu testen:
[Erstellen Sie programmgesteuert die erforderliche Signature Version 4-Signatur](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) für Ihren API Gateway-Endpunkt. Geben Sie für den Wert Host Ihre API Gateway-Aufruf-URL ein. Geben Sie für den Wert Endpoint Ihre CloudFront-Webverteilungs-URL ein.

Beispiel für eine URL zum Aufrufen eines API Gateways

<api-id>.execute.<region>.amazon.com

Beispiel für eine CloudFront-Webverteilungs-URL

dxxxxx.cloudfront.net

**Hinweis:**Wenn Sie die Postman-App verwenden, wählen Sie auf der Registerkarte Autorisierung für Typ die Option AWS Signature aus. Geben Sie dann den Zugriffsschlüssel und den Geheimschlüssel ein. Die erforderlichen Header werden von Postman anhand der von Ihnen eingegebenen Anmeldeinformationen generiert.

Senden Sie dann die API-Anfrage mithilfe des Authorization-Headers (und aller SignedHeaders), der aus dem Signature Version 4-Prozess generiert wurde, an die CloudFront-Verteilung.

(Für benutzerdefinierte Domainnamen oder IAM-Authentifizierung) Richten Sie in API Gateway einen regionalen, benutzerdefinierten Domainnamen ein, um auf Ihre API zuzugreifen

1.    Erstellen Sie eine neue regionale API in API Gateway oder ändern Sie Ihre Edge-optimierte API Gateway-API in eine regionale API.

2.    Richten Sie einen regionalen, benutzerdefinierten Domainnamen für die API ein und erstellen Sie ein API-Mapping für Ihre API.
**Hinweis:**Verwenden Sie diesen benutzerdefinierten Domainnamen, wenn Sie über CloudFront auf Ihre API zugreifen.

3.    Erstellen Sie eine CloudFront-Webverteilung, indem Sie den Anweisungen im Erstellen einer CloudFront-Webverteilung in diesem Artikel folgen, mit einer Ausnahme. Geben Sie in Schritt 3 für Origin-Domainname Ihren API Gateway-Domainnamen anstelle der Aufruf-URL Ihrer API ein.
Hinweis: Suchen Sie Ihren API Gateway-Zieldomänennamen in der Endpoint-Konfiguration Ihrer benutzerdefinierten Domaindetails.

Beispiel für einen API Gateway-Zieldomänennamen

d-xxxx..execute-api.<region>.amazonaws.com

4.    Wählen Sie auf der Seite Verteilung erstellen unter Cache- und Origin-Request-Einstellungen, Verwenden einer Cache- und einer Origin-Request-Richtlinie aus. Wählen Sie dann unter Cache-Richtlinie entweder eine vorhandene Cache-Richtlinie aus oder erstellen Sie eine neue Cache-Richtlinie, die den Header Authorization und Host zu Ihrer CloudFront-Zulassungsliste hinzufügt.

5.    Wenn Sie eine vorhandene Cache-Richtlinie verwenden, wählen Sie für Cache basierend auf ausgewählten Anforderungs-Headern die Option Whitelist aus. Fügen Sie dann für Whitelist-Header Autorisierung und Host zur Liste der zulässigen Header hinzu.

6.    Geben Sie unter Verteilungseinstellungen für Alternativer Domainnamen den benutzerdefinierten Domainnamen ein, den Sie erstellt haben.

7.    Wählen Sie für SSL-Zertifikat die Option Benutzerdefiniertes SSL-Zertifikat aus. Fügen Sie dann das ACM-Zertifikat (AWS Certificate Manager) für diese Domain hinzu.

  1. Nach der Bereitstellung der CloudFront-Webverteilung konfigurieren Sie den DNS-Eintrag, um die benutzerdefinierte Domain der CloudFront-Webverteilung zuzuordnen. Erstellen Sie hierfür entweder einen Alias oder einen CNAME-Datensatz. Weitere Informationen finden Sie unter Verwenden benutzerdefinierter URLs durch Hinzufügen alternativer Domainnamen (CNames).

9.    (Optional) Um das Setup zu testen, [erstellen Sie programmgesteuert eine signierte Signaturanfrage für Version 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) für Ihren benutzerdefinierten Domainnamen.
Hinweis: Die Postman-App kann verwendet werden, um das Setup zu testen.


Weitere Informationen

Initialisieren des REST-API-Setups im API Gateway

Auswahl eines Endpunkttyps, der für eine API-Gateway-API eingerichtet werden soll

Importieren einer Edge-optimierten API in API Gateway