はじめ
ゲームなみなさんこんにちは、Game Solutions Architect の Leng (@msian.in.japan) と Game Solutions Architect の森下です。
この投稿ではモバイルゲームやオンラインゲームといった運営型のゲームにおいて、ユーザーの行動を分析するための手段として Amazon Redshift と Amazon Kinesis をご紹介します。
builders.flash メールメンバー登録
AWS for Games

今回の内容
この投稿は、ゲーム分析に関する builders.flash シリーズの第 2 弾になります。
前回の記事 では、リレーショナルデータベースにあるデータの分析として、Amazon Aurora MySQL と Amazon Redshift Serverless の Zero-ETL 統合についてご紹介しました。Amazon Redshift の Zero-ETL 統合を使うことで、Amazon Aurora MySQL にあるデータを、データパイプラインを構築せずに分析することができます。
しかし、リレーショナルデータベースにあるデータだけでは、 ゲーム分析のニーズに対処できない場合があります。
リレーショナルデータベースは、トランザクション処理による厳密性、頻繁なデータ行の更新、といった性質において優れています。一方で、プレイヤーの行動ログはデータ行の更新が発生せず、常に大量のデータが追加され続けるという性質があります。その場合はリレーショナルデータベースではなく、ストリーミングサービスやデータウェアハウスのソリューションを採用することで、性能やコストを最適化できる可能性があります。
今回は、プレイヤーの行動に関する分析に焦点を当て、AWS のサービスを活用した実現方法について紹介します。
ログデータとトランザクションデータの比較
ここで、リレーショナルデータベースに格納されるトランザクションデータと、アプリケーションが生成するログデータの性質を比較していきます。
トランザクションデータは、既存行の更新、削除処理が発生します。例えばゲームであれば、プレイヤーのレベルや、リソースの量は単一行で表され、それをプレイ状況に応じて絶えず更新する必要があります。また、所持しているアイテムを消費したり、捨てたりした場合はデータ行の削除処理が必要になります。更新や削除を行う際、トランザクションデータは一連の処理が矛盾した結果で終了しないようにトランザクション処理されます。
一方、ログデータは既存行の更新、削除を原則として行わないという性質があります。例えばゲームにおけるプレイヤーの行動履歴は、行動のたびに新しいデータが生成、格納されます。そのため、一連の処理に矛盾が発生する余地がありません。また、トランザクションデータよりも大量のデータが絶えず生成されるため、ストリーミング処理で取り扱う方が適しています。
また、データのサイズの観点で比較すると、トランザクションデータは通常ギガバイト単位であるのに対し、ログデータはテラバイト、ペタバイト単位まで増大することがあります。
以上の比較を表にまとめると、次のようになります。
|
トランザクションデータ |
ログデータ |
データの追加処理 |
トランザクション |
ストリーミング |
---|---|---|
データの更新、削除 |
あり |
なし |
データの量 |
ギガバイト |
テラバイト ~ ペタバイト |
ゲームにおけるユースケース |
ユーザーのプレイデータ |
ユーザーの行動履歴 |
Amazon Redshift を活用した分析システムの構築例
一番左が、行動ログを生成するデータプロデューサーになります。データプロデューサーには、モバイルや PC などのクライアントデバイス、Amazon EC2 などのバックエンドサービスが含まれます。
バックエンドサービスは API リクエストを受け付け、処理の内容に応じたトランザクションデータを Amazon Aurora などのリレーショナルデータベースに格納します。Amazon Aurora に格納されているトランザクションデータは、Amazon Redshift の Zero-ETL 統合機能を活用することで、すぐに分析を始めることができます。
一方、データプロデューサーから出力された行動ログデータは、Amazon Kinesis Firehose (以下、Amazon Kinesis Firehose)にストリーミングされます。Amazon Kinesis Data Firehose を活用すると、いくつかの項目を設定するだけで、簡単にストリーミングデータを Amazon Redshift に格納し分析を始めることができます。

ゲームにおける行動ログ分析のユースケース
では、実際にログデータをどのように活用できるのか、ゲームにおける行動ログ分析のユースケースについて考えてみたいと思います。
想定シナリオ : 対戦シューティングゲームの試合データ

出力するログについて
出力するログは、対戦シューティングゲームの試合データを想定します。プレイヤーは任意の武器を試合に持ち込み、他のプレイヤーとデスマッチ形式で対戦します。このとき、あるプレイヤーが他のプレイヤーを撃破した際にログを出力することとします。出力するデータは、プレイヤー ID 、武器 ID 、撃破されたプレイヤーの ID 、撃破されたプレイヤーが所持していた武器 ID とします。開発者はこのデータを武器のバランス調整などに活用することができます。
今回構築するアーキテクチャを次の図に示します。
Amazon EC2 をゲームサーバーに見立て、ダミーのログを生成する Python スクリプトを配置します。ログは、Amazon EC2 上に起動した fluentd へ http で出力されます。fluentd の Kinesis 統合機能を利用し、Kinesis Data Firehose へデータをストリーミング、最終的に Redshift にデータを格納します。
それでは、以下より手順を解説していきます。

1. Amazon Redshift Serverless の作成
1. Amazon Redshift Serverless の作成
2. Amazon Kinesis Firehose の設定
3. Amazon Redshift データベース・テーブル作成
4. Amazon EC2 (ダミーのゲームサーバー) の設定
5. fluentd の起動と設定
6. データの分析
7. リソースの削除
最後にリソースの削除を行います。
まとめ
Amazon Kinesis Data Firehose を活用して、行動ログを Amazon Redshift Serverless に配信する方法について確認しました。
行動ログを活用してより良いゲーム開発を目指す開発者の方々に、この記事がご参考になれば幸いです。
筆者プロフィール

Sheng Hsia Leng
アマゾン ウェブ サービス ジャパン合同会社
ソリューションアーキテクト
ゲーム業界に特化したソリューションアーキテクトとしてお客様を支援しております。
RPG とドット絵ゲームが好きです。オフモードの時はインスタでバイリンガル漫画を投稿しています。

森下 真孝
アマゾン ウェブ サービス ジャパン合同会社
ソリューションアーキテクト
国内のモバイルゲーム開発会社でサーバーサイドからクライアントサイドまでを担当。
ゲーム業界向けのソリューションアーキテクトとしてゲーム開発に携わるお客様をご支援しております。