Konfigurationsübersicht

Media CDN bietet Inhaltsübermittlung, Cache-Auslagerung, Ursprungsabschirmung, Autorisierung und Einbindung in Google Cloud anfordern externen Application Load Balancern, Logging und Monitoring-Plattformen

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 alle HTTP-basierter Ursprung sowie Wiederholungsbedingungen, wenn der Inhalt 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 verknüpft mit einem EdgeCacheService und können in mehreren Diensten 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

Damit Sie Media CDN-Dienste konfigurieren und bereitstellen können, müssen Sie sowohl die Network Services API und die Certificate Manager API für Ihr Projekt.

Console

  1. Aktivieren Sie die Network Services API.

    API aktivieren

  2. Aktivieren Sie die Certificate Manager API.

    API aktivieren

gcloud

  1. Aktivieren Sie die Network Services API:

    gcloud services enable networkservices.googleapis.com
    
  2. Aktivieren Sie die Certificate Manager API:

    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 den Cache wiederholt ruft für einen alternativen Ursprung (AWS S3) ab, wenn sich das Objekt nicht in Cloud Storage (z. B. HTTP 404) oder ein 5xx-Fehler gefunden wurden.
  • Ein EdgeCacheKeyset enthält Folgendes:

    • Zwei öffentliche Ed25519-Schlüssel, die zur Validierung verwendet werden signierten Anträgen.
    • In der Beispielkonfiguration können Sie Schlüssel jeden Monat rotieren, indem wir zwei Schlüssel in der Produktion behalten.
  • Eine EdgeCacheService mit zwei Routen, darunter:

    • Eine Route für Manifeste, die mit dem Cloud Storage-Ursprung verknüpft sind, mit kurze Cache-TTLs haben.
    • eine Route für Videosegmente, die durch signierte Anfragen geschützt sind, und mit dem Cloud Storage-Ursprung verknüpft und so konfiguriert, dass alle Antworten.
  • IPv4, IPv6, aktiviertes Logging (Standardeinstellung) und ein verwaltetes SSL-Zertifikat konfiguriert

Das folgende Beispiel zeigt die gcloud-Ausgabe 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: proxy-status
          headerValue: "{proxy_status}"
    - 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: proxy-status
          headerValue: "{proxy_status}"
    - 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: proxy-status
          headerValue: "{proxy_status}"

Konfigurationsoptionen für Media CDN

Mit den folgenden Tools können Sie Media CDN konfigurieren:

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

Google Cloud Console verwenden

Zum Media CDN

Eine Anleitung zur Konfiguration von Media CDN im 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, die die Integration mit Continuous-Delivery-Systemen oder Durch Infrastruktur als Code Tools. Sie können Konfigurationen duplizieren, einen isolierten Dienst in einem Staging-Umgebung, bevor Sie die Produktionsumgebung und den Snapshot aktualisieren. in die Versionsverwaltung übertragen.

Nur Ausgabefelder werden nicht importiert und beim Import implizit ausgeschlossen eine Konfiguration. Zum Beispiel:

  • IP-Adressen werden nicht importiert, da sie den einzelnen Diensten zugeordnet sind. Dienste können IP-Adressen nicht gemeinsam nutzen.
  • Die selfLink der Ressource, basierend auf dem Ressourcennamen.
  • Den id der Ressource, der automatisch generiert wird.

Verwenden Sie zum Exportieren eines Dienstes (EdgeCacheOrigin oder EdgeCacheKeyset) die export Unterbefehl für jede Ressource. 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 bestehende Dienstkonfiguration importieren, entweder als neue oder als Aktualisierung eines vorhandenen Dienstes:

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 zurückgegeben wird. durch eine Vorgangs-ID. 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 untersuchen einen einzelnen Vorgang anhand seiner ID, um den Fehler in Details. 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

Um alle aktuellen Vorgänge, deren Status und Abschluss zu sehen, führen Sie den Befehl folgenden Befehl:

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