Konfigurationsanleitung

Media CDN bietet Inhaltsübermittlung, Cache-Übertragung, Ursprungsabschirmung, Anfrageautorisierung und Einbindung in die HTTP(S)-Load-Balancing-, Logging- und Monitoring-Plattformen von Google Cloud.

Media CDN bietet mehrere REST API-Ressourcen:

  • EdgeCacheService für die clientseitige Konfiguration (TLS, IP-Adressierung), Routing, CDN-Konfiguration (Cache-Modi, TTLs, Signatur) und Sicherheitsrichtlinien.
  • EdgeCacheOrigin, verantwortlich für die ursprungsspezifische Konfiguration für jeden HTTP-basierten Ursprung sowie Wiederholungsbedingungen, wenn Inhalte nicht verfügbar oder erreichbar sind. Zum Beispiel als Teil einer redundanten Konfiguration von Video-Packer.
  • (Optional) EdgeCacheKeyset. Enthält eine Reihe öffentlicher Schlüssel, mit denen Sie prüfen können, ob Clientanfragen von Ihrer Infrastruktur / Ihrem CMS signiert wurden. EdgeCacheKeysets sind mit einem EdgeCacheService verknüpft und können für mehrere Dienste verwendet werden.

Diese Ressourcen werden im folgenden Beispiel dargestellt, in dem der EdgeCacheService den Traffic beendet und an verschiedene EdgeCacheOrigins weiterleitet.

Eine Beispielkonfiguration mit einem „EdgeCacheService“, der den Traffic beendet, auf signierte Anfragen mit einem optionalen „EdgeCacheKeyset“ prüft und Anfragen an drei verschiedene „EdgeCacheOrigins“ weiterleitet.
Eine Beispielkonfiguration mit einem EdgeCacheService, der den Traffic beendet, auf signierte Anfragen mit einer optionalen EdgeCacheKeyset prüft und Anfragen an drei verschiedene EdgeCacheOrigins weiterleitet.

Berechtigungen

Sie benötigen die Berechtigungen zur Identitäts- und Zugriffsverwaltung, die zum Erstellen von Media CDN-Ressourcen erforderlich sind. Media CDN hat die folgenden vordefinierten IAM-Rollen:

  • roles/networkservices.edgeCacheAdmin
  • roles/networkservices.edgeCacheUser
  • roles/networkservices.edgeCacheViewer

Erforderliche Dienste aktivieren

Zum Konfigurieren und Bereitstellen von Media CDN-Diensten müssen Sie in Ihrem Projekt sowohl die Network Services API als auch die Certificate Manager API aktivieren.

Console

  1. Aktivieren Sie die Network Services API.

    API aktivieren

  2. Aktivieren Sie die Certificate Manager API.

    API aktivieren

gcloud

Führen Sie den folgenden Befehl aus, um den Network Services API-Dienst in Ihrem aktuellen Projekt zu aktivieren:

gcloud services enable networkservices.googleapis.com

Führen Sie den folgenden Befehl aus, um die Certificate Manager API zu aktivieren:

gcloud services enable certificatemanager.googleapis.com

Weitere Informationen zum Aktivieren und Deaktivieren von Diensten finden Sie in der Dokumentation zu Service Usage.

Konfigurationsbeispiel

Die folgende Liste von Ressourcen beschreibt eine repräsentative Media CDN-Konfiguration:

  • Eine EdgeCacheOrigin:

    • Ein Cloud Storage-basierter Ursprung, der Cache-Abrufe für einen alternativen Ursprung (AWS S3) wiederholt, wenn sich das Objekt nicht in Cloud Storage befindet (z. B. HTTP 404) oder ein 5xx-Fehler auftritt.
  • Ein EdgeCacheKeyset, der Folgendes enthält:

    • Zwei öffentliche Ed25519-Schlüssel, die zum Validieren signierter Anfragen verwendet werden.
    • In der Beispielkonfiguration können Sie Schlüssel jeden Monat rotieren, wobei Sie zwei Schlüssel in der Produktion behalten.
  • Ein EdgeCacheService mit zwei Routen, darunter:

    • Eine Route für Manifeste, die dem Cloud Storage-Ursprung zugeordnet sind, mit kurzen Cache-TTLs.
    • Eine Route für Videosegmente, die durch signierte Anfragen geschützt und mit dem Cloud Storage-Ursprung verknüpft ist, die so konfiguriert ist, dass alle Antworten im Cache gespeichert werden.
  • IPv4, IPv6, Logging aktiviert (Standardeinstellung) und ein verwaltetes SSL-Zertifikat konfiguriert

