Guide de configuration

Media CDN offre des fonctionnalités de diffusion de contenu, de déchargement du cache, de protection des origines, d'autorisation des requêtes et d'intégration aux plates-formes d'équilibrage de charge HTTP(S) ainsi qu'aux outils Logging et Monitoring de Google Cloud.

Media CDN fournit plusieurs ressources d'API REST :

  • EdgeCacheService, responsable de la configuration client (TLS, adressage IP), du routage, de la configuration CDN (modes de cache, valeurs TTL, signature) et des stratégies de sécurité.
  • EdgeCacheOrigin, responsable de la configuration par origine pour toute origine basée sur HTTP, ainsi que des conditions de nouvelle tentative lorsque le contenu n'est pas disponible ou accessible. Par exemple, dans le cadre d'une configuration d'empaqueteur vidéo redondante.
  • (Facultatif) EdgeCacheKeyset, qui contient un ensemble de clés publiques utilisé pour valider que les requêtes client ont été signées par votre infrastructure ou votre CMS. Les EdgeCacheKeysets sont associés à un EdgeCacheService et peuvent être utilisés sur plusieurs services.

Ces ressources sont représentées dans l'exemple suivant, qui montre le EdgeCacheService interrompant le trafic et l'acheminant vers différents EdgeCacheOrigins.

Exemple de configuration avec un objet "EdgeCacheService" qui interrompt le trafic, recherche les requêtes signées avec un "EdgeCacheKeyset" facultatif et achemine les requêtes vers trois "EdgeCacheOrigins" différents.
Exemple de configuration avec un EdgeCacheService qui interrompt le trafic, recherche les requêtes signées avec un EdgeCacheKeyset facultatif et achemine les requêtes vers trois EdgeCacheOrigins différents.

Autorisations

Vous devez disposer des autorisations IAM (Identity and Access Management) requises pour créer des ressources Media CDN. Media CDN dispose des rôles IAM prédéfinis suivants :

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

Activer les services requis

Pour configurer et déployer des services Media CDN, vous devez activer l'API Network Services et l'API Certificate Manager dans votre projet.

Console

  1. Activez l'API Network Services.

    Activer l'API

  2. Activez l'API Certificate Manager.

    Activer l'API

gcloud

Pour activer le service d'API Network Services dans votre projet actuel, exécutez la commande suivante :

gcloud services enable networkservices.googleapis.com

Pour activer l'API Certificate Manager, exécutez la commande suivante :

gcloud services enable certificatemanager.googleapis.com

Pour en savoir plus sur l'activation et la désactivation des services, consultez la documentation de Service Usage.

Exemple de configuration

La liste de ressources suivante décrit une configuration Media CDN représentative :

  • Une EdgeCacheOrigin :

    • Une origine basée sur Cloud Storage qui relance les mises en cache sur une autre origine (AWS S3) si l'objet ne se trouve pas dans Cloud Storage (par exemple, HTTP 404) ou si une erreur 5xx est rencontrée.
  • Un EdgeCacheKeyset, qui contient :

    • Deux clés publiques Ed25519 utilisées pour valider les requêtes signées.
    • Dans l'exemple de configuration, vous pouvez alterner les clés chaque mois en conservant deux clés en production.
  • Un fichier EdgeCacheService avec deux routes incluant :

    • Une route pour les fichiers manifestes, associée à l'origine Cloud Storage, avec des valeurs TTL de cache courtes.
    • Une route pour les segments vidéo, protégée par des requêtes signées et associée à l'origine Cloud Storage, configurée pour mettre en cache toutes les réponses.
  • IPv4, IPv6, journalisation activée (par défaut) et certificat SSL géré configuré

L'exemple suivant montre la sortie de gcloud pour cette configuration :

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}"

Options de configuration pour Media CDN

Pour configurer Media CDN, vous pouvez utiliser les outils suivants :

  • Console Google Cloud
  • Fichiers YAML ou JSON importés
  • API en direct

Utiliser la console Google Cloud

Accéder à Media CDN

Pour obtenir des instructions sur la configuration de Media CDN dans la console Google Cloud, consultez le guide de démarrage rapide.

Importer et exporter des configurations

gcloud CLI vous permet d'exporter et d'importer des configurations à partir de fichiers YAML ou JSON, ce qui permet l'intégration aux systèmes de livraison continue et/ou via des outils de type infrastructure-as-code. Vous pouvez dupliquer les configurations, tester un service isolé dans un environnement de préproduction avant de mettre à jour votre environnement de production, et configurer les instantanés dans le contrôle des versions.

Les champs utilisés exclusivement en sortie ne sont pas importés et sont implicitement exclus lors de l'importation d'une configuration. À savoir :

  • Les adresses IP ne sont pas importées, car elles sont dédiées à chaque service. Les services ne peuvent pas partager d'adresses IP.
  • La valeur (selfLink) de la ressource, qui est basée sur le nom de la ressource.
  • Le id de la ressource, qui est généré automatiquement.

Pour exporter un service, EdgeCacheOrigin ou EdgeCacheKeyset, utilisez la sous-commande export pour chaque ressource. Par exemple, pour exporter une configuration de service :

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

De même, vous pouvez importer une configuration de service existante, soit en tant que nouveau service, soit en tant que mise à jour sur place pour un service existant :

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

Utiliser des opérations d'API asynchrones

Par défaut, les commandes gcloud qui créent, mettent à jour ou suppriment une ressource sont bloquantes et ne renvoient un résultat qu'une fois la tâche terminée (pour la réussite comme pour l'échec). L'API REST est asynchrone par défaut.

Dans certains cas, il peut être préférable d'effectuer ces requêtes de manière asynchrone. Vous pouvez fournir l'option --async pour que la commande renvoie immédiatement un ID d'opération. Vous pouvez utiliser cet ID pour vérifier et interroger la tâche afin de vérifier si elle a abouti, si elle a renvoyé une erreur et, le cas échéant, quel était le message d'erreur.

Vous pouvez inspecter une opération individuelle (en utilisant son ID) pour comprendre l'erreur en détail. Par exemple, si vous configurez un logConfig.sampleRate sans également définir logConfig.enable = true, vous pouvez vous attendre à ce que l'erreur suivante soit renvoyée :

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

Pour afficher toutes les opérations récentes, leur état et leur statut d'achèvement, vous pouvez exécuter la commande suivante :

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