0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

徹底比較! AWS vs Azure 〜30の観点から考える最適なクラウド選び〜 - Day 10: 徹底比較!AWS CloudFront vs Azure CDN - パフォーマンスとコストで選ぶべきCDNサービス

Posted at

Day 10: 徹底比較!AWS CloudFront vs Azure CDN - パフォーマンスとコストで選ぶべきCDNサービス

皆さん、こんにちは。エンジニアのAkrです。

「徹底比較! AWS vs Azure」シリーズ、Day 10へようこそ。

今回は、ウェブサイトやアプリケーションの表示速度を劇的に向上させるCDN(Content Delivery Network)を徹底比較します。AWSのAmazon CloudFrontと、AzureのAzure CDN及びAzure Front Doorを、実践的な観点から詳しく分析していきます。

CDN(Content Delivery Network)とは?

CDNは、世界中に分散配置されたサーバー(PoP: Point of Presence)を利用し、ユーザーの地理的に最も近い場所からコンテンツを配信するサービスです。

CDNの主な効果

  • レスポンス時間の短縮: 物理的距離を短縮することで配信速度を向上
  • サーバー負荷の軽減: オリジンサーバーへのアクセス集中を回避
  • 可用性の向上: 複数のPoPによる冗長化でサービス継続性を確保
  • 帯域幅コストの削減: オリジンサーバーからの転送量を削減

対象となるコンテンツ

  • 静的コンテンツ(画像、CSS、JavaScript、フォントファイル)
  • 動画・音声ファイル
  • ソフトウェアダウンロード
  • API レスポンス(キャッシュ可能な場合)

サービス概要の比較

AWS CloudFront

特徴:

  • AWS独自開発のグローバルCDNサービス
  • 2008年リリースの老舗サービス
  • AWSエコシステムとの深い統合

主要機能:

  • Lambda@Edge / CloudFront Functions
  • AWS Shield(DDoS保護)
  • AWS WAF統合
  • Real-time Logs
  • Origin Shield

Azure CDN / Azure Front Door

特徴:

  • 複数プロバイダー選択式(Microsoft、Akamai、Edgio)
  • Azure Front Door への統合移行中
  • Microsoftエコシステムとの強い連携

主要機能:

  • Rules Engine
  • Dynamic Site Acceleration (DSA)
  • Web Application Firewall (WAF)
  • Health Probes
  • Session Affinity

詳細機能比較

機能カテゴリ AWS CloudFront Azure CDN/Front Door
グローバルネットワーク 400+ PoPを世界50カ国以上に展開 プロバイダーにより異なる
(Microsoft: 118+ PoP、Akamai: 4000+ PoP)
オリジン統合 S3、EC2、ALB、API Gateway等との深い統合 Azure Blob Storage、App Service等との統合
エッジコンピューティング Lambda@Edge
CloudFront Functions
Rules Engine
Azure Functions(Front Door)
セキュリティ AWS Shield Standard/Advanced
AWS WAF
SSL/TLS証明書管理
DDoS保護
Azure WAF
Azure Key Vault統合
動的コンテンツ Dynamic Content Acceleration
Lambda@Edge処理
Dynamic Site Acceleration(DSA)
Azure Front Door最適化
リアルタイム分析 Real-time Logs
CloudWatch統合
Azure Monitor統合
診断ログ
プロトコル対応 HTTP/1.1, HTTP/2, WebSocket HTTP/1.1, HTTP/2, WebSocket

パフォーマンス比較

レスポンス時間

AWS CloudFront:

  • アジア太平洋地域: 平均 50-80ms
  • 北米: 平均 30-50ms
  • ヨーロッパ: 平均 40-70ms

Azure CDN:

  • プロバイダーにより大きく異なる
  • Microsoft: アジア太平洋地域 60-90ms
  • Akamai: グローバル平均 40-60ms

キャッシュヒット率

両サービスとも適切な設定により 85-95% のキャッシュヒット率を実現可能。

