구성 개요

Media CDN은 콘텐츠 전송, 캐시 오프로드, 원본 보호, 요청 승인, Google Cloud 외부 애플리케이션 부하 분산기, Logging, Monitoring 플랫폼과의 통합을 제공합니다.

Media CDN은 여러 REST API 리소스를 제공합니다.

  • EdgeCacheService: 클라이언트 대상 구성(TLS, IP 주소 지정), 라우팅, CDN 구성(캐시 모드, TTL, 서명), 보안 정책을 지원합니다.
  • EdgeCacheOrigin: HTTP 기반 원본에 대한 원본별 구성을 지원하고 콘텐츠를 사용할 수 없거나 도달할 수 없을 때의 재시도 조건을 지원합니다. 예를 들어 중복된 동영상 패키지 도구 구성의 일부입니다.
  • (선택사항) EdgeCacheKeyset: 인프라/CMS별로 클라이언트 요청이 서명되었는지 검증하기 위해 사용되는 공개 키 집합을 포함합니다. EdgeCacheKeysetsEdgeCacheService와 연결되어 있으며 여러 서비스에서 사용할 수 있습니다.

이러한 리소스는 EdgeCacheService 종료 트래픽, 다른 EdgeCacheOrigins에 대한 라우팅을 보여주는 다음 예시에 표시되어 있습니다.

트래픽을 종료하고 선택적인 `EdgeCacheKeyset`를 사용해서 서명된 요청을 확인하고, 세 가지 서로 다른 `EdgeCacheOrigins`로 요청을 라우팅하는 `EdgeCacheService`를 사용하는 구성 예시입니다.
트래픽을 종료하고 선택적인 EdgeCacheKeyset를 사용해서 서명된 요청을 확인하고, 세 가지 서로 다른 EdgeCacheOrigins로 요청을 라우팅하는 EdgeCacheService를 사용하는 구성 예시입니다.

권한

Media CDN 리소스를 만드는 데 필요한 Identity and Access Management 권한이 있어야 합니다. Media CDN에는 다음과 같은 사전 정의된 IAM 역할이 포함되어 있습니다.

  • roles/networkservices.edgeCacheAdmin
  • roles/networkservices.edgeCacheUser
  • roles/networkservices.edgeCacheViewer

필수 서비스 사용 설정

Media CDN 서비스를 구성하고 배포하려면 프로젝트에 대해 Network Services APICertificate Manager API를 모두 사용 설정해야 합니다.

콘솔

  1. Network Services API를 사용 설정합니다.

    API 사용 설정

  2. Certificate Manager API를 사용 설정합니다.

    API 사용 설정

gcloud

  1. Network Services API를 사용 설정합니다.

    gcloud services enable networkservices.googleapis.com
    
  2. Certificate Manager API를 사용 설정합니다.

    gcloud services enable certificatemanager.googleapis.com
    

서비스 사용 설정 및 사용 중지에 대한 자세한 내용은 서비스 사용 문서를 참조하세요.

구성 예시

다음 리소스 목록은 대표적인 Media CDN 구성을 설명합니다.

  • EdgeCacheOrigin:

    • 객체가 Cloud Storage에 없거나(예: HTTP 404) 5xx 오류가 발생했을 때 대체 원본(AWS S3)에 대해 캐시 가져오기를 재시도하는 Cloud Storage 기반 원본입니다.
  • 다음을 포함하는 하나의 EdgeCacheKeyset:

    • 서명된 요청을 검증하는 데 사용되는 2개의 Ed25519 공개 키
    • 구성 예시에서는 매월 키를 순환하여 2개의 키를 프로덕션 상태로 유지할 수 있습니다.
  • 다음을 포함하여 2개의 경로가 있는 하나의 EdgeCacheService:

    • 짧은 캐시 TTL과 함께 Cloud Storage 원본과 연결된 매니페스트 경로
    • 서명된 요청으로 보호되고, Cloud Storage 원본과 연관되어 있고, 모든 응답을 캐시하도록 구성된 동영상 세그먼트의 경로
  • IPv4, IPv6, 로깅 사용 설정(기본값), 관리형 SSL 인증서 구성

다음 예시에서는 이 구성에 대한 gcloud 결과를 보여줍니다.

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}"

Media CDN의 구성 옵션

Media CDN을 구성하려면 다음 도구를 사용할 수 있습니다.

  • Google Cloud 콘솔
  • 가져온 YAML 또는 JSON 파일
  • 직접 API

Google Cloud 콘솔 사용

Media CDN으로 이동

Google Cloud 콘솔에서 Media CDN을 구성하는 방법을 설명하는 내용은 빠른 시작을 참조하세요.

구성 가져오기 및 내보내기

gcloud CLI를 사용하면 YAML 또는 JSON 파일에서 구성 내보내기 및 가져오기를 수행하고 지속적 배포 시스템 또는 infrastructure-as-code 도구를 사용해서 통합을 지원할 수 있습니다. 구성을 복사하고, 프로덕션 환경을 업데이트하기 전에 스테이징 환경에서 격리된 서비스를 테스트하고, 버전 제어에 구성 스냅샷을 저장할 수 있습니다.

출력 전용 필드는 가져오지 않고 구성을 가져올 때 명시적으로 제외됩니다. 구체적으로는 다음과 같습니다.

  • IP 주소는 각 서비스에 전용으로 사용되므로 가져오지 않습니다. 서비스가 IP 주소를 공유할 수 없습니다.
  • 리소스의 selfLink는 리소스 이름을 기반으로 합니다.
  • 리소스의 id는 자동으로 생성됩니다.

EdgeCacheOrigin 또는 EdgeCacheKeyset 서비스를 내보내려면 각 리소스에 대해 export 하위 명령어를 사용합니다. 예를 들어 서비스 구성을 내보내려면 다음 안내를 따르세요.

gcloud edge-cache services export SERVICE_NAME \
    --destination=my-service.yaml
Exported [projects/my-project/locations/global/edgeCacheServices/SERVICE_NAME] to 'my-service.yaml'.

마찬가지로 새 서비스를 만들거나 기존 서비스를 바로 업데이트하기 위해 기존 서비스 구성을 가져올 수 있습니다.

gcloud edge-cache services import new-staging-service \
    --source=my-service.yaml

비동기 API 작업 사용

기본적으로 리소스를 생성, 업데이트, 삭제하는 gcloud 명령어는 작업이 완료될 때까지 대기한 후 작업이 완료된 후(성공 및 실패)에만 결과를 반환합니다. REST API는 기본적으로 비동기적으로 수행됩니다.

일부 경우에는 이러한 요청을 비동기적으로 수행해야 할 수 있습니다. --async 플래그를 제공하면 명령어가 작업 ID를 사용해서 즉시 반환할 수 있습니다. 이 ID를 사용하여 태스크가 성공했는지, 오류를 반환했는지, 어떤 오류 메시지가 반환되었는지 확인할 수 있습니다.

개별 작업(ID별)을 조사하여 오류를 자세히 파악합니다. 예를 들어 logConfig.enable = true를 설정하지 않고 logConfig.sampleRate를 구성한 경우 다음 오류 반환을 예상할 수 있습니다.

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

최근 작업, 상태, 완료를 모두 확인하려면 다음 명령어를 실행하면 됩니다.

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