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