Visão geral da configuração

O Media CDN oferece entrega de conteúdo, redução de carga de cache, proteção de origem, autorização de solicitação e integração com balanceadores de carga de aplicativo externos, plataformas de registro e monitoramento do Google Cloud.

A Media CDN oferece vários recursos da API REST:

  • EdgeCacheService, responsável pela configuração voltada ao cliente (TLS, endereçamento IP), roteamento, configuração de CDN (modos de cache, TTLs, assinatura) e políticas de segurança.
  • EdgeCacheOrigin, responsável pela configuração por origem de qualquer origem baseada em HTTP, bem como pelas condições de nova tentativa quando o conteúdo não está disponível ou acessível. Por exemplo, como parte de uma configuração redundante de empacotador de vídeo.
  • (Opcional) EdgeCacheKeyset, que contém um conjunto de chaves públicas usadas para validar se as solicitações do cliente foram assinadas pela sua infraestrutura / CMS. Os EdgeCacheKeysets são associados a um EdgeCacheService e podem ser usados em vários serviços.

Esses recursos são representados no exemplo a seguir, que mostra o EdgeCacheService encerrando o tráfego e roteando para diferentes EdgeCacheOrigins.

Um exemplo de configuração com um "EdgeCacheService" que encerra o tráfego, verifica solicitações assinadas com um "EdgeCacheKeyset" opcional e encaminha solicitações para três "EdgeCacheOrigins" diferentes.
Um exemplo de configuração com um EdgeCacheService que encerra o tráfego, verifica solicitações assinadas com um EdgeCacheKeyset opcional e encaminha solicitações para três EdgeCacheOrigins diferentes.

Permissões

Você precisa ter as permissões do Identity and Access Management necessárias para criar recursos do Media CDN. A CDN de mídia tem os seguintes papéis predefinidos do IAM:

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

Ativar os serviços necessários

Para configurar e implantar serviços de CDN de mídia, é necessário ativar a API Network Services e a API Certificate Manager no projeto.

Console

  1. Ative a API Network Services.

    Ativar a API

  2. Ative a API Certificate Manager.

    Ativar a API

gcloud

  1. Ative a API Network Services:

    gcloud services enable networkservices.googleapis.com
    
  2. Ative a API Certificate Manager:

    gcloud services enable certificatemanager.googleapis.com
    

Para mais informações sobre como ativar e desativar serviços, consulte a documentação do Service Usage.

Exemplo de configuração

A lista de recursos a seguir descreve uma configuração representativa do Media CDN:

  • Um EdgeCacheOrigin:

    • Uma origem baseada no Cloud Storage que tenta novamente as transferências de cache em uma origem alternativa (AWS S3) se o objeto não estiver no Cloud Storage (por exemplo, HTTP 404) ou se um erro 5xx for encontrado.
  • Um EdgeCacheKeyset, que contém:

    • Duas chaves públicas Ed25519, que são usadas para validar solicitações assinadas.
    • No exemplo de configuração, é possível fazer a rotação de chaves a cada mês, mantendo duas chaves em produção.
  • Um EdgeCacheService com duas rotas, incluindo:

    • Uma rota para manifestos, associada à origem do Cloud Storage, com TTLs de cache curtos.
    • Uma rota para segmentos de vídeo, protegida por solicitações assinadas e associada à origem do Cloud Storage, configurada para armazenar em cache todas as respostas.
  • IPv4, IPv6, registro ativado (padrão) e um certificado SSL gerenciado configurado

O exemplo a seguir mostra a saída gcloud para essa configuração:

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

Opções de configuração do Media CDN

Para configurar o CDN de mídia, use as seguintes ferramentas:

  • Console do Google Cloud
  • Arquivos YAML ou JSON importados
  • As APIs diretamente

Usar o Console do Google Cloud

Acesse Media CDN

Para instruções sobre como configurar o Media CDN no console do Google Cloud, consulte o guia de início rápido.

Importar e exportar configurações

A CLI gcloud permite exportar e importar configurações de arquivos YAML ou JSON, permitindo a integração com sistemas de entrega contínua ou usando ferramentas de infraestrutura como código. É possível duplicar configurações, testar um serviço isolado em um ambiente de preparo antes de atualizar o ambiente de produção e fazer um snapshot das configurações no controle de versão.

Os campos somente saída não são importados e são implicitamente excluídos ao importar uma configuração. Especificamente:

  • Os endereços IP não são importados, porque são dedicados a cada serviço. Os serviços não podem compartilhar endereços IP.
  • O selfLink do recurso, que é baseado no nome do recurso.
  • O id do recurso, que é gerado automaticamente.

Para exportar um serviço, EdgeCacheOrigin ou EdgeCacheKeyset, use o subcomando export para cada recurso. Por exemplo, para exportar uma configuração de serviço:

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

Da mesma forma, é possível importar uma configuração de serviço como um novo serviço ou como uma atualização no local de um serviço atual:

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

Usar operações de API assíncronas

Por padrão, os comandos gcloud que criam, atualizam ou excluem um recurso são bloqueados e só retornam quando a tarefa é concluída (sucesso ou falha). A API REST é assíncrona por padrão.

Em alguns casos, é possível fazer essas solicitações de forma assíncrona. É possível fornecer a flag --async, que faz com que o comando seja retornado imediatamente com um ID de operação. É possível usar esse ID para verificar e consultar se a tarefa foi concluída, se ela retornou um erro e qual foi a mensagem de erro.

Você inspeciona uma operação individual (pelo ID) para entender o erro em detalhes. Por exemplo, se você configurar um logConfig.sampleRate sem definir logConfig.enable = true, o seguinte erro será retornado:

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 conferir todas as operações recentes, o status delas e a conclusão, execute o seguinte 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