Visão geral da configuração

O Media CDN oferece entrega de conteúdo, descarregamento de cache, proteção de origem, solicitar autorização e integração com o Google Cloud balanceadores de carga de aplicativo externos, Logging e Monitoramento de plataformas.

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

  • EdgeCacheService, responsável pela configuração voltada para o cliente (TLS, endereçamento IP), roteamento, Configuração da 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 um empacotador de vídeos redundantes configuração do Terraform.
  • (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. EdgeCacheKeysets estão associados com uma EdgeCacheService e pode ser usada em vários serviços.

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

Exemplo de configuração com um "EdgeCacheService" que termina
   verifica se há solicitações assinadas com um "EdgeCacheKeyset" opcional e
   encaminha solicitações para três "EdgeCacheOrigins".
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 Media CDN do Google Cloud. CDN de mídia tem os seguintes papéis predefinidos do IAM:

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

Ative os serviços necessários

Para configurar e implantar serviços do Media CDN, você precisa ativar a API Network Services e a API Certificate Manager para o seu 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 um perfil Configuração do Media CDN:

  • Um EdgeCacheOrigin:

    • Uma origem baseada no Cloud Storage que repete o cache busca por uma origem alternativa (AWS S3) se o objeto não estiver em Cloud Storage (por exemplo, HTTP 404) ou um erro 5xx é encontrados.
  • Um EdgeCacheKeyset, que contém:

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

    • Uma rota para manifestos, associada à origem do Cloud Storage, com com TTLs de cache curto.
    • 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, geração de registros ativada (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 na 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 YAML ou JSON, permitindo a integração com sistemas de entrega contínua ou usando infrastructure-as-code ou de terceiros. É possível duplicar configurações e testar um serviço isolado em um de teste antes de atualizar seu ambiente de produção e snapshots no controle de versões.

Os campos somente de saída não são importados e são implicitamente excluídos da importação 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 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 atual, seja como uma nova ou como uma atualização no local de um serviço existente:

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 bloqueio e só retornar quando a tarefa for concluída (para o sucesso e falha). A API REST é assíncrona por padrão.

Em alguns casos, convém fazer essas solicitações de forma assíncrona. Você pode forneça a sinalização --async, que faz com que o comando retorne imediatamente. com um ID de operação. Você pode usar esse ID para verificar e pesquisar para confirmar se a tarefa foi bem-sucedida, se retornou um erro, e qual o erro era.

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

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