· ネットワーキング · 7 min read
Cloud CDN を使ったコンテンツ配信の高速化
Google Cloud CDNを活用してウェブサイトやアプリケーションのパフォーマンスを大幅に向上させる方法を詳しく解説します。

Cloud CDNとは
Google Cloud CDN(Content Delivery Network)は、ウェブサイトやアプリケーションのコンテンツを高速に配信するためのグローバルな分散システムです。ユーザーに最も近いエッジロケーションからコンテンツを提供することで、レイテンシを低減し、ユーザーエクスペリエンスを向上させます。
Cloud CDNの主な特徴
- グローバルな分散ネットワーク
- 自動スケーリング
- セキュアな配信
- キャッシュ制御の柔軟性
- リアルタイムの分析とモニタリング
Cloud CDNの設定手順
1. バックエンドの準備
Cloud CDNを使用するには、まずバックエンドサービスを準備する必要があります。Cloud CDNは以下のようなさまざまなバックエンドをサポートしています:
- Google Cloud Storage バケット
- Compute Engine インスタンスグループ
- Google Kubernetes Engine (GKE) クラスタ
- Cloud Run サービス
- App Engine アプリケーション
- 外部バックエンド(HTTP(S)ロードバランサーを介して)
選択するバックエンドは、アプリケーションのアーキテクチャと要件に応じて決定します。例えば、静的コンテンツの配信には Cloud Storage が適している一方、動的コンテンツには Compute Engine や GKE が適しています。
以下は、Cloud Storage バケットを使用する場合の準備例です:
# Cloud Storage bucketの作成例
gsutil mb -l us-central1 gs://my-content-bucket
# バケットにコンテンツをアップロード
gsutil cp -r ./my-website-content gs://my-content-bucket/
バックエンドの選択と設定は、Cloud CDNのパフォーマンスと効率性に直接影響するため、慎重に検討することが重要です。
2. HTTPSロードバランサの設定
Cloud CDNは単独で機能するのではなく、Google Cloud の HTTPSロードバランサと連携して動作します。まずHTTPSロードバランサを設定し、その後でCloud CDNを有効化します。
- Google Cloud Consoleで「ネットワークサービス」>「負荷分散」に移動
- 「ロードバランサを作成」をクリック
- HTTPSロードバランサを選択し、設定を進める
# gcloudコマンドを使用したロードバランサの作成例
gcloud compute backend-buckets create my-backend-bucket --gcs-bucket-name=my-content-bucket
gcloud compute url-maps create my-url-map --default-backend-bucket=my-backend-bucket
gcloud compute target-https-proxies create my-https-proxy --url-map=my-url-map --ssl-certificates=my-ssl-cert
gcloud compute forwarding-rules create my-frontend-rule --target-https-proxy=my-https-proxy --global
HTTPSロードバランサの設定が完了したら、次のステップでCloud CDNを有効化します。
3. Cloud CDNの有効化
ロードバランサの設定内で、Cloud CDNを有効にします。
- バックエンドの設定で「Cloud CDNを有効にする」にチェック
- 必要に応じてキャッシュの設定をカスタマイズ
# gcloudコマンドでCloud CDNを有効化
gcloud compute backend-buckets update my-backend-bucket --enable-cdn
この設定により、HTTPSロードバランサを通じて届くリクエストに対して、Cloud CDNがコンテンツをキャッシュし、配信するようになります。
キャッシュ戦略の最適化
効果的なキャッシュ戦略は、Cloud CDNのパフォーマンスを最大化するために重要です。
1. キャッシュヘッダーの設定
適切なキャッシュヘッダーを設定することで、コンテンツの鮮度とキャッシュ効率のバランスを取ることができます。
# Nginxの設定例
location /static/ {
expires 1d;
add_header Cache-Control "public, max-age=86400";
}
2. キャッシュキーのカスタマイズ
Cloud CDNでは、キャッシュキーをカスタマイズして、より細かなキャッシュ制御が可能です。
- クエリ文字列の含める/除外する
- ヘッダーに基づいたキャッシュ
- デバイスタイプに応じたキャッシュ
# キャッシュキーポリシーの例
cacheKeyPolicy:
includeHost: true
includeProtocol: true
includeQueryString: true
queryStringBlacklist: ["utm_source", "utm_medium", "utm_campaign"]
3. コンテンツの圧縮
Cloud CDNは自動的にコンテンツを圧縮して配信することができます。これにより、帯域幅の使用量を削減し、ロード時間を短縮できます。
# gcloudコマンドで圧縮を有効化
gcloud compute backend-buckets update my-backend-bucket --enable-cdn --compression-mode=AUTOMATIC
セキュリティの強化
Cloud CDNを使用する際のセキュリティ強化策について説明します。
1. SSL/TLS証明書の管理
Google-managed証明書を使用するか、カスタム証明書をアップロードして、安全な通信を確保します。
# Google-managed証明書の作成
gcloud compute ssl-certificates create my-managed-cert --domains=example.com --global
2. Cloud Armorとの統合
Cloud ArmorをCloud CDNと統合して、DDoS攻撃や悪意のあるトラフィックから保護します。
# Cloud Armor セキュリティポリシーの例
securityPolicies:
- name: my-security-policy
rules:
- action: deny(403)
match:
versionedExpr: SRC_IPS_V1
config:
srcIpRanges:
- 192.0.2.0/24
- action: allow
match:
versionedExpr: SRC_IPS_V1
config:
srcIpRanges:
- "*"
3. Signed URLsの利用
プライベートコンテンツへのアクセスを制御するために、Signed URLsを使用します。
# Pythonを使用したSigned URLの生成例
from google.cloud import storage
import datetime
def generate_signed_url(bucket_name, object_name):
storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)
blob = bucket.blob(object_name)
url = blob.generate_signed_url(
version="v4",
expiration=datetime.timedelta(minutes=15),
method="GET",
)
return url
パフォーマンスモニタリングと最適化
Cloud CDNのパフォーマンスを継続的に監視し、最適化することが重要です。
1. Cloud Monitoringの活用
Cloud Monitoringを使用して、CDNのパフォーマンスメトリクスを追跡します。
- キャッシュヒット率
- レイテンシ
- 帯域幅使用量
2. ログ分析
Cloud CDNのログを分析して、ユーザーの行動パターンや問題点を特定します。
# BigQueryを使用したログ分析の例
SELECT
cache_result,
COUNT(*) AS request_count
FROM
`project_id.dataset_id.cdn_logs_table`
WHERE
DATE(timestamp) = CURRENT_DATE()
GROUP BY
cache_result
ORDER BY
request_count DESC
3. A/Bテスティング
異なるキャッシュ戦略やコンテンツ配信設定をA/Bテストして、最適なパフォーマンスを達成します。
# Cloud CDN A/Bテスト設定の例
test:
excerpt: "Caching strategy A/B test"
variants:
- name: "control"
weight: 50
cacheKeyPolicy:
includeProtocol: false
includeHost: true
- name: "experiment"
weight: 50
cacheKeyPolicy:
includeProtocol: true
includeHost: true
includeQueryString: true
まとめ
Cloud CDNは、コンテンツ配信を高速化し、ユーザーエクスペリエンスを向上させる強力なツールです。適切な設定、キャッシュ戦略の最適化、セキュリティの強化、そして継続的なモニタリングと改善により、ウェブサイトやアプリケーションのパフォーマンスを大幅に向上させることができます。