Media CDN offers content delivery, cache off-load, origin shielding, request authorization and integration with Google Cloud external Application Load Balancers, Logging, and Monitoring platforms.
Media CDN provides several REST API resources:
EdgeCacheService, responsible for client-facing configuration (TLS, IP addressing), routing, CDN configuration (cache modes, TTLs, signing), and security policies.EdgeCacheOrigin, responsible for per-origin configuration for any HTTP-based origin, as well as retry conditions when content is not available or reachable. For example, as part of a redundant video packager configuration.- (Optional) 
EdgeCacheKeyset, which contains a set of public keys used for validating that client requests were signed by your infrastructure / CMS.EdgeCacheKeysetsare associated with anEdgeCacheService, and can be used across multiple services. 
These resources are represented in the following example, which shows the
EdgeCacheService terminating traffic, and routing to different
EdgeCacheOrigins.
EdgeCacheService
    that terminates traffic, checks for signed requests with an optional
    EdgeCacheKeyset, and routes requests to three different
    EdgeCacheOrigins.Permissions
You must have the Identity and Access Management permissions required to create Media CDN resources. Media CDN has the following predefined IAM roles:
roles/networkservices.edgeCacheAdminroles/networkservices.edgeCacheUserroles/networkservices.edgeCacheViewer
Enable the required services
To configure and deploy Media CDN services, you need to enable both the Network Services API and the Certificate Manager API for your project.
Console
Enable the Network Services API.
Enable the Certificate Manager API.
gcloud
Enable the Network Services API:
gcloud services enable networkservices.googleapis.comEnable the Certificate Manager API:
gcloud services enable certificatemanager.googleapis.com
For more information about enabling and disabling services, see the Service Usage documentation.
Example configuration
The following list of resources describes a representative Media CDN configuration:
An
EdgeCacheOrigin:- A Cloud Storage-based origin that retries cache fetches against an alternative origin (AWS S3) if the object isn't in Cloud Storage (for example, HTTP 404) or a 5xx error is encountered.
 
One
EdgeCacheKeyset, which contains:- Two Ed25519 public keys, which are used to validate signed requests.
 - In the example configuration, you can rotate keys each month, keeping two keys in production.
 
One
EdgeCacheServicewith two routes, including:- A route for manifests, associated with the Cloud Storage origin, with short cache TTLs.
 - A route for video segments, protected by signed requests, and associated with the Cloud Storage origin, configured to cache all responses.
 
IPv4, IPv6, logging enabled (default), and a managed SSL certificate configured
The following example shows the gcloud output for this configuration:
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}"
Configuration options for Media CDN
To configure Media CDN, you can use the following tools:
- Google Cloud console
 - Imported YAML or JSON files
 - The APIs directly
 
Use the Google Cloud console
For instructions that describe how to configure Media CDN in the Google Cloud console, see the quickstart.
Import and export configurations
The gcloud CLI lets you export and import configurations from YAML or JSON files, enabling integration with continuous delivery systems or by using infrastructure-as-code tooling. You can duplicate configurations, test an isolated service in a staging environment before updating your production environment, and snapshot configurations into version control.
Output only fields are not imported, and are implicitly excluded when importing a configuration. Specifically:
- IP addresses are not imported, as they are dedicated to each service. Services cannot share IP addresses.
 - The 
selfLinkof the resource, which is based on the resource name. - The 
idof the resource, which is automatically generated. 
To export a service, EdgeCacheOrigin or EdgeCacheKeyset, use the export
sub-command for each resource. For example, to export a service configuration:
gcloud edge-cache services export SERVICE_NAME \
    --destination=my-service.yaml
Exported [projects/my-project/locations/global/edgeCacheServices/SERVICE_NAME] to 'my-service.yaml'.
Similarly, you can import an existing service configuration, either as a new service or as an update-in-place for an existing service:
gcloud edge-cache services import new-staging-service \
    --source=my-service.yaml
Use asynchronous API operations
By default, gcloud commands that create, update or delete a resource are
blocking, and only return once the task is complete (for both success and
failure). The REST API is asynchronous by default.
In some cases, you might want to make these requests asynchronously. You can
provide the --async flag, which causes the command to return immediately
with an operation ID. You can use this ID to check and poll to confirm
whether the task succeeded, whether it returned an error, and what the error
message was.
You inspect an individual operation (by its ID) to understand the error in
detail. For example, if you configure a logConfig.sampleRate without also
setting logConfig.enable = true, you can expect the following error to be
returned:
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
To view all recent operations, their status, and completion, you can run the following command:
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