# CloudFrontでのキャッシュ制御例
Cache-Control: public, max-age=31536000
CloudFront-Is-Desktop-Viewer: true
CloudFront-Viewer-Country: JP
# Azure CDNでのキャッシュ制御例
Cache-Control: public, max-age=31536000
X-Azure-Ref: 0.3f1e2d17.1640995200.12ab34cd

セキュリティ機能の詳細比較

AWS CloudFrontのセキュリティ

// Lambda@Edgeでのセキュリティ実装例
exports.handler = (event, context, callback) => {
    const request = event.Records[0].cf.request;
    const headers = request.headers;
    
    // IP制限の実装
    const clientIP = headers['x-forwarded-for'] ? 
        headers['x-forwarded-for'][0].value : 
        event.Records[0].cf.request.origin.custom.domainName;
        
    if (isBlockedIP(clientIP)) {
        callback(null, {
            status: '403',
            statusDescription: 'Forbidden',
            body: 'Access denied'
        });
        return;
    }
    
    callback(null, request);
};

セキュリティ機能:

  • AWS Shield Standard(無料)
  • AWS Shield Advanced(有料、$3,000/月)
  • AWS WAF統合
  • SSL/TLS終端
  • Field-level Encryption

Azure CDN/Front Doorのセキュリティ

{
  "rules": [
    {
      "name": "IPRestriction",
      "priority": 100,
      "ruleType": "MatchRule",
      "matchConditions": [
        {
          "matchVariable": "RemoteAddr",
          "operator": "IPMatch",
          "matchValue": ["192.168.1.0/24"],
          "negateCondition": true
        }
      ],
      "action": {
        "type": "Block"
      }
    }
  ]
}

セキュリティ機能:

  • DDoS保護(標準)
  • Azure WAF
  • SSL/TLS終端
  • Private Link統合
  • Bot Management

料金比較

AWS CloudFront 料金構造

リージョン データ転送(GB あたり) HTTPリクエスト(10,000件あたり) HTTPSリクエスト(10,000件あたり)
米国・欧州 $0.085(最初の10TB) $0.0075 $0.01
アジア太平洋 $0.140(最初の10TB) $0.0075 $0.009
日本 $0.114(最初の10TB) $0.0075 $0.009

無料利用枠(12ヶ月間):

  • データ転送: 50GB/月
  • HTTPリクエスト: 2,000,000件/月

Azure CDN 料金構造

プロバイダー データ転送(GB あたり) HTTPリクエスト(10,000件あたり)
Microsoft $0.087(最初の10TB) $0.0075
Akamai $0.160(最初の10TB) $0.022
Edgio カスタム価格 カスタム価格

実際のコスト例

月間 100GB、100万リクエストの場合:

AWS CloudFront(アジア太平洋):

データ転送: 100GB × $0.140 = $14.00
HTTPSリクエスト: 100 × $0.009 = $0.90
合計: $14.90/月

Azure CDN(Microsoft):

データ転送: 100GB × $0.087 = $8.70
HTTPリクエスト: 100 × $0.0075 = $0.75
合計: $9.45/月

実際の設定例

AWS CloudFront 設定例

# CloudFormationテンプレート例
Resources:
  CloudFrontDistribution:
    Type: AWS::CloudFront::Distribution
    Properties:
      DistributionConfig:
        Enabled: true
        DefaultCacheBehavior:
          TargetOriginId: S3Origin
          ViewerProtocolPolicy: redirect-to-https
          CachePolicyId: 4135ea2d-6df8-44a3-9df3-4b5a84be39ad  # Managed-CachingOptimized
          Compress: true
        Origins:
          - Id: S3Origin
            DomainName: !GetAtt S3Bucket.DomainName
            S3OriginConfig:
              OriginAccessIdentity: !Sub 'origin-access-identity/cloudfront/${OriginAccessIdentity}'
        PriceClass: PriceClass_100  # 米国・欧州のみ
        ViewerCertificate:
          AcmCertificateArn: !Ref SSLCertificate
          SslSupportMethod: sni-only

