低コストでAWS S3からファイルを取り出すための試行錯誤
Wanoの橋本です。
Wanoグループアドベントカレンダー最終日です。
去年サボったので今年はなんか書こうかと思ったのですが、1年間ほぼ実装をしておらず技術ネタが書けそうもなかったので、試行錯誤しているコスト削減プランについて書こうと思います。
S3使ってますか?コストも低く容量制限も気にしなくていいので、弊社のサービスでも頻繁に利用させていただいています。
普通にサービスを運営している状況ですと、コストを意識しないといけないレベルでファイルをインターネット経由でS3から取り出す場面はあまりないと思いますが、今回弊社が運営しているVideoKicksにおいて、コストを意識するレベルの状況が発生しているため、現在進行系の試行錯誤についてお伝えしたいと思います。
事の発端
まずはじめに、事の発端となったVideoKicksがどういったサービスなのか簡単にご紹介します。
VideoKicksは、弊社のグループ会社が運営している、デジタル音楽流通サービスTuneCore Japanと提携し、ミュージックビデオ、ライブビデオ(予定)を世界中の音楽配信ストアに届けるためのサービスです。
ミュージックビデオをお持ちのアーティストの方であればどななたでも、iTunes、Apple Music、レコチョク、GYAOといった音楽配信ストアで、自らのビデオを配信いただけます。
勘の良い方であれば、上記の短いご紹介でピンと来られた方もいらっしゃると思います。
- 動画を取り扱うサービスである
- 複数のストアに動画を納品する必要がある
そうです。サイズが大きくなりがちな動画ファイルを、複数箇所のストアに納品するといった機能要件を満たす必要があるサービスなのです。
実際に取り扱うファイルのサイズなのですが、現状対応しているコンテンツがミュージックビデオのみ(ライブビデオも対応予定)ということで、尺的には3〜5分とそれほど長くはないものの、ProResでの納品が必要な場合もあり、弊社がお預かりした動画ファイルがh264でエンコードされたものであっても、最終納品時には、VideoKicks側でProResエンコードした5GB〜10GBのファイルになります。
素直に実装
転送コストを意識せずに素直にS3上のファイルをストアに送付する場合、下図のようになります。
わざわざ図にする程でも無いほどシンプルですね。
図の例を下記前提条件で転送料金を計算するとこのようになります。
1ファイルのサイズ:5GB
GB辺りの転送単価:$0.114 ※2018年12月25日時点(詳細はこちらを参照)
5GB ✕ $0.114 ✕ 3ストア = $1.71
3ストアと仮定しての金額ですが、これが10ストアになったら、TuneCore Japanと同程度の30ストアになったら。。。と考え始めると本来ストアを増やしてコンテンツを広げる目的を見失いそうなコストになってきそうです。
しかし目的を見失ってはいけません。なんとかコストを下げる手段をひねり出してみました。
Lightsailが現れた
AWSからインターネット経由でファイルを送付する場合、これまで全てのプロダクトで従量制がしかれていました。
CloudFront等では、一定期間の転送量をコミットすることで転送単価を割り引いてくれるリザーブドキャパシティといったサービスもありますが、あくまで単価の割引であり従量制には変わりありませんでした。
しかもCloudFrontは、ファイルを取りに来てくれる相手には使えますが、こちらからファイルを送付する場合利用できません。
そんな中Lightsailが登場しました。
いわゆるVPSがAWS上でも利用できるようになったという触れ込みでしたが、注目したのはAWSのサービスでは恐らく初めて、転送量がサーバーコストに含まれている固定費という点でした。しかもその料金以下の通りです。
プラン | 含まれている転送量 | GB単価 |
---|---|---|
$3.50 | 1TB | $0.00342 |
$5 | 2TB | $0.00244 |
$10 | 3TB | $0.00326 |
$20 | 4TB | $0.00488 |
$40 | 5TB | $0.00781 |
$80 | 6TB | $0.01302 |
$160 | 7TB | $0.02232 |
プランによってGB単価は変わりますが、最も高いプランでも $0.02232 と従量制の転送料金と比べると5分の1の単価です。
すぐさまLightsailの調査を開始し、下記の課題がわかりました。
- 枠の超過分は$0.14/GBの従量制
- 同じプランのファイル転送使用量はプラン内で共有される
枠の超過分は$0.14/GBの従量制
これは単純な話で、枠を超えた場合は従量制で追加コストがかかりますよという結果でした。
単価的にはその他のサービスの単価($0.114/GB)よりもほんの少し高くなっていますね。
同じプランのファイル転送使用量はプラン内で共有される
当初$40プランを複数インスタンス用意すれば、5TB ✕ インスタンス数で必要転送量分だけインスタンス用意すれば良いやと考えていましたが、$40プランを複数インスタンス用意しても、あくまで全インスタンス共有で5TBとのことで、転送枠を増やすには使用するプランを変える必要があり、単一リージョンにおけるLightsailの最大転送枠は、全プランの転送枠を合算した28TBのようです。
Lightsailをどう採用するか
ファイル転送時にLightsailを採用するにあたって、VideoKicksのような用途では、前述した課題に対処することがわかり、次の対応策を用いることでLightsailの採用を決定しました。
- Lightsail全プランの転送枠28TBを超えた場合のコストは一旦目をつぶる
- 各プランの転送量をCloudWatch経由で監視する
- プランの転送枠を超える前後で別プランに切り替える
- 課金は起動時間ベースなので、不要な場合はインスタンスを停止 or 削除する
Lightsailの採用により、動画ファイル転送コストは大幅に見直すことができそうです。
いくつか未解決の問題もありますが、引き続きAWSの各サービスを注視しつつ、AWSの転送料金がさらに値下げされることを期待しつつ、今後も全てクラウド上で運用できる状態を保てるよう改善し続けたい思います。