Descripción general de la configuración

Media CDN ofrece distribución de contenido, descarga de caché, protección de origen, autorización de solicitudes e integración con Google Cloudbalanceadores de carga de aplicación externos, plataformas de registro y de monitorización.

Media CDN proporciona varios recursos de la API REST:

  • EdgeCacheService, responsable de la configuración de cara al cliente (TLS, direccionamiento IP), el enrutamiento, la configuración de la CDN (modos de caché, TTLs y firma) y las políticas de seguridad.
  • EdgeCacheOrigin, responsable de la configuración por origen de cualquier origen basado en HTTP, así como de las condiciones de reintento cuando el contenido no está disponible o no se puede acceder a él. Por ejemplo, como parte de una configuración de empaquetador de vídeo redundante.
  • (Opcional) EdgeCacheKeyset, que contiene un conjunto de claves públicas que se usan para validar que las solicitudes de los clientes se han firmado con tu infraestructura o CMS. EdgeCacheKeysets se asocian a un EdgeCacheService y se pueden usar en varios servicios.

Estos recursos se representan en el siguiente ejemplo, que muestra el tráfico que termina en EdgeCacheService y se dirige a diferentes EdgeCacheOrigins.

Configuración de ejemplo con un `EdgeCacheService` que termina el tráfico, comprueba si hay solicitudes firmadas con un `EdgeCacheKeyset` opcional y dirige las solicitudes a tres `EdgeCacheOrigins` diferentes.
Un ejemplo de configuración con un EdgeCacheService que finaliza el tráfico, comprueba si las solicitudes están firmadas con un EdgeCacheKeyset opcional y dirige las solicitudes a tres EdgeCacheOrigins diferentes.

Permisos

Debes tener los permisos de gestión de identidades y accesos necesarios para crear recursos de Media CDN. Media CDN tiene los siguientes roles de gestión de identidades y accesos predefinidos:

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

Habilita los servicios necesarios

Para configurar e implementar servicios de Media CDN, debes habilitar la API Network Services y la API Certificate Manager en tu proyecto.

Consola

  1. Habilita la API Network Services.

    Activar la API

  2. Habilita la API Certificate Manager.

    Activar la API

gcloud

  1. Habilita la API Network Services:

    gcloud services enable networkservices.googleapis.com
    
  2. Habilita la API Certificate Manager:

    gcloud services enable certificatemanager.googleapis.com
    

Para obtener más información sobre cómo habilitar e inhabilitar servicios, consulta la documentación de Uso de Servicio.

Configuración de ejemplo

En la siguiente lista de recursos se describe una configuración representativa de Media CDN:

  • Un EdgeCacheOrigin:

    • Un origen basado en Cloud Storage que vuelve a intentar obtener datos de la caché de un origen alternativo (AWS S3) si el objeto no está en Cloud Storage (por ejemplo, si se produce un error HTTP 404) o si se produce un error 5xx.
  • Un EdgeCacheKeyset, que contiene lo siguiente:

    • Dos claves públicas Ed25519, que se usan para validar solicitudes firmadas.
    • En la configuración de ejemplo, puedes rotar las claves cada mes y mantener dos claves en producción.
  • Un EdgeCacheService con dos rutas, que incluye lo siguiente:

    • Una ruta para los manifiestos, asociada al origen de Cloud Storage, con TTLs de caché cortos.
    • Una ruta para segmentos de vídeo, protegida por solicitudes firmadas y asociada al origen de Cloud Storage, configurada para almacenar en caché todas las respuestas.
  • IPv4, IPv6, registro habilitado (valor predeterminado) y un certificado SSL gestionado configurado

En el ejemplo siguiente se muestra el resultado de gcloud para esta configuración:

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

Opciones de configuración de Media CDN

Para configurar Media CDN, puedes usar las siguientes herramientas:

  • Google Cloud consola
  • Archivos YAML o JSON importados
  • Las APIs directamente

Usar la Google Cloud consola

Ir a Media CDN

Para obtener instrucciones sobre cómo configurar Media CDN en la consola deGoogle Cloud , consulta la guía de inicio rápido.

Importar y exportar configuraciones

La CLI de gcloud te permite exportar e importar configuraciones desde archivos YAML o JSON, lo que permite la integración con sistemas de entrega continua o mediante el uso de herramientas de infraestructura como código. Puedes duplicar configuraciones, probar un servicio aislado en un entorno de preproducción antes de actualizar tu entorno de producción y crear una instantánea de las configuraciones en el control de versiones.

Los campos de solo salida no se importan y se excluyen implícitamente al importar una configuración. En concreto, este cambio afecta a las siguientes acciones:

  • Las direcciones IP no se importan, ya que están dedicadas a cada servicio. Los servicios no pueden compartir direcciones IP.
  • El selfLink del recurso, que se basa en el nombre del recurso.
  • El id del recurso, que se genera automáticamente.

Para exportar un servicio, EdgeCacheOrigin o EdgeCacheKeyset, usa el subcomando export para cada recurso. Por ejemplo, para exportar una configuración de servicio, sigue estos pasos:

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

Del mismo modo, puede importar una configuración de servicio, ya sea como un servicio nuevo o como una actualización in situ de un servicio:

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

Usar operaciones de API asíncronas

De forma predeterminada, los comandos gcloud que crean, actualizan o eliminan un recurso se bloquean y solo se devuelven una vez que se ha completado la tarea (tanto si se ha realizado correctamente como si no). La API REST es asíncrona de forma predeterminada.

En algunos casos, puede que quieras hacer estas solicitudes de forma asíncrona. Puedes proporcionar la marca --async, que hace que el comando devuelva inmediatamente un ID de operación. Puedes usar este ID para comprobar y sondear si la tarea se ha completado correctamente, si ha devuelto un error y cuál era el mensaje de error.

Puedes inspeccionar una operación concreta (por su ID) para conocer los detalles del error. Por ejemplo, si configura un logConfig.sampleRate sin definir también logConfig.enable = true, se devolverá el siguiente error:

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

Para ver todas las operaciones recientes, su estado y si se han completado, puedes ejecutar el siguiente comando:

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