AWS Mobile SDK for Unityを試す(Amazon Cognito編)

こんにちは。takahashi_kenです。

前回ブログに登場してから日が経ってしまいましたが、その間にテクニカルコンサルティンググループからJapanリージョンゲーム事業本部 技術・編成部に異動いたしました。

部署は変りましたが、よりモバイルゲームに近い立場から社内外の技術コンサルティングをさせていただいております。引き続きよろしくお願いいたいます。
 

さて、他の業界に比べて圧倒的に変化のスピードが早いゲーム業界において、システムの面から開発運用を支えるにはクラウドの利用は不可欠です。ゲームサービスを支えるバックエンドシステムは、膨大かつ予測の難しいトラフィックや増え続けるリソースを管理し、かつサービス規模に合わせて迅速な構成変更できることが求められます。

 

その中でも Amazon Web Services(AWS)は、多くのタイトルに利用されていることはご承知の通りです。

一方で、クライアント開発のゲームエンジンとしてUnityの存在感がますます大きくなっているのも、またご承知の通りかと思います。こちらのブログでも【入門編】世界よ、これが本当の Unity 講座だ(1)や、Unityアセット活用術〜「マシマシ∞チョモランマ」開発より〜 で、弊社の取り組みを紹介させていただいています。

 

2015年5月にゲームサービスにおいて非常に重要な位置を占めるこの2つを繋ぐ技術がAmazon Web Services から発表されました

 

AWS Mobile SDK for Unity

http://aws.amazon.com/jp/documentation/sdk-for-unity/

 

このSDKの提供により、AWSの以下のサービスをUnityから効果的に呼び出すことができます。

  • Cognito Identity
  • Cognito Sync

  • S3

  • DynamoDB

  • Mobile Analytics

モバイルゲーム開発に携わった経験のある方は、これらのサービスがモバイルと非常に親和性が高いことがお分かりかと思います。

 

今回は、このAWS Mobile SDK for UnityのCognitoを使ったID管理部分について、サンプルコードを使って試してみましょう。

 

AWS Cognitoとは?

Amazon Cognito は、ゲームにかぎらず、モバイルソリューションには必須とも言える「ユーザIDの管理」及び「ユーザに紐づくデータの管理・同期」を簡単に行えるAWSのサービスです。サービスを利用することで、ユーザーが既に持っているFacebookやTwitter,Google,Amazon、そしてOpenIDプロバイダーのアカウント(Yahoo!やmixi、はてななども!)を利用してログインをすることが可能になり、ユーザに紐付いたデータも一元管理することが可能になります。

 

http://aws.amazon.com/jp/cognito/ AWS Cognito 紹介動画より引用)

 

 

AWS Mobile SDK for Unity サンプルコードのセットアップ

