Azure CDN ってどんな特徴があるの？

※この記事は [Microsoft Azure Tech Advent Calendar 2019](https://qiita.com/advent-calendar/2019/microsoft-azure-tech) の 10 日目の記事です。

元物理なネットワークエンジニアの私が、Azure を触って学んだことを簡単にまとめてみています。

# この記事の内容

CDN サービスとして Azure が提供している Azure CDN について、その機能と特徴を纏めています。
他社 CDN サービスの比較はせず、Azure CDN のできることを纏めた内容になっています。

##### (念の為) CDN の概要
CDN はコンテンツの配信元 (オリジン) の前にキャッシュ サーバを置き、オリジン のコンテンツをキャッシュすることで、CDN が代理で要求に応答することで、オリジンの負荷を下げたり、効率よく応答を返すことで、**結果的**に高速化ができたりします。
(構成によっては残念ながら高速化ができないことも。。。)

CDN サービスは各社が提供していますが、色々と特徴があって選ぶのも大変ですよね、、、Azure CDN に関しては本記事が少しでも役に立てれば嬉しいです。

# Azure CDN ができること

Azure CDN は 4 つの SKU で現在サービス提供していて、**Microsoft** のプラットフォームだけではなく、**Verizon** 社の CDN プラットフォーム、**Akamai** 社の CDN プラットフォームも Azure CDN として利用ができます。

Azure CDN Standard from Microsoft
Azure CDN Standard from Akamai
Azure CDN Standard from Verizon
Azure CDN Premium from Verizon

特徴としては、Azure の各サービス (Azure Storage / Azure Web Apps / Azure Media Service など) から、Azure CDN を有効化できたり、お客様独自のドメイン (カスタムドメイン) の証明書を Azure CDN が代理で **無料で** 準備し、管理してくれるとことです。

Azure CDN のキャッシュの基本的な動作としては、クライアントから Azure CDN に要求があったコンテンツに対して、キャッシュがあればそれで応答し、キャッシュが無ければオリジンにコンテンツを取得する動作となります。
つまり、**Azure CDN はクライアントからの要求ありきでコンテンツを取得するので、Azure CDN がクライアントからの要求がない状態で自らオリジンにコンテンツを取得することは基本的に無いです。**

### Azure CDN Standard from Microsoft
Microsoft のプラットフォームを利用して提供している **Microsoft SKU** の特徴は、オリジンに Azure のサービスを利用していれば、CDN を提供している POP からオリジンへの通信は Microsoft のバックボーン ネットワーク内で完結し、更に転送量が無料になるところです。
Microsoft のバックボーンは世界中に張り巡らされているので、オリジンが Azure サービスなら、Azure CDN からオリジンへの通信が安定することが大きな特徴になりますね！

[Microsoft SKU で通信量が無料になるオリジン](https://docs.microsoft.com/ja-jp/azure/cdn/cdn-billing#which-origin-services-are-eligible-for-free-data-transfer-with-azure-cdn-from-microsoft)

Microsoft SKU では、CDN でキャッシュする期間などのキャッシュ規則がカスタマイズできず使い勝手が悪かったのですが、、、2019 年 11 月に Microsoft SKU で **ルール エンジン** と呼ばれるカスタマイズ機能が実装され、ついにキャッシュ期間の変更などができるように！これは動作チェックしないとですねー。

[Microsoft SKU のルール エンジン](https://docs.microsoft.com/ja-jp/azure/cdn/cdn-standard-rules-engine)

カスタムドメインの HTTPS 有効化においては、DigiCert 社の証明書が適応されますが、独自に準備した証明書を Azure Key Vault にアップロードすることで利用することができますが、**許可された認証局以外は利用できない** ので注意が必要です。

[Microsoft SKU で利用できる認証局](https://docs.microsoft.com/ja-jp/azure/cdn/cdn-troubleshoot-allowed-ca)

### Azure CDN Standard from Akamai
CDN プロバイダーとして最も有名な Akamai 社のプラットフォームを利用して、CDN サービスが使えるのが **Akamai SKU** です。Akamai の CDN プラットフォームは、詳細は公開されていませんが、世界中のインターネットのトラフィックを処理できる巨大なプラットフォームで、独自に最適化された通信で CDN サービスが利用できるのが特徴といえます。

Akamai 社の CDN プラットフォームは Luna ポータルと呼ばれる専用ポータルから、様々な機能をカスタマイズできるのですが、残念ながら Azure CDN では Luna ポータルは使えず、利用できる Akamai CDN の機能は **Azure ポータルで設定できる機能のみ** となっています。

Akamai SKU では、現時点 (2019 年 12 月) では独自に準備した証明書をつかったカスタムドメインの HTTPS 通信の有効化はできず、カスタムドメインの HTTPS 有効化には Let's Encrypt の証明書が適応されるため、他の SKU と違って DNS レコードに追加で設定が必要です。

```ruby:qiita.rb
 "_acme-challenge.<custom domain hostname> -> CNAME -> <custom domain hostname>.ak-acme-challenge.azureedge.net"
```

### Azure CDN Standard & Premium from Verizon
Verizon SKU は、Verizon Digital Media Service が提供する CDN プラットフォームで CDN サービスが利用できます。詳細は公開されていませんが、Verizon は世界中で通信サービスを提供している通信キャリアでもあり、動画コンテンツを CDN で提供することを得意としているのが特徴といえます。そのため、Azure Media Service でのデフォルトのエンドポイントの提供は、Verizon SKU で構成されるようになっています。

Azure CDN としては、唯一 Premium SKU を提供しており、ルール エンジン (Microsoft SKU は全く別物) を活用することで、細かくキャッシュ規則を設定したりすることができるのが大きな特徴です！ 
Premium Verizon SKU のルール エンジンなどの設定は、Azure ポータルでは設定できず、Azure ポータルからリンクされる独自の管理ポータルで設定するので、少し手間とはなりますが、その分使える機能は他の Standard と比べてかなり多いです。

[Premium Verizon のルール エンジンで使える機能](https://docs.microsoft.com/ja-jp/azure/cdn/cdn-verizon-premium-rules-engine-reference-features)

また、Azure CDN で唯一オリジンから事前にコンテンツを取得する機能を Verizon SKU は持っています。しかし、一度に要求できる数に制限があったりと、何でもかんでも事前に取得できる動作ではない所は要注意です。

[コンテンツの事前読み込み](https://docs.microsoft.com/ja-jp/azure/cdn/cdn-preload-endpoint)

# 実際に触ってみる
Azure CDN は実は **Azure CDN からの "送信データ転送量"** に対して従量課金で費用が発生するので、固定のランニングコストがかからない！つまり、検証で使っても発生するコストが安いのが良いところです。クラウド サービスは使わなくなったら消すだけですし、Azure CDN は手軽の検証できるので、どんどん作ってみて、実際の動作とか、手順とかも色々試してみてるといいと思います。

[Azure CDN のチュートリアル](https://docs.microsoft.com/ja-jp/azure/cdn/cdn-create-new-endpoint)
[Azure Web Apps のコンテンツを Azure CDN にホストする] (https://docs.microsoft.com/ja-jp/azure/cdn/cdn-add-to-web-app)
[Azure Storage の静的サイトを Azure CDN にホストする](https://docs.microsoft.com/ja-jp/azure/storage/blobs/storage-blob-static-website-custom-domain)

###  Azure CDN の諸注意 ??

Azure CDN は 世界中の POP で展開しているサービスなので、デプロイに時間を要します。設定変更も Azure ポータルで "完了" って出てから、実際に反映されるまで結構時間かかるので、設定変更などをした際は少し気長に待ってください。 
同じエンドポイント名で **削除 > 再構成** を短時間ですると、削除の内部処理が終わっていなくて、エラーになってしまうことを確認しているので、少なくとも 1 時間以上は空けて試した方が吉です。

# まとめ
Azure CDN の SKU 毎の特徴についてまとめてみました。他社の CDN サービスと比較する前に、Azure CDN だけでこんなに違いがあるので結構おなか一杯になりますね。

Azure CDN の活用方法は色々あると思います。偉大な先人たちが Azure CDN を活用して台風から日本を守ったり、格安で SSL が有効化されたページを作ったりとしているので、色々試してみるといいかなと思います。

[台風19号を CDNで迎撃した裏話](https://www.slideshare.net/hois/20191031-arakawa-camera-on-azure-cdn-for-typhoon-hagibis)
[WebApps ＋ Azure CDNを使い年間1,000円程度で独自ドメイン・SSL対応済み高負荷対策なWordPressサイトを 作ってみた話。](https://zuvuyalink.net/nrjlog/archives/3528)

# 参考サイト
[Content Delivery Network の価格](https://azure.microsoft.com/ja-jp/pricing/details/cdn/)
[Azure CDN の概要](https://docs.microsoft.com/ja-jp/azure/cdn/cdn-overview)
[Azure CDN の SKU 毎の機能比較](https://docs.microsoft.com/ja-jp/azure/cdn/cdn-features)