Verwenden von verschiedenen Ursprüngen mit CloudFront-Verteilungen - Amazon CloudFront

Verwenden von verschiedenen Ursprüngen mit CloudFront-Verteilungen

Wenn Sie eine Verteilung erstellen, geben Sie den Ursprung an, an den CloudFront Anforderungen für die Dateien sendet. Mit CloudFront können Sie verschiedene Ursprünge verwenden. Beispielsweise können Sie einen Amazon-S3-Bucket, einen MediaStore-Container, einen MediaPackage-Kanal, einen Application Load Balancer oder eine AWS Lambda-Funktions-URL verwenden.

Verwenden eines Amazon S3-Buckets

In den folgenden Themen werden die verschiedenen Möglichkeiten beschrieben, wie Sie einen Amazon-S3-Bucket als Ursprung für eine CloudFront-Verteilung verwenden können.

Verwenden eines standardmäßigen Amazon-S3-Buckets

Wenn Sie Amazon S3 als Ursprung für Ihre Verteilung verwenden, platzieren Sie die Objekte, die CloudFront bereitstellen soll, in einem Amazon-S3-Bucket. Sie können alle von Amazon S3 unterstützten Methoden zum Bereitstellen Ihrer Objekte in Amazon S3 verwenden. Sie können beispielsweise die Amazon-S3-Konsole oder -API oder ein Drittanbieter-Tool verwenden. Sie können in Ihrem Bucket wie für jeden anderen standardmäßigen Amazon-S3-Bucket eine Hierarchie zum Speichern der Objekte erstellen.

Wenn Sie einen vorhandenen Amazon S3-Bucket als Ihren CloudFront-Ursprungs-Server verwenden, wird der Bucket hierdurch nicht verändert. Sie können den Bucket weiter verwenden, um Amazon S3-Objekte zu Amazon S3-Standardtarifen zu speichern und auf sie zuzugreifen. Es fallen die regulären Amazon S3-Gebühren für die Speicherung der Objekte im Bucket an. Weitere Informationen zu den Gebühren für die Nutzung von CloudFront finden Sie unter Amazon-CloudFront-Preise. Weitere Informationen zur Verwendung von CloudFront mit einem vorhandenen S3-Bucket finden Sie unter Hinzufügen von CloudFront zu einem vorhandenen Amazon-S3-Bucket.

Wichtig

Der Name muss den Anforderungen für DNS-Namen entsprechen, damit CloudFront den Bucket verwenden kann. Weitere Informationen finden Sie unter Benennungsregeln für Buckets im Benutzerhandbuch zu Amazon Simple Storage Service.

Wenn Sie einen Amazon-S3-Bucket als Ursprung für CloudFront angeben, empfehlen wir, folgendes Format zu verwenden:

bucket-name.s3.region.amazonaws.com

Wenn Sie den Bucket-Namen in diesem Format angeben, können Sie die folgenden CloudFront-Funktionen verwenden:

Verwenden Sie für die Angabe des Buckets nicht die folgenden Formate:

  • Den Amazon-S3-Pfadstil: s3.amazonaws.com/bucket-name

  • Den Amazon-S3-CNAME

Verwenden eines Amazon-S3-Buckets, der als Website-Endpunkt konfiguriert ist

Sie können einen als Website-Endpunkt konfigurierten Amazon-S3-Bucket als benutzerdefinierten Ursprung mit CloudFront verwenden. Geben Sie beim Konfigurieren Ihrer CloudFront-Verteilung als Ursprung den Hosting-Endpunkt in Amazon S3 für die statische Website für Ihren Bucket an. Dieser Wert wird in der Amazon-S3-Konsole auf der Registerkarte Properties (Eigenschaften) im Bereich Static Website Hosting (Hosten statischer Websites) angezeigt. Beispiel:

http://bucket-name.s3-website-region.amazonaws.com

Weitere Informationen zur Angabe von Amazon-S3-Endpunkten für statische Websites finden Sie unter Website-Endpunkte im Benutzerhandbuch zu Amazon Simple Storage Service.

Wenn Sie den Bucket-Namen in diesem Format als Ursprung angeben, können Sie Amazon S3-Umleitungen und benutzerdefinierte Amazon S3-Fehlerdokumente verwenden. Weitere Informationen erhalten Sie unter Konfigurieren eines benutzerdefinierten Fehlerdokuments und unter Konfigurieren einer Umleitung im Benutzerhandbuch zu Amazon Simple Storage Service. (CloudFront stellt auch benutzerdefinierte Fehlerseiten bereit. Weitere Informationen finden Sie unter Erstellen einer benutzerdefinierten Fehlerseite für bestimmte HTTP-Statuscodes.)