Das folgende Beispiel zeigt die Ausgabe gcloud für diese Konfiguration:

gcloud edge-cache origins describe prod-media-origin
id: "2295067926314745283"
creationTimestamp: "2019-11-13T09:53:48.757-08:00"
name: "prod-media-origin"
description: ""
originAddress: "gs://bucket_name/"
failoverOrigin: "s3-origin"
retryConditions: [HTTP_5XX, NOT_FOUND]
originProtocol: HTTP2
timeouts:
  connectTimeout: 5s
  maxAttemptsTimeout: 10
  responseTimeout: 6s
id: "2295067926314745283"
creationTimestamp: "2019-11-13T09:53:48.757-08:00"
name: "s3-origin"
description: ""
originAddress: "media.example.com.s3.amazonaws.com"
retryConditions: [HTTP_5XX, NOT_FOUND]
originProtocol: HTTP2
gcloud edge-cache keysets describe prod-keyset
id: "2295067926314745283"
creationTimestamp: "2019-11-13T09:53:48.757-08:00"
name: "prod-keyset"
publicKeys:
  - name: "sept-2020-key"
    value: "DThVLjhAKm3VYOvLBAwFZ5XbjVyF98Ias8NZU0WEM9w="
  - name: "aug-2020-key"
    value: "3nQa82ScYgDDAxJrKCqumSEg60VNODGR5dGAveJWsw4="
gcloud edge-cache services describe prod-media-service
name: "prod-media-service"
edgeSslCertificates:
  - "media-example-com-cert"
  - "video-serving-example-com-cert"
requireTls: true
routing:
  hostRules:
  - description: "prod hostnames"
    hosts:
      - "media.example.com"
      - "video-serving.example.net"
    pathMatcher: "routes"
  pathMatchers:
  - name: "routes"
    routeRules:
    - priority: 1
      description: "prod video segments"
      origin: "prod-media-origin"
      matchRules:
      - pathTemplateMatch: "/**.ts" # HLS segments
      - pathTemplateMatch: "/**.m4s" # DASH / CMAF segments
      routeAction:
        cdnPolicy:
          cacheMode: "FORCE_CACHE_ALL"
          clientTtl: 3600s
          defaultTtl: 86400s
          signedRequestMode: REQUIRE_SIGNATURES
          signedRequestKeySet: "prod-keyset"
      headerAction:
        responseHeadersToAdd:
        - headerName: cache-status
          headerValue: "{cdn_cache_status}"
        - headerName: cache-id
          headerValue: "{cdn_cache_id}"
    - priority: 2
      description: "prod manifest endpoints"
      origin: "prod-media-origin"
      matchRules:
      - pathTemplateMatch: "/**.m3u8" # HLS playlists
      - pathTemplateMatch: "/**.mpd" # DASH manifests
      routeAction:
        urlRewrite:
          pathPrefixRewrite: "/output/manifests"
        cdnPolicy:
          cacheMode: "CACHE_ALL_STATIC"
          clientTtl: 10s
          defaultTtl: 30s
          maxTtl: 120s
      headerAction:
        responseHeadersToAdd:
        - headerName: cache-status
          headerValue: "{cdn_cache_status}"
        - headerName: cache-id
          headerValue: "{cdn_cache_id}"
    - priority: 3 # catch all routes should be the lowest priority route
      description: "catch all route"
      origin: "prod-media-origin"
      matchRules:
      - prefixMatch: /
      headerAction:
        responseHeadersToAdd:
        - headerName: cache-status
          headerValue: "{cdn_cache_status}"
        - headerName: cache-id
          headerValue: "{cdn_cache_id}"

