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. OsEdgeCacheKeysets
são associados a umEdgeCacheService
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
.
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 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.com
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
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 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
bloqueadores 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