Alibaba Cloudを使った、中国国内でのCDN配信について

## 1. はじめに
AlibabaCloud 日本サイトから購入したCDNサービスで、中国でCDN配信が可能かどうか検証したのでまとめます。
中国でのCDN配信を行うためには、その配信するコンテンツのドメインがICP登録されている必要があるのでその点は注意です。

下記のドメイン名の環境で検証しました。

- 環境オリジンサーバドメイン: www.xxxxxxxx.com
- CDNドメイン: cdntest.xxxxxxxx.com

まずはAlibaba Cloud CDNについて簡単に解説します。
`www.xxxxxxxx.com`へアクセスするとオリジンサーバへ直接問い合わせにいきます。
`cdntest.xxxxxxxx.com`へアクセスすると世界各地にあるエッジノードにアクセスし、そこからコンテンツが配信されます。

<img width="400" alt="スクリーンショット 2017-06-05 18.37.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/259/b03129fd-fc9f-4ab6-51f2-736eacede1f5.png">

よく勘違いされがちですが、CDNのノードはAlibaba Cloud上のリージョン内にあるものではありません。
エッジノードはクラウド事業者だけでなく、ISPなど様々な業者と協力して構築しているため、リージョン内だけでなく世界各地に存在しています。

## 2. 設定内容
### (1) CDNコンソールから「新しいドメインの追加」
- CDNドメインをcdntest.xxxxxxxx.com に設定
- ビジネスタイプ：小さなファイル
- オリジンサイトのタイプ：オリジンサイトのドメイン名
- 加速対象地域：グローバル (中国および海外)

参照) https://jp.aliyun.com/help/doc-detail/27116.htm

加速対象地域で、中国本土あるいはグローバルを選択する場合（つまり中国でのCDN配信含む場合）、ドメイン名が中華人民共和国工業情報化部 (MIIT) に登録されている必要があります。ICPライセンスの取れたドメインであれば登録できます。

AlibabaCloudでは、CDNの配信地域を下記の３つから選択できます。
1と2を選択する場合はドメインがICPライセンス登録されている必要があります。

1. 中国本土
2. グローバル（中国および海外）
3. 海外（中国以外）

ちなみに、ICPライセンスの取れていないドメインで登録しようとすると下記のエラーが表示されます。知らない間にライセンス違反になる、といったことはないので安心です。

<img width="1073" alt="ICPライセンスの取れていないドメイン.png" src="https://qiita-image-store.s3.amazonaws.com/0/259/e8613e59-04a6-8638-37f6-044b12faabf9.png">

### (2) DNS、CNAMEレコード設定
ドメインの追加に成功すると、CNAME情報が得られます。
　CNAME cdntest.xxxxxxxx.com.w.alikunlunar.com

<img width="1081" alt="ドメイン追加後.png" src="https://qiita-image-store.s3.amazonaws.com/0/259/b8435ae7-33e1-14f5-82ce-17a9ec660933.png">

取得できたCNAMEをDNSに登録する必要があります。
この作業はAlibaba Cloud上での操作ではなく、DNS側の作業となるので、ドメインを取得したDNS事業者などで登録作業が必要です。

CNAMEとは、「Canonical NAME」の略で、別名を定義するレコードです。
特定のホスト（FQDN）を別のホスト（FQDN）に転送したいときによく利用します。
設定すると、
`cdntest.xxxxxxxx.com` の本当の名前は,
`cdntest.xxxxxxxx.com.w.alikunlunar.com` である意味することになります。

### (3) キャッシュ設定
「キャッシュの更新」の項目からCDN配信をさせるコンテンツを登録する。
今回は`banner2.jpg`という画像をCDNで配信させることとします。
参考) https://jp.aliyun.com/help/doc-detail/27140.htm