Azure Front Door 設定例

{
  "name": "myFrontDoor",
  "properties": {
    "frontendEndpoints": [
      {
        "name": "frontendEndpoint1",
        "properties": {
          "hostName": "example.azurefd.net",
          "sessionAffinityEnabledState": "Disabled",
          "sessionAffinityTtlSeconds": 0
        }
      }
    ],
    "backendPools": [
      {
        "name": "backendPool1",
        "properties": {
          "backends": [
            {
              "address": "example.blob.core.windows.net",
              "httpPort": 80,
              "httpsPort": 443,
              "weight": 100,
              "priority": 1,
              "enabledState": "Enabled"
            }
          ],
          "healthProbeSettings": {
            "path": "/",
            "protocol": "Https",
            "intervalInSeconds": 30
          }
        }
      }
    ]
  }
}

実際の運用における考慮点

監視・アラート設定

CloudWatch(CloudFront):

import boto3

cloudwatch = boto3.client('cloudwatch')

# カスタムメトリクス作成例
cloudwatch.put_metric_alarm(
    AlarmName='CloudFront-HighErrorRate',
    ComparisonOperator='GreaterThanThreshold',
    EvaluationPeriods=2,
    MetricName='4xxErrorRate',
    Namespace='AWS/CloudFront',
    Period=300,
    Statistic='Average',
    Threshold=5.0,
    ActionsEnabled=True,
    AlarmActions=['arn:aws:sns:us-east-1:123456789012:my-sns-topic'],
    AlarmDescription='CloudFront 4xx error rate is high'
)

Azure Monitor(Front Door):

# Azure CLI を使ったアラート設定例
az monitor metrics alert create \
  --name "FrontDoor-HighLatency" \
  --resource-group "myResourceGroup" \
  --scopes "/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Network/frontdoors/myFrontDoor" \
  --condition "avg OriginLatency > 1000" \
  --description "Front Door origin latency is high"

パフォーマンス最適化のベストプラクティス

共通の最適化手法:

  1. 適切なキャッシュTTL設定

    # 静的リソース(長期キャッシュ)
    Cache-Control: public, max-age=31536000, immutable
    
    # API レスポンス(短期キャッシュ)
    Cache-Control: public, max-age=300
    
  2. 圧縮の有効化

    • Gzip/Brotli圧縮
    • 画像の最適化(WebP対応)
  3. HTTP/2の活用

    • 多重化による高速化
    • Server Push(対応している場合)

選択基準とおすすめパターン

AWS CloudFrontが適している場合

技術的要件:

  • AWSエコシステム中心の構成
  • Lambda@Edgeでのエッジコンピューティングが必要
  • AWS Shield Advancedレベルのセキュリティが必要

ビジネス要件:

  • グローバルなトラフィック分散が必要
  • セキュリティを最重要視
  • AWSの他サービスとの統合を最大化したい

コード例(S3との統合):

import boto3

# S3とCloudFrontの連携例
s3 = boto3.client('s3')
cloudfront = boto3.client('cloudfront')

# S3バケットポリシーでCloudFrontのみアクセス許可
bucket_policy = {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowCloudFrontAccess",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudfront.amazonaws.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-bucket/*",
            "Condition": {
                "StringEquals": {
                    "AWS:SourceArn": "arn:aws:cloudfront::123456789012:distribution/ABCDEFGHIJKLMN"
                }
            }
        }
    ]
}

Azure CDN/Front Doorが適している場合

技術的要件:

  • Microsoft エコシステム中心の構成
  • Office 365、Microsoft 365との連携
  • 複数のCDNプロバイダーからの選択が必要

ビジネス要件:

  • 特定地域でのパフォーマンス最適化(Akamaiネットワーク活用)
  • 段階的なマルチクラウド移行
  • Microsoft のエンタープライズサポートを活用