AWSでは、AWS Mobile SDK for Unityのソースコード(https://github.com/aws/aws-sdk-unity)とは別に、Unityのシーンを内包したサンプルコード(https://github.com/awslabs/aws-sdk-unity-samples)を提供してます。

今回は記事の関係から、aws-sdk-unity-samples を元にUnity上でCognitoを使ったIdentity管理部分の動作を再現してみましょう。

 

サンプルコードをダウンロードし、Cognito Sync Demo ProjectをUnityで開くと、このような画面になります。(この記事ではUnity5.0.1を利用しています)

 

この時点ではAWS SDKを読み込んでいないため、画面下エラーがが出ています。Developer Guideの「Getting Started with AWS Mobile SDK for Unity」の記述にしたがって、デモプロジェクトにインポートしてください。

 

インポートするアセットは http://aws.amazon.com/jp/mobile/sdk/ から「Unity SDKのダウンロード」ボタンを押すとダウンロードができます。Unityから、メニューのAssets/Import Package/Custom Package… を開いて、ダウンロードしたSDKのunitypackages配下の .unitypackageファイルを選択し、全てにチェックを入れてインポートしてください。

 

この時、Unityのバージョン5を利用していると、以下のようなダイアログが出てスクリプトのアップグレードを促されますが、気にせずアップグレードして進めましょう。

 

 

デモシーンを確認する

では、Demo Projectからデモシーンを起動して確認してみましょう。

ProjectのAssets→DemoScene→SyncCharacterSelectionから、CharacterSelectionのシーンを起動してみます。このシーンを実行させると、「Login with Facebook(※)」と「Skip authentication」の2つのボタンがGame画面に現れます。

今回はFacebookログインではなく、未認証のゲストIDでログインしてみましょう。「Skip authentication」ボタンを押して先に進むと、デモ用に用意された環境に接続し、擬似的なキャラクター作成画面が現れます。

  • 「New character」ボタンでキャラクターを作成することができます。キャラクターは複数作成できます。
  • キャラクターをクリックすると経験値が増え、レベルも上がります。
  • 「Delete all」で全てのキャラクターを削除することができます。
  • 「Save」ボタンで、現在のキャラクターとそのステータスを保存できます。
  • 「Load」ボタンで、保存されたキャラクターが再現されます。

この「Skip authentication」を選択したとき、Cognitoでは「Unauthenticated Identities」(未認証のゲストID)が利用されています。「Link with FB」ボタンを押すことで、後からFacebookのアカウントとも紐付けることが出来るようになっています(※)。

 

※: Facebookが発行するAccess Tokenの設定が必要になります。

 

 

Congnitoの設定

Demo Projectで設定されているアカウントはAWSがデモ用に用意しておりそのまま試すことができるのですが、自身のAWSアカウントを利用することもできます。

 

CharacterSelectionシーンでは、SceneControllerプレハブがシーン全体の管理をしています。SceneControllerプレハブはLoginControllerスクリプトを持っており、このスクリプトがFacebookログインと通常ログインのボタンを生成する仕組みになっています。

 

LoginControllerスクリプトは、GUIボタンを押すことでAWS Mobile SDKの提供するSaveManagerスクリプトを呼び出しますが、このときSceneControllerプレハブが持っているパラメータIDENTITY_POOL_IDを利用します。このIDENTITY_POOL_IDを変更することで、Cognitoの参照先を変更することができます。

 

 

自身のAWSアカウントにCognitoをセットアップして利用する

では、自身のAWSアカウントからIDENTITY_POOL_IDの値を取得してみましょう。AWSのコンソール画面からCognitoを選択します。

 

Cognitoは2015/6時点で「US East (N. Virginia)」リージョンと「EU (Ireland)」リージョンにのみサービスを提供しています。それ以外のリージョンに設定されていた場合は、どちらかのリージョンに設定しなおしてください。

Wizardを進めていくと、途中に「Unauthenticated identities」の設定がありますので、「Enable access〜」にチェックを入れてください。これで未認証のユーザが登録できるようになります。

 

 

 

この後、Roleの設定を行うと、IDENTITY_POOL_IDが発行されます。

 

 

上記画面の赤字の値をIDENTITY_POOL_IDに設定して、動作を確認してみましょう。Unity側で先ほどの実行画面から「Unauthenticated Identities」ボタンを押してログインすると、Amazon CognitoコンソールのIdentity browserからユーザの登録を確認することができます。

Identity IDのリンクを押すと、保存されたKey-Valueを見ることも出来ます。確認してみましょう。

 

 

 

Amazon Cognitoの利用コスト

Amazon Cognitoはシンプルな従量課金となっているので、利用量によって掛かるコストも変化します。こちらに料金の記載があります。

 

Amazon Cognito では、ユーザーの認証と一意の識別子の作成は常に無料です。AWS 無料利用枠の一部として、対象となる AWS のお客様は、最初の 12 か月間、1 か月につき 10 GB のクラウド同期ストア容量と 100 万回の同期オペレーションをご利用いただけます。
Amazon Cognito で無料利用枠を超えた分については、同期オペレーション 1 万回につき 0.15 USD、同期ストアの容量 1 GB につき毎月 0.15 USD が請求されます。

 

仮に、1ヶ月間の料金を試算してみます。10万ユーザが1日3回アクセス、10回ずつ同期し、ユーザ1人あたりのデータ量が1MBとして算出すると、

 

・1ヶ月の同期オペレーション:100,000 (人) * 30 (日) * 3 (アクセス/日) * 10 (回/アクセス)
= 90,000,000 (回/月)
 有料分 8900万回 : $1335 / 1ヶ月

 

・1ヶ月の同期ストア:100,000 * 1(MB) = 97.6 (GB)

 有料分 87.6GB : $13.14 / 1ヶ月

 

で、合計 $1348.14 / 1ヶ月 となり、規模の割にはリーズナブルではないでしょうか。

 

まとめ

 

今回は AWS Mobile SDK for Unity のサンプルから、Cognitoの動作を試してみました。AWS Mobile SDK for Unityは他にもCognito以外にもS3やDynamoDBなど、ゲーム開発において便利に使える機能が提供されています。これらについては、また別の機会にご説明できればと思います。

 

読んでいただきありがとうございました。ではまた!