Azure Content Delivery Network

[Microsoft Azure Content Delivery Network](https://azure.microsoft.com/ja-jp/services/cdn)を使ったコンテンツ配布方法を調べてみた。

# コンテンツデリバリネットワーク(Content Delivery Network, CDN) 
##CDNとは
- Webコンテンツをインターネット経由で配信するために最適化されたネットワークのこと。
- 画像や動画などの静的コンテンツを、Webコンテンツが管理されているサーバーとは、別のサーバーにキャッシュし、代わりに配信することで、負荷が分散され、Webサイトの表示速度の向上を図る仕組み。

###主な商用CDN
- [Akamai](https://www.akamai.com/jp/ja/)
- [Limelight Networks](https://www.limelight.com/)
- [Amazon CloudFront](https://aws.amazon.com/jp/cloudfront)

##Azure の Content Delivery Network

[Azure CDN の概要 \| Microsoft Azure](https://azure.microsoft.com/ja-jp/documentation/articles/cdn-overview/)

> Azure Content Delivery Network (CDN) では、戦略的に配置された場所に静的 Web コンテンツをキャッシュし、ユーザーへのコンテンツ配信に最大スループットを使用できます。CDN では、世界各地の物理ノードにコンテンツをキャッシュすることによって、高帯域幅コンテンツを配信するためのグローバル ソリューションを開発者に提供します。
>CDN を使用して Web サイト資産をキャッシュすると、次のような利点があります。
>
> - エンド ユーザーのパフォーマンスとユーザー エクスペリエンスの向上。コンテンツの読み込みに複数のラウンドトリップか必要なアプリケーションを使用する場合は特にそうです。
> - 製品発表イベントの開始時のような、瞬間的高負荷を処理しやすくする大型のスケーリング。
> - ユーザー要求を分散させ、コンテンツをエッジ サーバーから配信することによる、配信元へのトラフィックの削減。


# ストレージ

CDNでキャッシュする元となるコンテンツを収容するオリジンサーバーが必要です。Azureには静的コンテンツを収容すのに最適な　[Azure Storage](https://azure.microsoft.com/ja-jp/services/storage/) があります。

[Storage の概要 \| Microsoft Azure](https://azure.microsoft.com/ja-jp/documentation/articles/storage-introduction/)

> **Azure Storage とは**
> クラウド コンピューティングは、スケーラブルで、耐久性と高可用性に富んだストレージを必要とするアプリケーションに適した新しいシナリオを実現します。それこそがまさに、Microsoft が Azure Storage を開発した理由です。Azure Storage は、開発者が新しいシナリオをサポートするための大規模なアプリケーションの構築に使用できるだけでなく、Azure Virtual Machines の堅牢性を裏付けるストレージ基盤となります。
>
> **Azure Storage サービスの概要**
> Azure Storage では、4 つのサービスが提供されます。Blob Storage、Table Storage、Queue Storage、および File Storage です。
> 
> * Blob Storage は、非構造化オブジェクト データを格納します。ドキュメント、メディア ファイル、アプリケーション インストーラーなど、任意の種類のテキスト データやバイナリ データを BLOB として保存できます。Blob Storage は、オブジェクト ストレージとも呼ばれます。
> 

## ストレージの作成

今回は、Blob Strage (オブジェクトストレージ)を使用し、メディアコンテンツを収容してみます。

１. Azure ポータル で、ストレージ->ストレージアカウントを作成
    ![ストレージ_-_Microsoft_Azure.png](https://qiita-image-store.s3.amazonaws.com/0/12177/2e73b7ff-93b6-71c0-ce64-da3e47796d64.png)
2. [名前]を入力し、[リソース グループ]等を選択し、[作成]をクリック 
    ![ストレージ_アカウントの作成_-_Microsoft_Azure.png](https://qiita-image-store.s3.amazonaws.com/0/12177/44f1a483-048f-c0e3-da05-0ff9b1669ecf.png)
3. 作成されストレージアカウントでBlob サービスをクリック
    ![samplecontents2_-_Microsoft_Azure.png](https://qiita-image-store.s3.amazonaws.com/0/12177/221e4adc-5274-88f1-6466-d9fcdba79151.png)
4. Blob サービスの[+コンテナー]をクリックし、新しいコンテナーに[名前]を入力し、[作成]をクリック
    ![新しいコンテナー_-_Microsoft_Azure.png](https://qiita-image-store.s3.amazonaws.com/0/12177/21948945-be82-085f-c728-e8c3b0ce23d7.png)
5. 新しいコンテナーが作成される
    ![BLOB_サービス_-_Microsoft_Azure.png](https://qiita-image-store.s3.amazonaws.com/0/12177/883a27e4-f7e9-20aa-cc34-006b32b28367.png)

## ストレージにコンテンツのアップロード

[Microsoft Azure Storage Explorer](http://storageexplorer.com/)を使用します。

1. [Microsoft Azure Storage Explorer](http://storageexplorer.com/)をダウンロードとインストール
2. ツールを起動したら、画面の左上のコンセントアイコンをクリック
    ![Microsoft_Azure_Storage_Explorer.png](https://qiita-image-store.s3.amazonaws.com/0/12177/8f959745-fa8e-f4e0-1aa6-656f031e548c.png)
3. Connect to Azure Storage のダイアログで ストレージ アカウントのアクセス キーを入力し、[次へ] をクリック
    ![Microsoft_Azure_Storage_Explorer_1.png](https://qiita-image-store.s3.amazonaws.com/0/12177/e6e49716-5bfe-6fb2-1d38-afe02da90b41.png)

    **※ストレージ アカウントのアクセス キー**
    ![アクセス_キー_-_Microsoft_Azure.png](https://qiita-image-store.s3.amazonaws.com/0/12177/837f8d98-037c-5a92-487c-3aa62230c6d0.png)
4. [Account Name] ストレージ アカウント名を入力し、[Next] をクリック
    ![Microsoft_Azure_Storage_Explorer_2.png](https://qiita-image-store.s3.amazonaws.com/0/12177/d72634d2-9a48-fc85-b0b7-d9319ccb7194.png)
5. ツリーにストレージ アカウントが追加される
   [Upload]ボタンでファイルをアップロード
    ![Microsoft_Azure_Storage_Explorer_3.png](https://qiita-image-store.s3.amazonaws.com/0/12177/ce4ffe64-6e4e-612b-b7cf-000fdbcc4a74.png)
6. Upload filesのダイアログでファイルを指定して、[Upload]をクリック
    ![Microsoft_Azure_Storage_Explorer_4.png](https://qiita-image-store.s3.amazonaws.com/0/12177/a4739f3c-52b1-5219-7cc7-d4069497d290.png)
7. Azure ポータルのストレージ　アカウントで、ファイルがアップロードされていることが確認できる
    ![contents_-_Microsoft_Azure.png](https://qiita-image-store.s3.amazonaws.com/0/12177/20a102c7-9286-1a36-d822-9c5feefa6336.png)
8. コンテナの[アクセス ポリシー]をクリックし、[コンテナーの編集]で[アクセスの種類]を[BLOB]に変更
    *CDNや外部からのパブリックアクセスを許可する*
    ![コンテナーの編集_-_Microsoft_Azure_2.png](https://qiita-image-store.s3.amazonaws.com/0/12177/6a0e7040-f083-e7e6-ccea-3e9388cd3281.png)

#CDN

Blob Strage (オブジェクトストレージ)に収容したメディアコンテンツをCDNで配信してみます。

1. Azure ポータル で、Web + モバイル -> CDNを作成
    ![Web___モバイル_-_Microsoft_Azure.png](https://qiita-image-store.s3.amazonaws.com/0/12177/3d47fc31-d39d-22bf-b465-6d0346e3d801.png)
2. CDN のプロファイルで、[名前]の入力、価格レベルの選択を行い、[作成]をクリック
    ![価格レベルを選択する_-_Microsoft_Azure.png](https://qiita-image-store.s3.amazonaws.com/0/12177/ac736483-9138-d200-69b3-ab044acd9ce3.png)
3. 作成されたCDNで、エンドポイントを作成する。[+エンドポイント]をクリック
    ![samplecdn2_-_Microsoft_Azure.png](https://qiita-image-store.s3.amazonaws.com/0/12177/0b2248b0-4e2c-6795-d25d-d80aa4957590.png)
4. エンドポイントの追加で、[名前]の入力、[配信元の種類]で[ストレージ]を選択、[配信元のホスト名]にストレージアカウントを選択し、[追加]をクリック
    ![エンドポイントの追加_-_Microsoft_Azure.png](https://qiita-image-store.s3.amazonaws.com/0/12177/22cb93d0-00a4-62a9-57a8-21f1fb7cbee6.png)
5. エンドポイントが追加される
    ![samplecdn2_-_Microsoft_Azure_2.png](https://qiita-image-store.s3.amazonaws.com/0/12177/4f5c801b-353b-cb00-5a2a-2254253d1c79.png)

    **エンドポイントの名前で、ドメイン ``<endpointname>.azureedge.net`` でキャッシュされたリソースにアクセスできるようになる。**

#プライベートコンテンツを配信

Webコンテンツは、アプリケーションで認証されたユーザや一定期間に限りアクセス可能とする制御として、署名付きURL (signed URL) / One-Time URL を利用することがよくあります。
[Azure Storage](https://azure.microsoft.com/ja-jp/services/storage/)では、Shared Access Signature (SAS)を使って制限付きのURLを発行することが可能です。
![アカウントの_Shared_Access_Signature__SAS__-_Microsoft_Azure.png](https://qiita-image-store.s3.amazonaws.com/0/12177/39429e1a-1ee5-cc08-2925-f155dc18b521.png)
制限する項目を設定し、[SASの生成]をクリックすると、URLが作成されます。

.NETではプログラムでSASの生成が可能なようです。
参考）[Shared Access Signatures \(SAS\) の使用 \| Microsoft Azure](https://azure.microsoft.com/ja-jp/documentation/articles/storage-dotnet-shared-access-signature-part-1/)

[Microsoft Azure Content Delivery Network (CDN)](https://azure.microsoft.com/ja-jp/services/cdn)からのアクセス時も、SASのクエリーパラーメータを付与すると参照が可能です。