コード例(Azure Blob Storageとの統合):

// Azure SDK を使った統合例
using Azure.Storage.Blobs;
using Azure.ResourceManager.Cdn;

var blobServiceClient = new BlobServiceClient(connectionString);
var containerClient = blobServiceClient.GetBlobContainerClient("static-content");

// CDN エンドポイント経由でのアクセス最適化
var cdnEndpoint = "https://mycdn.azureedge.net";
var optimizedUrl = $"{cdnEndpoint}/static-content/{blobName}";

トラブルシューティング

よくある問題と解決法

キャッシュが効かない場合:

# CloudFront
aws cloudfront get-distribution-config --id ABCDEFGHIJKLMN
aws cloudfront create-invalidation --distribution-id ABCDEFGHIJKLMN --paths "/*"

# Azure CDN
az cdn endpoint purge --resource-group myResourceGroup --profile-name myCDNProfile --name myEndpoint --content-paths "/*"

証明書の問題:

  • CloudFront: ACM証明書は us-east-1 リージョンで発行必要
  • Azure Front Door: Key Vault または Azure 管理証明書を使用

パフォーマンステストの実施方法

測定ツールと手法

# cURLでのレスポンス時間測定
curl -w "@curl-format.txt" -o /dev/null -s "https://your-cdn-domain.com/test-file.jpg"

# curl-format.txt の内容例
     time_namelookup:  %{time_namelookup}\n
        time_connect:  %{time_connect}\n
     time_appconnect:  %{time_appconnect}\n
    time_pretransfer:  %{time_pretransfer}\n
       time_redirect:  %{time_redirect}\n
  time_starttransfer:  %{time_starttransfer}\n
                     ----------\n
          time_total:  %{time_total}\n

A/Bテストの実施

// JavaScript でのパフォーマンス測定
const performanceTest = async (urls) => {
  const results = [];
  
  for (const url of urls) {
    const startTime = performance.now();
    try {
      const response = await fetch(url);
      const endTime = performance.now();
      results.push({
        url,
        loadTime: endTime - startTime,
        status: response.status,
        size: response.headers.get('content-length')
      });
    } catch (error) {
      results.push({
        url,
        error: error.message
      });
    }
  }
  
  return results;
};

最終的な選択指針

決定フローチャート

総合評価

評価項目 AWS CloudFront Azure Front Door 重要度
パフォーマンス ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ High
機能の豊富さ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ High
セットアップの容易さ ⭐⭐⭐ ⭐⭐⭐⭐ Medium
コスト効率 ⭐⭐⭐ ⭐⭐⭐⭐ High
エコシステム統合 ⭐⭐⭐⭐⭐ (AWS) ⭐⭐⭐⭐⭐ (Azure) High
グローバル展開 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ Medium
セキュリティ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ High

まとめ

AWS CloudFrontAzure CDN/Front Door は、それぞれ異なる強みを持つ優秀なCDNサービスです。

AWS CloudFrontを選ぶべき場合

  • AWSエコシステム中心のアーキテクチャ
  • Lambda@Edgeによるエッジコンピューティングが必要
  • グローバル展開でのパフォーマンス最適化を重視
  • セキュリティ機能の統合を重視

Azure Front Doorを選ぶべき場合

  • Microsoftエコシステムとの統合が必要
  • コスト効率を重視
  • 段階的なクラウド移行を計画中
  • 特定地域でのパフォーマンス(Akamaiネットワーク活用)が必要

どちらを選択しても、適切な設定と運用により、優れたパフォーマンスとユーザーエクスペリエンスを実現できます。重要なのは、自社の技術スタック、要件、予算に最も適合するサービスを選択することです。

次回は、ロードバランサーの比較を行います。お楽しみに!


この記事が役に立ったら、ぜひ「いいね」やシェアをお願いします。質問やフィードバックもお待ちしています!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?