はじめに
どうも、@to-fmakです。最近弊社の「Shikaku Pass」というオンライン資格講座サービスでは、学習画面のリニューアルを実施し、学習進捗の管理や学習実績の可視化を大幅に改善しました。
今回のリニューアルプロジェクトにおいて、私は主にバックエンドとインフラの開発を担当しました。本記事では、プロジェクトの一環として構築した「動画視聴時間の管理・集計アーキテクチャ」について紹介できればと思います。
構成
ログパイプラインについて
各サービスを動かしているECSサービスからJSONフォーマットでログを送信します。ログの転送量や頻度が今後増加することを考慮してスケーラブルなKinesis DataStreamsでデータを受信し、それからData Firehoseに渡して加工、最終的にJSON LinesファイルとしてS3バケットに格納します。
このログ基盤については、既存で構築済みのリソースを活用しており、詳細は弊社の過去記事をご参照ください。
動画視聴ログの収集
既存設計の特徴
- Shikaku PassはB2CとB2B向けの2つのサービスで構成されており、両サービスともに動画視聴時の視聴時間等を記録し、ログ基盤用AWSアカウント内の共通Kinesis Data Streamsへ送信する仕組みになっています
- ログフォーマットは統一されており、serviceやeventなどの属性によってB2C/B2Bの判別や、動画ログ/その他ログの分類が可能な設計となっています
今回の設計のポイント
動画視聴ログは高頻度で発生するデータの特性を考慮し、以下の設計方針を採用しました。
- データストアの選択
- 高頻度なログ挿入によるRDBへの負荷を回避するため、DynamoDBを採用
- リアルタイムでの読み書き性能とスケーラビリティを重視
- マルチアカウント構成
- DynamoDBはShikaku PassアプリケーションからのAPIアクセスが必要なため、B2C/B2B各AWSアカウントに配置
- ログ集計用Lambdaもアプリケーションロジックを含むため、同様に各アカウントに配置
- ログパイプラインの拡張
- 既存ログパイプラインにログバリデーション機能を追加
- service&event属性に基づくClean LogのS3格納パス振り分け処理を実装
- S3イベントトリガーとクロスアカウントSQSを組み合わせ、サービス・イベント別の非同期処理を実現
動画視聴時間回収用バッチ
データアクセスパターンを最適化するため、以下の戦略を採用しています。
- 当日データ: DynamoDBから直接参照(高速アクセス)
- 過去データ: RDBから取得(安定したクエリ性能)
EventBridgeにより日次でスケジュールされたECSタスクが起動し、DynamoDBから前日分のデータを取得し、RDBへの挿入を行います。
データ分析
S3バケットに格納されたClean Logは、アプリケーション側で利用されるだけでなく、データ分析にも活用することがあるので、BigQuery Data Transfer Serviceを利用し、BigQueryへのデータ転送を定期的に行っています。
動画ログ集計用Lambdaコードの管理とCICDについて
インフラ管理
- クラウドリソースはTerraformで統一管理
- 一般的な自動化用Lambda関数も同一リポジトリで管理
アプリケーションロジック管理
- 動画視聴時間集計用Lambdaは業務ロジックを含むため、専用リポジトリで管理
- インフラとアプリケーションの関心事を分離し、開発・運用効率を向上
CI/CD
- GitHub ActionsでCI/CDを構築
- SAMなどのフレームワークは使用せず、ActionsでAWS CLIによるデプロイを採用
- シンプルさと柔軟性を重視した構成
開発時の気づき
パフォーマンス最適化の重要性
動画視聴ログは比較的に発生頻度が非常に高く、初期検討段階でRDBへの直接書き込みを行うとパフォーマンスボトルネックとなることが予想されました。DynamoDBの採用により、書き込み性能を改善できました。
クロスアカウント連携の複雑性
マルチAWSアカウント環境でのサービス間連携では、IAMロールの設定やリソースポリシーの管理が複雑になることを実感しました。特にS3イベントトリガーからクロスアカウントSQSへのメッセージ送信では、適切な権限設定とセキュリティ考慮が必要でした。
運用監視の課題
複数のAWSサービスを組み合わせた非同期処理チェーンでは、どこで処理が滞っているかの特定が困難になる場合があります。そのため、CloudWatchメトリクスとアラームを適切に設定して、各ステップでの処理状況を把握することの重要性を再認識しました。
おわりに
今回は弊社の「Shikaku Pass」における学習画面リニューアルプロジェクトの一環として構築した、動画視聴時間管理・集計アーキテクチャについて紹介させていただきました。
ぜひこの機会に「Shikaku Pass」をお試しいただき、新しい学習画面での学習体験をご確認いただければと思います。
エンジニア募集
Gakken LEAP では教育をアップデートしていきたいエンジニアを絶賛大募集しています!!
ぜひお気軽にカジュアル面談へお越しください!!