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 para qualquer Origem baseada em HTTP, bem como condições de repetição quando o conteúdo não é disponíveis ou acessíveis. 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 confirmando que as solicitações do cliente foram assinadas pela sua infraestrutura ou CMS (sistema de gerenciamento de conteúdo).EdgeCacheKeysets
estão associados com umaEdgeCacheService
e pode ser usada em vários serviços.
Esses recursos são representados neste exemplo, que mostra
EdgeCacheService
: encerrar o tráfego e direcionar para diferentes
EdgeCacheOrigins
.
EdgeCacheService
que encerre o tráfego, verifica se há solicitações assinadas com um parâmetro
EdgeCacheKeyset
e encaminha solicitações para três
EdgeCacheOrigins
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 seu 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 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 Media CDN, 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 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 infraestrutura como código 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 para 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á
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 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