今回は、Cloudnを利用してオブジェクトストレージに置いた動画を、独自ドメイン・CDN経由で配信する方法を試してみましょう。
オブジェクトストレージは、単体でも簡易的な配信機能を持っていますが、高負荷なアクセスになるとスループットは低下します。独自ドメインでアクセスすることで、初めはCDNを経由せずに直接配信をしながら、負荷が高まったときURLはそのままで、CDN経由に、こっそり?切り替えることができます。
それでは試してみましょう。
オブジェクトストレージの設定
まず1つのWebサイトのかたまりに相当するバケットを作成します。相当するとは、バケット名は、実質URLのホスト名になるためです。
その時のバケット名は、完全修飾のドメイン名(FQDN)を付けます。ホスト名に相当するところに、FQDNを設定するところに違和感がありますが、そういう仕様のようです。下図の例では、obj.bizsrv.jp で、アクセスする意味になります。バケットを作成したら、動画ファイルをアップします。
次にアップした動画を選択して、動画に割り当てる権限を変更します。「個別アクセス権設定」の箇所で、Publicの項目欄の「ACP読み出し可能」にチェックをいれます。「読み出し可能」は、チェックを入れても入れなくても構いませんが、チェックを入れるとブラウザから直接オブジェクトストレージにアクセスできます。つまり、CDNを使わない場合は、チェックは必要です。
登録の際、オブジェクトストレージへのURLを知る必要があるため、「パブリックURLアクセス」からURLを確認します。アドレスを見るだけなので確認したら無効状態で構いません。
obj.bizsrv.jp.str.cloudn-service.com であることを確認してメモしておきます。
CDNの設定
つぎにCDNの管理画面に入り設定を行います。
オリジンサーバーホスト名に、先ほどメモした、オブジェクトストレージのURLを「オリジンサーバーホスト名」に、そして独自ドメインのFQDNを「公開URL」に設定します。そうすると、wpcなんちゃらとcname(別名)のアドレスが表示されます。アクセス経由は、下図のような感じになります。
DNSの設定
最後にDNSの設定を行います。公開URLに対して、CNAMEを設定します。CNAMEの値は、CDNで出力されたアドレスになります。TTLは、公開URLが有効になった段階で、3600に書き換えます。
確認してみる
これで設定は完了です。正しく公開URLでアクセスできるか確認してみましょう。ただしCDNのキャッシュが有効に機能するまで1時間くらいかかるようなので、すぐにアクセスしてもオリジンの方に繋がりっぱなしになるので注意してください。
CDNから配信されているか確認をするため、「応答ヘッダー」の内容を確認します。IEでは「F12 開発者ツール」を有効にして「ネットワーク」タブから「キャプチャ開始」ボタンを押して、ネットワークのキャプチャーを行います。一度目のアクセスでは、オブジェクトストレージからの配信になりますが、何度かアクセスすると、X-Cache にHITという項目が表示されます。これが表示されたらCDNから配信されています。ちなみにサポートに聞いたところ、キャッシュの有効期限は、7日間です。
オリジンサーバー(オブジェクトストレージ)から配信されている状態
CDNから配信されている状態
このように、ApacheなどのWebサーバーでなくても、オブジェクトストレージをオリジンサーバーとして、独自ドメインでCDNからの配信ができることを確認しました。ワンタイムURLなどのアクセス制限は付けることはできませんが、構成がシンプルなため一つのやり方としては有効な方法だと思います。
(c) copyright 2008, Blender Foundation / www.bigbuckbunny.org
今回は、ワンタイムURLを実現するやり方について見てみようと思います。ワンタイムURLとは、一般的に、アクセス可能は期限、回数によりそのURLが無効になる仕組みのことを指します。
CDN77.comのワンタイムURLは、Secure Tokenといい、アドレスを発行してから1時間、1日というような、期限を指定することができます。
URLの表記の仕方
通常、動画にアクセスするときは、次のようなアドレスになりますが、
http://ドメイン/bunny5.mp4
Secure Token のアドレスは、?以降にパラメータが付きます。
http://ドメイン/bunny5.mp4?secure=43KZhIfufpGzFdNvg==,1379658924
このパラメータは、自身でPHPなどのプログラム言語を用いて追加します。そして、このアドレスでWebサーバーにアクセスして、適切なパラメータと判断されると指定期間で接続できるようになります。
DRMのような動画ファイルにセキュリティを埋め込む手法と比べれば弱いですが、そこまで必要ない場合は、有効なやり方です。セキュリティに対しての考え方は、どのくらいの手間とコストを掛けられるのか、また妥協できるのかがポイントになるでしょう。
設定の仕方
それでは実際に設定をしてましょう。
CDN77.comでは、PHPでのやり方が説明されています。これをそのままやってみようと思います。
まずCDN77.comのサイト管理から、Secure Tokenを有効にして、トークンコードを取得します。このコードがCDNのWebサーバーと、URLのパラメータで一致すれば Secure Token として動作します。外部には知られてはいけない秘密の情報ですのでむやみに公言しないように注意してください。
つぎに、例えば 5秒でアドレスが無効になるようにするコードは、次のようになります。
2行目のtime()で現在の時刻を取得して、そこから5をプラスすることで5秒後に無効になる表現をしています。そして4行目にトークンコードを埋め込みます。これは、MD5でハッシュ化して元のトークンコードがわからないようにして、そしてBase64でエンコードしています。
このPHPコードにアクセスすると、このようにURLが生成されます。
このURLをブラウザアドレスにコピペしてアクセスすると、動画が表示されます。
つぎに5秒経ってから、ブラウザをリロードすると、接続に失敗して動画を見ることができなくなります。これがワンタイムURLの効果です。
ワンタイムURLで注意するところ
一見便利のように見えますが、肝となるのが期限の設定です。あまり長すぎると意味がなくなり、短すぎるとネットワークの遅延などにより接続される前に切れる可能性があります。また、レンジリクエスト可能な動画では、どうなるでしょうか。
レンジリクエストは、キャッシュされていない位置に、シーク移動ができ、再生することができますが、そのときサーバーに再接続をしています。そのため、先にアドレスが無効になると、正常に動作いたしません。ある程度、余裕を持った設定が必要になります。
先にアドレスが無効になってしまったケース
ワンタイムURLは、正しい設定をすれば、動画ファイルに特別な設定をせずにセキュアな配信ができるようになります。ただ、メリットもあればデメリットもありますので、使いどころ次第と言っていいかもしれません。
(参考)「HTML5 Video レンジリクエストを利用したシーク移動の仕組み」
https://bizvalley.co.jp/blog/1801.html
前回、概要について書きましたので、今回は実際に設定してみようと思います。
まず、どういう配信をしたいのか、要件を決めましょう。
今回は、CDN(コンテンツデリバリーネットワーク)を、試してみようと思います。CDNは、画像や動画ファイルなど主に静的ファイルの配信を、配信元のサーバから、肩代わりしてくれるキャッシュサーバの一種で、CDNのサーバは、世界中に配置されていてクライアントPCから地理的に近いサーバに接続されます。CDNを利用することで、配信元のサーバ負荷を下げることができ、高負荷にも耐えられる環境を容易に構築することができます。
通常の場合
CDNを利用する場合
CDNで一番規模の大きなところでは、Akamai(アカマイ)が有名で企業ユースで利用されています。CDN界のガリバーといっていいでしょう。
CDNの料金プランは、どれだけのデータを配信したかという、従量課金が基本です。
(1) はじめから従量課金のもの
(2) 一定の配信量(例えば500G)まで費用固定の基本料金があり、それを超えると従量課金になるもの
流した量だけ費用がかかるという面で、水道水や電気の利用と似ているかもしれません。スマートフォンのデータ通信では、上限7Gなど制限があり、それに達すると通信規制が入りますが、CDNでは、青天井なので注意が必要です。
変わった所では、無料~定額で利用できる、CloudFlareというものもありますが、さすがに無料範囲では、ブログなどちょっとした個人サイトを高速化することがメインのようですので、用途は限定されているようです。
CDNを利用せず自前でサーバを複数台利用する場合と、CDNを利用する場合どちらが良いかはケースバイケースですが、動画のようなデータ量が大きい場合、定額で回線帯域を確保するより、CDNの従量課金の方が帯域確保に悩むことなく、安く済むケースがあるため、そのあたりの判断が肝になってきます。
なかには、YouTubeで高画質の動画をアップロードしたり、視聴できることが無料で、当たり前だと感じる方もいるかもしれませんが、自前でやろうとすると、実は結構大変なことで配信コストが重く圧し掛かってきます。YouTubeは、そのあたりのコストを全部肩代わりしてくれていると言っていいでしょう。
従量課金なので、動画の場合、同じ画質であっても低い圧縮率より、高い圧縮率が有利です。それがストレートに配信コストに跳ね返ってくるためで、綺麗だからといって、むやみに動画のビットレートを上げるより、どれだけ下げられるのか?を考えたほうがいいかもしれません。
CDNのサービスは、単純にキャッシュとして流すだけでなく、ベンダーによってさまざまなサービスがあります。1つの動画をアップロードすると、モバイル用に自動変換するものや、会員向け動画で重宝するワンタイムURL(時間が経つとURLが無効になる)ものなどあります。また海外のCDNベンダーを利用するときは、少なくとも日本国内にキャッシュサーバーがあることが望ましいです。
CDN Planetというサイトでは、さまざまなCDNを比較してしていますので、ちょっと見てみるのもいいでしょう。
次回は実際にCDNの設定をしてみようと思います。
動画配信でCDNを使ってみよう (設定の仕方)