アマゾン ウェブ サービス ジャパンは6月1日から3日間にわたり、「AWS Summit Tokyo 2016」を開催した。同イベントは、100を超えるセッションでAWSクラウドの最新動向が紹介される年次カンファレンス。本稿では、3日目に開催された事例セッション「ドワンゴがAWSを使ってメディアストレージ基盤を開発してみた」の模様をお届けする。

効率の良い開発に必要なこと

講演に登壇したのは、ドワンゴ フロンティア開発部第二セクションの坂井 薫平氏だ。フロンティア開発部とは、「新規プロダクトをガンガン作ってリリースしていく部署」(坂井氏)であり、2015年2月に発足して以来、同年10月にはプレゼン共有サービス「ニコナレ」、2016年4月には角川ドワンゴ学園が経営するネット通信制高校「N高等学校」関連システムと次々にリリースしてきた。

ドワンゴ フロンティア開発部第二セクション 坂井 薫平氏

ドワンゴ フロンティア開発部第二セクション 坂井 薫平氏

では、こうした新規プロダクトを効率良く開発していくためには、何が大切なのだろうか。

そのポイントとして、坂井氏は「車輪の再発明を防ぐこと」を挙げる。ここで言う「車輪」とは、サービスを構成する処理のうち、汎用性の高いもののこと。どのサービスでも使うような処理(車輪)は、チームを問わず使えるように共通化・基盤化しておこうというわけだ。

その一環として坂井氏が開発したのが、「メディアストレージ基盤」である。ドワンゴのサービスでは、ユーザーが画像や動画といったメディアファイルをサーバにアップロードし、サービス利用者がそれを視聴するタイプのものが多い。だからと言って、サービスごとに毎回、アップロードや配信の仕組みを開発するのは、それこそ”車輪の再発明”である。そこで、「画像」「PDF」「音声」「動画」の4種類のファイルを対象に、アップロード・変換処理・配信を一手に引き受けるのがメディアストレージ基盤というわけだ。

メディアストレージ基盤の仕組み

メディアストレージ基盤の動作フローはこうである。ユーザーが利用したいサービス(ニコナレなど)にファイルをアップロードしようとすると、裏で「アップロード権限発行リクエスト」が実行され、サービス側がメディアストレージ基盤に「アップロード権限の払い出し」を要求し、メディアストレージ基盤へファイルをアップロードできるようになる。

メディアストレージ基盤にファイルがアップロードされると、バリデーションと変換を実行。配信用のURLやメタデータをサービス側に通知するので、サービス側はその配信用URLを使ってサービス利用者へコンテンツを提供するという流れだ。

メディアストレージ基盤のイメージ図

このメディアストレージ基盤内の独自概念の1つが、「ジョブ」である。これは、アップロード権限の発行時に内部的に作成されるファイル変換・配信処理用の情報群のことで、NoSQLデータベース「Amazon DynamoDB」によって管理される。メディアストレージ基盤での全ての処理は、このジョブという概念をベースにして行われるという。

それぞれの処理について、詳しく見ていこう。

アップロード権限の払い出しについては、アップロードユーザーから利用サービスに権限発行の要求が行われると、APIサーバへ一時認証情報のリクエストが行われ、アップロード用Amazon S3に対するPutObject権限を付与する一時認証情報の払い出しを行う。これを受け、アップロードユーザーからAmazon S3にファイルがアップロードされるという流れだ。

Amazon S3へのアップロード処理は、ファイルの種類によって少し異なる。例えば、画像ファイルのアップロードが行われると、アップロード用Amazon S3はAWS Lambdaを起動し、Lambda上で画像ファイルのアップロードイベントに対するバリデーションが行われる。そして問題がなければ、配信用Amazon S3にコピーされる。

PDFの場合は、途中まで画像と同じプロセスだが、Lambdaがバリデーションを行った後はAmazon Simple Queue Service(SQS)にメッセージをpush。SQSを監視するバッチサーバがメッセージを取り出し、改めてPDFのバリデーションを行う。問題がなければ、バッチサーバ上でPDFを画像に切り分け、その画像群と元のPDFファイルを配信用Amazon S3にアップロードする。

音声ファイルについては、バッチサーバでのバリデーションまでは音声ファイルと同じ流れだが、通過後にメディア変換サービス「Amazon Elastic Transcoder」の仕組みに従ってジョブを生成する点が異なる。Elastic Transcoderによるエンコード完了次第、配信用Amazon S3にアップロードされるという流れだ。

なお、動画ファイルは音声ファイルとほぼ同様の扱いとなる。

>> 「やってみた」からこそわかる、AWSクラウドの長所と短所