Wenn Sie einen Amazon-S3-Bucket als CloudFront-Ursprungsserver verwenden, wird der Bucket in keiner Weise geändert. Sie können ihn weiter wie normal zu den regulären Amazon S3-Gebühren verwenden. Weitere Informationen zu den Gebühren für die Nutzung von CloudFront finden Sie unter Amazon-CloudFront-Preise.

Anmerkung

Wenn Sie die CloudFront-API verwenden, um eine Verteilung mit einem als Website-Endpunkt konfigurierten Amazon S3-Bucket zu erstellen, müssen Sie diesen unter Verwendung von CustomOriginConfig konfigurieren, auch wenn die Website in einem Amazon S3-Bucket gehostet wird. Weitere Informationen zum Erstellen von Verteilungen über die CloudFront-API finden Sie unter CreateDistribution in der Amazon CloudFront-API-Referenz.

Hinzufügen von CloudFront zu einem vorhandenen Amazon-S3-Bucket

Wenn Sie Ihre Objekte in einem Amazon S3-Bucket speichern, können Ihre Benutzer diese Objekte direkt von S3 erhalten, oder Sie können CloudFront so konfigurieren, dass Ihre Objekte von S3 übertragen und anschließend an die Benutzer verteilt werden. Die Verwendung von CloudFront kann kostengünstiger sein, wenn Ihre Benutzer häufig auf Ihre Objekte zugreifen; bei einer hohen Nutzung ist der Preis für die Datenübertragung durch CloudFront geringer als der Preis für die Datenübertragung durch Amazon S3. Darüber hinaus sind die Downloads mit CloudFront schneller als mit Amazon S3 allein, da Ihre Objekte an Standorten gespeichert sind, die sich näher an Ihren Benutzern befinden.

Anmerkung

Wenn Sie möchten, dass CloudFront die Einstellungen für die ursprungsübergreifende Ressourcenfreigabe von Amazon S3 berücksichtigt, konfigurieren Sie CloudFront so, dass der Origin-Header an Amazon S3 weitergeleitet wird. Weitere Informationen finden Sie unter Zwischenspeichern von Inhalten auf der Grundlage von Anfrage-Headern.

Wenn Sie derzeit Inhalte direkt von Ihrem Amazon S3-Bucket verteilen und einen eigenen Domänennamen (z. B. example.com) anstelle des Domänennamens des Amazon S3-Buckets (z. B. DOC-EXAMPLE-BUCKET.s3.us-west-2.amazonaws.com) verwenden, können Sie CloudFront ohne Unterbrechung des Betriebs hinzufügen, indem Sie die folgenden Schritte ausführen.

