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 d'application externes, de journalisation et de surveillance 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. LesEdgeCacheKeysets
sont associés à unEdgeCacheService
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
.
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 pour votre projet.
Console
Activez l'API Network Services.
Activez l'API Certificate Manager.
gcloud
Activez l'API Network Services:
gcloud services enable networkservices.googleapis.com
Activez l'API Certificate Manager :
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: 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}"
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
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 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