![cdn-img1_new.png](https://qiita-image-store.s3.amazonaws.com/0/259/139d1e2e-ae58-01fb-9805-02f125deb071.png)

![cdn-img2_new.png](https://qiita-image-store.s3.amazonaws.com/0/259/84b5974e-3c26-30f2-4099-bcb4d2130ef4.png)

## 3. コンテンツ配信の確認
### (1) コンテンツ配信確認
まず、キャッシュしたコンテンツにアクセスし、画像データが閲覧できることを確認します。
ブラウザから`http://cdntest.xxxxxxxx.com/images/banner2.jpg`に接続し、画像が表示されることを確認しました。

### (2) IPアドレス確認
単にコンテンツが配信されているだけでは、中国のCDNノードから配信されているかどうかはわかりません。配信元のIPアドレスを確認することで、どこのノードから配信されたものか確認することができます。

### スピードは？
北京リージョンからCDNノードを利用して画像をダウンロードしたときと、
同じサーバからオリジンサーバ（日本）を利用してダウンロードしたときのスピードの違いです。
平均値を取っているわけではないですが、一例として明らかな差がでることがわかりました。
CDNノードからのダウンロードが`0.2s`で、オリジンサーバからのダウンロードが`1.2s`でした。

```
【CDNノードからのダウンロード】
# wget cdn.xxxxx.com/soba.jpg
--2017-02-03 09:49:12--  http://cdn.xxxxx.com/soba.jpg
cdn.xxxxx.com (cdn.xxxxx.com) をDNSに問いあわせています... 66.198.24.184, 66.198.24.183
cdn.xxxxx.com (cdn.xxxxx.com)|66.198.24.184|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 1163993 (1.1M) [image/jpeg]
`soba.jpg.3' に保存中

100%[=============================================================================================================>] 1,163,993   6.45MB/s 時間 0.2s

2017-02-03 09:49:14 (6.45 MB/s) - `soba.jpg.3' へ保存完了 [1163993/1163993]
```

```
【オリジンサーバからのダウンロード】
# wget xxxxx.com/soba.jpg
--2017-02-03 09:49:24--  http://xxxxx.com/soba.jpg
xxxxx.com (xxxxx.com) をDNSに問いあわせています... 107.154.159.39, 107.154.180.39
xxxxx.com (xxxxx.com)|107.154.159.39|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 1163993 (1.1M) [image/jpeg]
`soba.jpg.4' に保存中

100%[=============================================================================================================>] 1,163,993    974KB/s 時間 1.2s

2017-02-03 09:49:26 (974 KB/s) - `soba.jpg.4' へ保存完了 [1163993/1163993]
```

#### 北京からのコンテンツアクセス
北京リージョンにECSを購入し、そこから`dig cdntest.xxxxxxxx.com`で配信するCDNノードのIPアドレスを確認しました。

![cdn-img3_new.png](https://qiita-image-store.s3.amazonaws.com/0/259/fca27abf-255a-51d5-f956-9ce2f3ae2e09.png)

Alibaba Cloudでは指定したIPアドレスがAlibaba CloudのCDNノードのものかどうか判定する「IP検出ツール」があります。これを利用して上記のIPアドレスを確認します。
確認すると、中国の天津(tianjin)のノードであることがわかります。

![cdn-img4.png](https://qiita-image-store.s3.amazonaws.com/0/259/c89f0e1c-0d61-b7e2-430b-165d04bdb374.png)

#### 北京からのコンテンツアクセス to ICP登録なし
さらに、ICP登録されていないドメイン(`cdn.yyyyyyyy.org`とする。)に、同じ中国北京サーバからCDNアクセスしてみました。
ICP登録のない場合は中国本土での配信はできないはずなので、どこから配信されるか興味ありますよね？
結果は予想通り、天津ではなく香港のCDNノードから配信されることが確認できました。
ICP登録のないドメインでは、中国本土以外で一番近いノードから配信されます。

![cdn-img5_new.png](https://qiita-image-store.s3.amazonaws.com/0/259/8f8b5b78-f0ea-958b-4914-a41b7c38a670.png)

<img width="698" alt="cdn-img6.png" src="https://qiita-image-store.s3.amazonaws.com/0/259/1def36be-de0c-0f34-ffc1-6fb08e539f3d.png">

#### 日本からのコンテンツアクセス
日本から同様にコンテンツのアクセスを確認します。日本にも配信ノードがあることがきちんと確認できました。

<img width="696" alt="cdn-img7.png" src="https://qiita-image-store.s3.amazonaws.com/0/259/887601b6-71ec-fa0d-fc43-56a8a406b898.png">

## 4. まとめ
Alibaba Cloudの日本サイトからでも中国でのCDN配信が可能であることが確認できました。
ただし、その条件として、配信するサイトのドメインがICP登録されていることが前提となります。
また、「加速対象地域」で中国を含まない選択を行った場合は、中国国内からのアクセスの場合でも中国以外のCDNノードから配信が行われます。