So fügen Sie CloudFront hinzu, wenn Sie Ihre Inhalte bereits über Amazon S3 verteilen:

  1. Erstellen Sie eine CloudFront-Verteilung. Weitere Informationen finden Sie unter Schritte zum Erstellen einer Verteilung (Übersicht).

    Wenn Sie die Verteilung erstellen, geben Sie den Namen Ihres Amazon S3-Buckets als Ursprungs-Server an.

    Wichtig

    Der Name muss den Anforderungen für DNS-Namen entsprechen, damit CloudFront den Bucket verwenden kann. Weitere Informationen finden Sie unter Benennungsregeln für Buckets im Benutzerhandbuch zu Amazon Simple Storage Service.

    Wenn Sie einen CNAME mit Amazon S3 verwenden, geben Sie den CNAME für Ihre Verteilung ebenfalls an.

  2. Erstellen Sie eine Testwebseite mit Links, die auf öffentlich verfügbare Objekte in Ihrem Amazon S3-Bucket verweisen, und testen Sie diese Links. Verwenden Sie bei diesem ersten Test den CloudFront-Domänennamen Ihrer Verteilung in den Objekt-URLs, z. B, https://d111111abcdef8.cloudfront.net/images/image.jpg.

    Weitere Informationen zum Format von CloudFront-URLs finden Sie unter Anpassen des URL-Formats für Dateien in CloudFront.

  3. Wenn Sie Amazon-S3-CNAMEs verwenden, verweist Ihre Anwendung mit dem Domänennamen (z. B. example.com) auf die Objekte in Ihrem Amazon-S3-Bucket, anstatt den Namen des Buckets (z. B. DOC-EXAMPLE-BUCKET.s3.amazonaws.com) zu verwenden. Wenn Sie Ihren Domänennamen weiterhin zum Verweis auf Objekte verwenden möchten, anstatt der CloudFront-Domänennamen für Ihre Verteilung zu verwenden (z. B. d111111abcdef8.cloudfront.net), müssen Sie die Einstellungen bei Ihrem DNS-Serviceanbieter aktualisieren.

    Damit Amazon S3-CNAMEs korrekt funktionieren, muss Ihr DNS-Serviceanbieter über einen CNAME-Ressourcendatensatz für Ihre Domäne verfügen, der Abfragen für die Domäne an Ihren Amazon S3-Bucket weiterleitet. Wenn ein Benutzer z. B. dieses Objekt anfordert:

    https://example.com/images/image.jpg

    Die Anfrage wird automatisch umgeleitet und dem Benutzer wird dieses Objekt angezeigt:

    https://DOC-EXAMPLE-BUCKET.s3.amazonaws.com/images/image.jpg

    Um Abfragen an Ihre CloudFront-Verteilung und nicht an Ihren Amazon S3-Bucket weiterzuleiten, müssen Sie die Methode zum Aktualisieren des CNAME-Ressourcendatensatzes für Ihre Domäne verwenden, die von Ihrem DNS-Serviceanbieter bereitgestellt wird. Dieser aktualisierte CNAME-Datensatz leitet DNS-Abfragen von Ihrer Domäne an den CloudFront-Domänennamen für Ihre Verteilung weiter. Weitere Informationen finden Sie in der Dokumentation Ihres DNS-Serviceanbieters.

    Anmerkung

    Wenn Sie Route 53 als DNS-Service verwenden, können Sie entweder einen CNAME-Ressourcendatensatz oder einen Alias-Ressourcendatensatz verwenden. Informationen zum Bearbeiten von Ressourceneintragssätzen finden Sie unter Bearbeiten von Datensätzen. Informationen zu Alias-Ressourceneintragssätzen finden Sie unter Wählen zwischen Alias- und Nicht-Alias-Datensätzen. Beide Themen finden Sie im Amazon Route 53-Entwicklerhandbuch.

    Weitere Informationen zum Verwenden von CNAMEs mit CloudFront finden Sie unter Verwenden von benutzerdefinierten URLs durch Hinzufügen von alternativne Domänennamen (CNAMEs).

    Wenn Sie den CNAME-Ressourcendatensatz aktualisiert haben, kann es bis zu 72 Stunden dauern, bis die Änderungen im gesamten DNS-System übernommen werden, auch wenn das in der Regel schneller geschieht. Während dieser Zeit werden manche Anfragen für Ihre Inhalte weiterhin an Ihren Amazon S3-Bucket weitergeleitet, während andere schon an CloudFront weitergeleitet werden.

Verschieben eines Amazon-S3-Buckets in eine andere AWS-Region

Wenn Sie Amazon S3 als Ursprung für eine CloudFront-Verteilung verwenden und den Bucket in eine andere AWS-Region verschieben, kann es bis zu einer Stunde dauern, bis die CloudFront-Datensätze aktualisiert werden und die neue Region verwendet wird. Es müssen die beiden folgenden Bedingungen erfüllt sein:

  • Sie verwenden eine CloudFront-Ursprungszugriffsidentität (Origin Access Identity, OAI), um den Zugriff auf den Bucket zu beschränken.

  • Sie verschieben den Bucket in eine Amazon S3-Region, die Signature Version 4 für die Authentifizierung erfordert.

Wenn Sie OAIs verwenden, verwendet CloudFront die Region (und andere Werte) zum Berechnen der Signatur für die Anfrage nach Objekten in Ihrem Bucket. Weitere Informationen über OAIs finden Sie unter Verwenden einer Ursprungszugriffsidentität (Legacy, nicht empfohlen). Eine Liste der AWS-Regionen, die Signature Version 2 unterstützen, finden Sie unter Signaturprozess mit Signature Version 2 in der allgemeinen Referenz zu Amazon Web Services.

Sie können eine schnellere Aktualisierung auf CloudFront-Datensätze erzwingen, indem Sie Ihre CloudFront-Verteilung aktualisieren. Aktualisieren Sie dazu z. B. das Feld Description (Beschreibung) auf der Registerkarte General (Allgemein) in der CloudFront-Konsole. Wenn Sie eine Verteilung aktualisieren, überprüft CloudFront sofort die Region, in der sich Ihr Bucket befindet. Das Übertragen der Änderung auf alle Edge-Standorte sollte nur wenige Minuten in Anspruch nehmen.

Verwenden eines MediaStore-Containers oder MediaPackage-Kanals