Konfigurationsoptionen für Media CDN

Zum Konfigurieren von Media CDN können Sie die folgenden Tools verwenden:

  • Google Cloud Console
  • Importierte YAML- oder JSON-Dateien
  • Die APIs direkt

Google Cloud Console verwenden

Zu Media CDN

Eine Anleitung zum Konfigurieren von Media CDN in der Google Cloud Console finden Sie in der Kurzanleitung.

Konfigurationen importieren und exportieren

Mit der gcloud CLI können Sie Konfigurationen aus YAML- oder JSON-Dateien exportieren und importieren, um die Integration in Continuous Delivery-Systeme und/oder über Infrastruktur-als-Code-Tools zu ermöglichen. Sie können Konfigurationen duplizieren, einen isolierten Dienst in einer Staging-Umgebung testen, bevor Sie Ihre Produktionsumgebung aktualisieren, und Snapshot-Konfigurationen in die Versionsverwaltung aufnehmen.

Nur-Ausgabefelder werden nicht importiert und beim Importieren einer Konfiguration implizit ausgeschlossen. Zum Beispiel:

  • IP-Adressen werden nicht importiert, da sie dem jeweiligen Dienst zugeordnet sind. Dienste können keine IP-Adressen teilen.
  • Der selfLink der Ressource, basierend auf dem Ressourcennamen.
  • Der id der Ressource, die automatisch generiert wird.

Verwenden Sie zum Exportieren des Dienstes EdgeCacheOrigin oder EdgeCacheKeyset für jede Ressource den Unterbefehl export. So exportieren Sie beispielsweise eine Dienstkonfiguration:

gcloud edge-cache services export SERVICE_NAME \
    --destination=my-service.yaml
Exported [projects/my-project/locations/global/edgeCacheServices/SERVICE_NAME] to 'my-service.yaml'.

Ebenso können Sie eine vorhandene Dienstkonfiguration entweder als neuen Dienst oder als Update für einen vorhandenen Dienst importieren:

gcloud edge-cache services import new-staging-service \
    --source=my-service.yaml

Asynchrone API-Vorgänge verwenden

Standardmäßig sind gcloud-Befehle, die eine Ressource erstellen, aktualisieren oder löschen, blockierend und werden erst zurückgegeben, wenn die Aufgabe abgeschlossen ist (sowohl bei Erfolg als auch bei Fehlschlag). Die REST API ist standardmäßig asynchron.

In einigen Fällen kann es sinnvoll sein, diese Anfragen asynchron auszuführen. Sie können das Flag --async angeben, wodurch der Befehl sofort mit einer Vorgangs-ID zurückgegeben wird. Mit dieser ID können Sie prüfen und abfragen, ob die Aufgabe erfolgreich war, ob sie einen Fehler zurückgegeben hat und wie die Fehlermeldung lautete.

Sie überprüfen einen einzelnen Vorgang (nach seiner ID), um den Fehler im Detail zu verstehen. Wenn Sie beispielsweise eine logConfig.sampleRate konfigurieren, ohne auch logConfig.enable = true festzulegen, können Sie davon ausgehen, dass der folgende Fehler zurückgegeben wird:

gcloud edge-cache operations describe operation-1611525680496-5b9ac8fbb7f58-90a7a822-f0c1e8c6
done: true
error:
  message: "Logs sample rate must not be specified without enabling logging."
name: projects/my-project/locations/global/operations/operation-1611525680496-5b9ac8fbb7f58-90a7a822-f0c1e8c6

Führen Sie den folgenden Befehl aus, um alle aktuellen Vorgänge, deren Status und Abschluss anzeigen zu lassen:

gcloud edge-cache operations list
END_TIME  ID                                                       TARGET  DONE
          operation-1611095421009-5b9486244bf21-cc6b5924-628b8e2a          True
          operation-1611096056610-5b94888273fe6-2da85286-8c810f8e          True
          operation-1611095551517-5b9486a0c251e-c2e1bbbb-de4aa8a5          True