Vista geral da configuração

A RFC de conteúdo multimédia oferece fornecimento de conteúdo, descarregamento da cache, proteção de origem, autorização de pedidos e integração com Google Cloud balanceadores de carga de aplicações externos, registo e plataformas de monitorização.

A RFC oferece vários recursos da API REST:

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

Estes recursos são representados no exemplo seguinte, que mostra o EdgeCacheService tráfego de terminação e o encaminhamento para diferentes EdgeCacheOrigins.

Uma configuração de exemplo com um `EdgeCacheService` que termina o tráfego, verifica pedidos assinados com um `EdgeCacheKeyset` opcional e encaminha pedidos para três `EdgeCacheOrigins` diferentes.
Uma configuração de exemplo com um EdgeCacheService que termina o tráfego, verifica se existem pedidos assinados com um EdgeCacheKeyset opcional e encaminha pedidos para três EdgeCacheOrigins diferentes.

Autorizações

Tem de ter as autorizações de Identity and Access Management necessárias para criar recursos da Media CDN. O Media CDN tem as seguintes funções IAM predefinidas:

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

Ative os serviços necessários

Para configurar e implementar os serviços de CDN de multimédia, tem de ativar a API Network Services e a API Certificate Manager para o seu projeto.

Consola

  1. Ative a API Network Services.

    Ative a API

  2. Ative a API Certificate Manager.

    Ative 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 a ativação e desativação de serviços, consulte a documentação de utilização de serviços.

Exemplo de configuração

A lista de recursos seguinte descreve uma configuração representativa da RFC de multimédia:

  • Um EdgeCacheOrigin:

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

    • Duas chaves públicas Ed25519, que são usadas para validar pedidos assinados.
    • Na configuração de exemplo, pode rodar as chaves todos os meses, mantendo duas chaves em produção.
  • Um EdgeCacheService com dois trajetos, incluindo:

    • Uma rota para manifestos, associada à origem do Cloud Storage, com TTLs de cache curtos.
    • Uma rota para segmentos de vídeo, protegida por pedidos assinados e associada à origem do Cloud Storage, configurada para colocar em cache todas as respostas.
  • IPv4, IPv6, registo ativado (predefinição) e um certificado SSL gerido configurado

O exemplo seguinte mostra a saída de gcloud para esta 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 para a RFC de multimédia

Para configurar a RFC de conteúdo multimédia, pode usar as seguintes ferramentas:

  • Google Cloud consola
  • Ficheiros YAML ou JSON importados
  • As APIs diretamente

Use a Google Cloud consola

Aceda à RFC de multimédia

Para ver instruções que descrevem como configurar a RFC de multimédia na Google Cloud consola, consulte o início rápido.

Importe e exporte configurações

A CLI gcloud permite-lhe exportar e importar configurações de ficheiros YAML ou JSON, o que permite a integração com sistemas de entrega contínua ou a utilização de ferramentas de infraestrutura como código. Pode duplicar configurações, testar um serviço isolado num ambiente de preparação antes de atualizar o seu ambiente de produção e criar instantâneos de configurações no controlo de versões.

Os campos de apenas saída não são importados e são implicitamente excluídos quando importa uma configuração. Em concreto:

  • Os endereços IP não são importados, uma vez que são dedicados a cada serviço. Os serviços não podem partilhar endereços IP.
  • O selfLink do recurso, que se baseia 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, pode importar uma configuração de serviço existente, como um novo serviço ou como uma atualização no local de um serviço existente:

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

Use operações da API assíncronas

Por predefinição, os comandos gcloud que criam, atualizam ou eliminam um recurso são bloqueadores e só são devolvidos quando a tarefa estiver concluída (tanto em caso de êxito como de falha). A API REST é assíncrona por predefinição.

Em alguns casos, é recomendável fazer estes pedidos de forma assíncrona. Pode fornecer a flag --async, que faz com que o comando seja devolvido imediatamente com um ID da operação. Pode usar este ID para verificar e sondar para confirmar se a tarefa foi concluída com êxito, se devolveu um erro e qual foi a mensagem de erro.

Inspecciona uma operação individual (pelo respetivo ID) para compreender o erro em detalhe. Por exemplo, se configurar um logConfig.sampleRate sem também definir logConfig.enable = true, pode esperar que seja devolvido o seguinte erro:

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 as operações recentes, o respetivo estado e conclusão, pode executar 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