Für das Streaming von Videos über CloudFront können Sie einen als MediaStore-Container konfigurierten Amazon-S3-Bucket einrichten oder mit MediaPackage einen Kanal und Endpunkte erstellen. Anschließend erstellen und konfigurieren Sie eine Verteilung in CloudFront, um das Video zu streamen.

Weitere Informationen und Schritt-für-Schritt-Anweisungen finden Sie in den folgenden Themen:

Verwendung eines Application Load Balancers

Wenn es sich bei Ihrem Ursprung um einen oder mehrere auf einer oder mehreren Amazon-EC2-Instances gehosteten HTTP-Server (Webserver) handelt, können Sie einen Application Load Balancer verwenden, um den Datenverkehr an die Instances zu verteilen. Weitere Informationen zur Verwendung eines Application Load Balancers als Ursprung für CloudFront – einschließlich Informationen dazu, wie Sie sicherstellen können, dass Viewer nur über CloudFront und nicht über den Direktzugriff auf den Load Balancer auf Ihre Webserver zugreifen können – finden Sie unter Beschränken des Zugriffs auf Application Load Balancer.

Verwenden einer Lambda-Funktions-URL

Eine Lambda-Funktions-URL ist ein dedizierter HTTPS-Endpunkt für eine AWS Lambda-Funktion. Sie können eine Lambda-Funktions-URL verwenden, um eine Serverless-Webanwendung vollständig in AWS Lambda zu entwickeln. Sie können die Lambda-Webanwendung direkt über die Funktions-URL aufrufen, ohne dass eine Integration in API Gateway oder einen Application Load Balancer erforderlich ist.

Wenn Sie eine Serverless-Webanwendung mithilfe von Lambda-Funktionen mit Funktions-URLs erstellen, können Sie CloudFront hinzufügen, um von folgenden Vorteile zu profitieren:

  • Beschleunigen Ihrer Anwendung, indem Sie Inhalte näher an den Viewern zwischenspeichern

  • Verwenden eines benutzerdefinierten Domänennamens für Ihre Webanwendung

  • Weiterleiten verschiedener URL-Pfade an verschiedene Lambda-Funktionen mithilfe des CloudFront-Cache-Verhaltens

  • Blockieren spezifischer Anforderungen mit geografischen Beschränkungen von CloudFront oder AWS WAF (oder beidem)

  • Verwenden von AWS WAF mit CloudFront, um Ihre Anwendung vor bösartigen Bots zu schützen, allgemeine Anwendungsexploits zu verhindern und den Schutz vor DDoS-Angriffen zu verbessern

Um eine Lambda-Funktions-URL als Ursprung für eine CloudFront-Distribution zu verwenden, geben Sie den vollständigen Domänennamen der Lambda-Funktions-URL als Ursprungsdomäne an. Ein Domänenname der Lambda-Funktions-URL weist das folgende Format auf:

function-URL-ID.lambda-url.AWS-Region.on.aws

Wenn Sie eine Lambda-Funktions-URL als Ursprung für eine CloudFront-Distribution verwenden, müssen Sie sicherstellen, dass die Funktions-URL öffentlich zugänglich ist. Legen Sie dafür den Parameter AuthType der Funktions-URL auf NONE fest und erteilen Sie die Berechtigung lambda:InvokeFunctionUrl in einer ressourcenbasierten Richtlinie. Weitere Informationen finden Sie unter Verwendung des AuthType NONE im Entwicklerhandbuch zu AWS Lambda. Sie können jedoch auch den Anforderungen, die CloudFront sendet, einen benutzerdefinierten Ursprungs-Header hinzufügen und Funktionscode schreiben, um eine Fehlerantwort zurückzugeben, wenn der Header nicht in der Anforderung vorhanden ist. So stellen Sie sicher, dass Benutzer nur über CloudFront und nicht direkt über die Lambda-Funktions-URL auf Ihre Webanwendung zugreifen können.

Weitere Informationen zu Lambda-Funktions-URLs finden Sie in den folgenden Themen im Entwicklerhandbuch zu AWS Lambda:

Verwenden von Amazon EC2 (oder anderen benutzerdefinierten Ursprüngen)

Bei einem benutzerdefinierten Ursprung handelt es sich um einen HTTP-Server, z. B. einen Webserver. Der HTTP-Server kann eine Amazon-EC2-Instance oder ein HTTP-Server sein, die/der anderswo gehostet wird. Ein als Website-Endpunkt konfigurierter Amazon S3-Ursprung gilt ebenfalls als benutzerdefinierter Ursprung.

