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 Google Cloud balanceadores de carga de aplicativo externos, plataformas de registro e monitoramento.
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. OsEdgeCacheKeysetssão associados a umEdgeCacheServicee 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.
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 de gerenciamento de identidade e acesso necessárias para criar recursos do Media CDN. A CDN de mídia tem os seguintes papéis predefinidos do IAM:
roles/networkservices.edgeCacheAdminroles/networkservices.edgeCacheUserroles/networkservices.edgeCacheViewer
Ativar os serviços necessários
Para configurar e implantar serviços da Media CDN, é necessário ativar a API Network Services e a API Certificate Manager no projeto.
Console
Ative a API Network Services.
Ative a API Certificate Manager.
gcloud
Ative a API Network Services:
gcloud services enable networkservices.googleapis.comAtive 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
EdgeCacheServicecom 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 Media CDN, use as seguintes ferramentas:
- Console doGoogle Cloud
- Arquivos YAML ou JSON importados
- As APIs diretamente
Usar o console Google Cloud
Para instruções sobre como configurar o Media CDN no consoleGoogle 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
selfLinkdo recurso, que é baseado no nome do recurso. - O
iddo 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 atual 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 e
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