概要
ストリーミングで受信した動画データをどのように扱えば、GCPのメリットを最大限に享受しつつ、コストを抑えた構成にできるか考える。
要件
- 動画ストリーミングデータをGCPに保存
- 保存した動画データをPCにダウンロードできるようにフォーマット変換する
- サーバコスト・運用コストを出来るだけ下げる
アーキテクチャ
はじめ:Compute Engine をメインとした構成
- Compute Engine へ 動画をストリーミング送信
- Compute Engine で MUX してダウンロードファイルに変換
- Cloud Storage に保存
最終:全てマネージドサービスな構成
- App Engine から Cloud Storage バケットの署名付きURLを取得
- Cloud Storage へ動画をストリーミング送信
- Cloud Storage のオブジェクト作成イベントで Cloud Pub/Sub 通知送信
- Cloud Pub/Sub から Cloud Run へ通知
- Cloud Run で MUX してダウンロードファイルに変換、Cloud Storage のファイル上書き
コストを下げながら効率的な構成にするための試行錯誤の変遷
はじめの構成の Compute Engine 部分をマネージドサービス化する構成を検討する。
1. App Engine SE
まず、GCP の王道、 GAE のスタンダード環境を検討しました。
しかし、動画変換ライブラリが使用できず、要件を満たしませんでした。
- メリット
- PaaS
- フルマネージドサービス
- サーバコスト・運用コスト低
- デメリット
- リクエストの最大タイムアウト:60秒
- 動画変換ライブラリ(C言語ベース)が使えない
- リッスンソケットは作成できない(アウトバウンドソケットのみ)
2. App Engine FE
GAE のフレキシブル環境を検討しました。
しかし、Compute Engine 仮想マシン(VM)上の Docker コンテナで実行されるため、サーバ費用は高めとなります。
- メリット
- PaaS
- マネージドサービス
- リクエストの最大タイムアウト:60分
- Runtime とミドルウェアに制限がない → 動画変換ライブラリ使用可能
- 運用コスト低
- デメリット
- サーバコスト高
3. Cloud Pub/Sub + Cloud Functions
次にサーバレス実行環境である Cloud Functions を検討しました。
サーバレス環境は、サーバーを立ち上げることなく、イベント受信時のみ起動するのでコスト減に貢献します。
しかし、動画変換ライブラリが使用できず、要件を満たしませんでした。
- メリット
- サーバーレス
- フルマネージドサービス
- サーバコスト低
- デメリット
- 動画変換ライブラリが使えない(サポート言語は Node.js、Python、Goのみ) *執筆時点
4. Cloud Pub/Sub + Cloud Run
3.と同じくサーバレスですが、Cloud Run はマネージドサーバ上でDockerコンテナを起動して実行するので、動画変換ライブラリも使用可能です。
- メリット
- サーバーレス
- マネージドサービス
- Runtime とミドルウェアに制限がない → 動画変換ライブラリ使用可能
- サーバコスト低
- デメリット
- beta機能(us-central1 リージョンでしか使えない & 情報少ない) *執筆時点
まとめ
- コストを下げるなら、PaaS かサーバレス
- Cloud Pub/Sub を使いこなせるようになりたい
- Cloud Run は要チェック