Wenn Sie Ihren eigenen HTTP-Server als benutzerdefinierten Ursprung verwenden, geben Sie den DNS-Namen des Servers zusammen mit den HTTP- und HTTPS-Ports und dem Protokoll an, das CloudFront zum Abrufen von Objekten von Ihrem Ursprung verwenden soll.

Die meisten CloudFront-Funktionen werden unterstützt, wenn Sie einen benutzerdefinierten Ursprung verwenden. Ausgenommen sind private Inhalte. Auch wenn Sie zum Verteilen von Inhalten von einem benutzerdefinierten Ursprung eine signierte URL verwenden können, muss der Ursprung öffentlich zugänglich bleiben, damit CloudFront auf den benutzerdefinierten Ursprung zugreifen kann. Weitere Informationen finden Sie unter Bereitstellen privater Inhalte mit signierten URLs und signierten Cookies.

Befolgen Sie diese Richtlinien für die Verwendung von Amazon EC2-Instances und anderen benutzerdefinierten Ursprüngen mit CloudFront.

  • Sie müssen auf allen Servern, die Inhalte für denselben CloudFront-Ursprung bereitstellen, die gleichen Inhalte hosten und bereitstellen. Weitere Informationen finden Sie unter Ursprungseinstellungen im Thema Werte, die Sie beim Erstellen oder Aktualisieren einer Verteilung angeben.

  • Protokollieren Sie die Einträge zum X-Amz-Cf-Id-Header auf allen Servern, falls AWS Support oder CloudFront diesen Wert zum Debuggen benötigen.

  • Beschränken Sie Anforderungen von HTTP- und HTTPS-Ports, die Ihr benutzerdefinierter Ursprung überwacht.

  • Synchronisieren Sie die Uhrzeit von allen Servern in der Implementierung. Beachten Sie, dass CloudFront UTC (Coordinated Universal Time) für signierte URLs und signierte Cookies, für Protokolle und für Berichte verwendet. Wenn Sie CloudFront-Aktivitäten mithilfe von CloudWatch-Metriken überwachen, sollten Sie beachten, dass CloudWatch ebenfalls UTC verwendet.

  • Verwenden Sie redundante Server für die Behandlung von Ausfällen.

  • Informationen zur Verwendung eines benutzerdefinierten Ursprungs für die Bereitstellung privater Inhalte finden Sie unter Beschränken des Zugriffs auf Dateien auf benutzerdefinierten Ursprungsservern.

  • Informationen zu Anfrage- und Antwortverhalten sowie zu unterstützten HTTP-Statuscodes finden Sie unter Verhalten von Anfragen und Antworten.

Wenn Sie für einen benutzerdefinierten Ursprung Amazon EC2 verwenden, sollten Sie wie folgt vorgehen:

  • Verwenden Sie ein Amazon Machine Image, das die Software für einen Webserver automatisch installiert. Weitere Informationen finden Sie in der Amazon EC2-Dokumentation.

  • Verwenden Sie einen Elastic Load Balancing-Load Balancer, um Datenverkehr über mehrere Amazon EC2-Instances hinweg zu verarbeiten und Ihre Anwendung von Änderungen an Amazon EC2-Instances zu isolieren. Wenn Sie einen Load Balancer verwenden, können Sie beispielsweise Amazon EC2-Instances hinzufügen und löschen, ohne die Anwendung zu ändern. Weitere Informationen finden Sie im Elastic Load Balancing-Benutzerhandbuch.

  • Geben Sie beim Erstellen ihrer CloudFront-Verteilung die URL des Load Balancers für den Domänennamen Ihres Ursprungs-Servers an. Weitere Informationen finden Sie unter Erstellen einer Verteilung.

Verwenden von CloudFront-Ursprungsgruppen

Sie können eine Ursprungsgruppe für Ihren CloudFront-Ursprung angeben, wenn Sie beispielsweise Ursprungs-Failover für Szenarien konfigurieren möchten, in denen Sie eine hohe Verfügbarkeit benötigen. Sie verwenden den Ursprungs-Failover, um einen primären Ursprung für CloudFront und zusätzlich einen sekundären Ursprung zu bezeichnen, zu dem CloudFront automatisch wechselt, wenn der primäre Ursprung bestimmte HTTP-Statuscode-Fehlerantworten zurückgibt.

Weitere Informationen, einschließlich der Schritte für die Einrichtung einer Ursprungsgruppe, finden Sie unter Optimieren der Hochverfügbarkeit mit CloudFront-Ursprungs-Failover.