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 umEdgeCacheService
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
.
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
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 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
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