Amazon Mobile AnalyticsのAuto Exportを使ってみる

Amazon Mobile Analytics

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

この記事では、Amazon Mobile Analyticsを使用してAndroidのイベントデータをマネジメントコンソールで表示してみました。
Amazon Mobile Analyticsではこれだけでなく、S3へのデータのエクスポート機能も提供しています。
この機能を使用すれば、選択したアプリに対して、JSON形式のファイルが、任意のS3バケット上に保存されるようになります。

Auto Exportを使ってみよう

まずはAmazon Mobile Analyticsのダッシュボードから、Manage Appsを選択します。
下記画面で対象のアプリにチェックをつけ、Enable Auto Export をクリックすると下記画面が表示されるので、
RedShift + S3を選択します。

auto-export-1

次はAuto Exportの設定を行います。データ出力先のS3バケットを新規作成するか、既存のS3バケットを選択してください。
IAMロールも必要に応じてここで作成します。

auto-export-2

Create Exportボタンを押せばAuto Exportの設定は完了になり、App Management画面にもどります。
次にStart Auto Export to Redshiftボタンを押しましょう。

auto-export-3

Amazon S3 to Redshift access roleを必要に応じて作成するか、既存のロールを指定します。
また、ここではRedShiftにアクセスするためのMasterユーザーパスワードとReadユーザーパスワードを設定しておきます。

auto-export-5

Create Exportボタンを押し、Exportを開始します。
Cloud Formationを使用して、VPCネットワークやRedShift、S3バケット等必要なリソースをすべて作成します。

auto-export-6

データのエクスポートが完了しました。

auto-export-7

さきほど指定したS3バケットを確認してみてください。
JSON形式のデータファイルが出力されています。今後は定期的にデータのエクスポートが実行されます。

ドキュメントサンプルにある、次のようなカスタムイベントを実装して何度かsubmitした場合、

    public void onLevelComplete(String levelName, String difficulty, double timeToComplete, int playerState) {

        AnalyticsEvent levelCompleteEvent = analytics.getEventClient().createEvent("LevelComplete")
                .withAttribute("LevelName", levelName)
                .withAttribute("Difficulty", difficulty)
                .withMetric("TimeToComplete", timeToComplete);

        if (playerState == STATE_LOSE)
            levelCompleteEvent.addAttribute("EndState", "Lose");
        else if (playerState == STATE_WIN)
            levelCompleteEvent.addAttribute("EndState", "Win");

        //Record the Level Complete event
        analytics.getEventClient().recordEvent(levelCompleteEvent);
    }

生成されたログは以下のようになります。
プログラムで指定した属性がjson形式のログで出力されていますね。

{"event_type":"LevelComplete","event_timestamp":1437925136419,"arrival_timestamp":1437925139491,
"event_version":"3.0","application":{"app_id":"xxxxxxxxxx","cognito_identity_pool_id":"us-east-1:xxxxxxxxx","package_name":"com.example.myapplication","sdk":
{"name":"aws-sdk-android","version":"2.2.4"},"title":"My Application","version_name":"1.0","version_code":"1"},
"client":{"client_id":"xxxxxxxxxxxxx","cognito_id":"us-east-1:xxxxxxxxxxxx"},
"device":{"locale":{"code":"ja_JP","country":"JP","language":"ja"},
"make":"Sony","model":"SO-03F","platform":{"name":"ANDROID","version":"4.4.2"}},
"session":{"session_id":"xxxxxxxxxxx","start_timestamp":1437925134944},
"attributes":{"EndState":"Win","LevelName":"Lower Dungeon","Difficulty":"Very Difficult"},
"metrics":{"TimeToComplete":2734.0}}
・
・

SQL Workbenchを使用し、生成されたRedShiftに接続することができます。
「awsma」というスキーマが作成されているのがわかります。
そのスキーマにetl_logテーブル、eventテーブル、event_stagingテーブル、v_eventビュー
があり、アクセスしたデバイス名やセッションID等の情報が格納されています。

auto-export-8

参考:JDBC 接続を設定する

参考サイトなど