UE4 AWS GameKit 使ってみた

 ボタン一発でログインサーバ作るよ、の巻

2022 年 3 月 23 日、GDC にてAWS GameKitが発表され、UnrealEngine 用のプラグインがリリースされました。

AWS には Web サービスや、モバイルアプリなどのバックエンドとして使用できる多数のオンラインサービスが提供されていますが、 実際に使うにはそれなりに各サービスの仕様や API に習熟した上で自分で組み合わせる必要があります。 使ってみるととても便利なのですが、誰にでも簡単に…とは言い辛いのもまた確かでした。

ゲームでよく使われるオンラインサービスはユーザー認証、アイテムやゲーム内通貨の管理、プレイ記録、プレイヤーデータのクラウド保存、実績など ある程度限られており、ゲーム用のオンラインサービスに特化したサービスを提供する会社も多数あります。 AWS GameKit はそのオンラインサービスを開発者自身の AWS アカウント上で構築することができる開発キットです。 AWS 上に構築する以上、運用費は AWS アカウントに請求が来ることになりますが、他社が提供するゲーム用オンラインサービスを使うより費用は割安になることが期待されます。 (※具体的に比較した訳ではないです)

この記事では、AWS GameKit for UnrealEngine プラグインを使い、identity(ユーザー認証)のサンプルを使って実際に構築した様子を解説します。 すでに AWS の各サービスを使っている方から見ると何でもない内容ですが、これから AWS アカウントを作って試そうと考えている方には このサンプルを使うと何が起きるのか多少は把握できるようになると思います。

UE4 プロジェクトの作成

まずはプラグインを組み込んだ UE4 プロジェクトを作成します。ざっくりとした手順は以下のようになります。

  • UE4 を起動し、適当なテンプレートでプロジェクトを作成します。(プロジェクト名を TestAwsGameKit とします)
  • ファイルメニューから C++ファイルを追加し、C++プロジェクトにします。
  • UE4 エディタをいったん終了し、プロジェクトのフォルダに Plugins フォルダを作成し、AWS GameKit のページから AwsGameKitUnrealPlugin_Windows_v1.0.0.zip を展開して作成される AwsGameKit をフォルダを Plugins フォルダの下にコピーします。
  • TestAwsGameKit.uproject ファイルを選択して右クリックメメニューから Generate VisualStudio Project を実行します。
  • TestAwsGameKit.sln ファイルをダブルクリックして VisualStudio を起動し、TestAwsGameKit を選択した状態で右クリックメニューからリビルドを実行します。
  • ビルドが完了すると、VisualStudio を終了し UE4 エディタを起動します。

AwsGameKit プロジェクト作成

プラグインが使用できる状態になると、プロジェクト設定に AWS GameKit のカテゴリが出てきます。 Game title・Region を設定し、事前に作成しておいた IAM の AccessKey・SecretKey を入力、Submit をクリックします。

Project設定からAwsGameKitプロジェクト作成

続いて Identity And Authentication の項目までスクロールし、Create をクリックします。

Project設定のログインサーバ作成画面

使用状況に応じて課金が発生する可能性があるため警告が表示されますが、 構築自体に料金はかかりませんし、お試し程度の使用であれば無料枠に収まるため料金はほとんどかかりません。 ここは Deploy をクリックします。

課金が発生するかも警告
構築のため 10 分程度待たされますが、完了すると以下のような表示になります。
Project設定のログインサーバ作成済み

ユーザー認証サンプルの実行

UE4 プロジェクトにあるプラグインのサンプルを実行してみましょう。 コンテンツブラウザから AwsGameKit Contentのフォルダを開き、BP_AwsGameKitIdentityExamples をレベルにドラッグ&ドロップします。 (AwsGameKit Contentフォルダがない場合は、View Options から表示されるメニュー内の Show Plugin Contents にチェックを入れましょう)

UE4コンテンツブラウザのプラグインアセット

Play In Editor 実行すると、サンプル UI が表示されます。

PlayInEditor実行

Register から新たにユーザーを作成します。ユーザー名、メールアドレス、パスワードを入力して Call API をクリックして下さい。

新規ユーザー登録

この時 AWS の Cognito 管理コンソールを見てみると、ユーザーが登録されていることがわかりますが、未検証になっています。 これはメールアドレスが実在するか確認する手続きが終わってない状態なので、このままではログインすることはできません。

Cognitoユーザー未検証

Register の時に入力したメールアドレスにメールが届いているはずなので、そちらに書いてある確認コードを入力します。 検証が完了すると成功のステータスが返ってきます。

ログインメール確認成功

Cognito 管理コンソールでも検証済みになっている事がわかります。

Cognitoユーザー検証済

早速ログインしてみましょう。

ログイン成功

ログイン中に GetUser の API を実行すると、ユーザー情報が表示されます。

ログイン中のユーザー情報取得

ログインしていない時はどうなるでしょうか。Logout 実行後、GetUser を実行するとエラーが表示されます。

ユーザー情報取得失敗

Developer Log を開くと、ログインしていないというエラーが返ってきている事がわかります。

ユーザー情報取得失敗時のログ

作成された AWS サービス

作成される AWS サービスは多岐にわたります。その一部を見てみましょう。

ユーザー情報を取得する GetUser という API のエンドポイントです。 実際の処理は Lambda で行なわれますが、外部から呼べる REST API にするために必要になります。

ApiGatewayのエンドポイント

APIGateWay は無制限に呼び出されると費用がかかるため、この GetUser は Cognito でユーザー認証済みの時のみアクセスできるよう制限がかかっています。

ApiGatewayの認証

API の使用状況を監視する CloudWatch ダッシュボードです。

CloudWatchダッシュボード

ユーザー認証を行う Cognito ユーザープールです。

Cognitoユーザープール

認証済みのユーザーに AWS サービスの使用を許可する権限する Identitiy プールです。

CognitoIdentityプール

ユーザー情報を保存する DynamoDB です。

DynamoDB

Cognito の API を呼び出した時、また GetUser を呼び出した時に実行される処理を登録しておく Lambda です。

Lambda関数

Lambda で実行するスクリプトは Python で書かれていますが、実行に必要なライブラリ環境を Lambda レイヤーという仕組で登録しています。

LambdaLayer

これらのサービスは CloudFormation で自動構築されますが、その設定ファイルや、Lambda で実行するスクリプトや実行に必要なレイヤーはいったんクラウドストレージ S3 にアップロードされます。

S3

まとめ

UE4 からボタン一発でユーザー登録からメールアドレス確認、認証までの一通りの処理を行うログインサーバの構築ができることがわかりました。 自分の用途に合わせてカスタマイズしていくには… Plugins/AwsGameKit/ResourcescloudResources の下に CloudFormation などのバックエンドの設定ファイル・スクリプトがありますので、そこを修正していくことになると思います。 分量がかなりあるので読むだけでげんなりしますが、逆に AWS を使っている身にとってきちんと設計された バックエンド構築例の設定ファイルやソースコードとしてとても参考になるのではないかと思います。

文責:ともたこ/Tomotaka Ogino Twitter/github/Qiita