はじめに
ゲーム開発者の皆様こんにちは!
この記事では ゲーム開発者向けに、Amazon GameSparks (Preview) を利用して、インフラを意識せずにゲームバックエンドサービスを構築する手順を、Unity を利用したサンプルゲームを題材にしてご紹介いたします。
現在、多くのオンラインゲームでは、ユーザ管理やフレンド機能、リーダボードなど多種多様なバックエンドサービスの構築が求められています。AWS において、ゲームのバックエンドサービスを構築するための選択肢としては、Amazon API Gateway、AWS Lambda、Amazon DynamoDB といったサービスを組み合わせて独自に構築する方法が挙げられます。具体的な例としては こちらの記事 をご参照ください。また、補足ですが、基本的なゲームバックエンドとは別のゲームサーバ自体の構築に関しては、こちらの記事 をご参照ください。さらに、2022 年 3 月の GDC (Game Developer Conference) 2022 で発表された、AWS Gamekit という、テンプレートに基づいてAWS の各サービスをデプロイし、ゲームのバックエンド機能を構築するソリューションを利用する方法もございます。AWS GameKit については、こちらの記事 をご参照ください。
そして、今回ご紹介する Amazon GameSparks は同じく GDC 2022 で発表されたゲームのバックエンド開発を加速させるサービスとなっています。上記に挙げた方法と比較して、この Amazon GameSparks はインフラを意識せずにフルマネージドでバックエンドサービスを構築することが可能です。ただし、注意点として、 Amazon GameSparks は 2022/08/15 時点で Public Preview となっており機能が限定されております。一方で Preview 期間中は Amazon GameSparks 自体の料金は無料となっていますので、ぜひこれを機会にお試しいただき、フィードバックをいただけますと幸いです !
ご注意
本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。
builders.flash メールメンバー登録
Amazon GameSparks の紹介
Amazon GameSparks は、ゲームのバックエンドを構築、実行、スケーリングするための機能をゲーム開発者に提供する、サーバーレスのフルマネージドサービスとなっています。インフラの構築経験がないクライアントサイドの開発者でもゲームバックエンドサービスを容易に構築できるように設計されており、本番環境はもちろん、開発段階のプロトタイプを高速化する手段としても効果を発揮するサービスとなっています。 大きな特徴は以下の 3 つが挙げられます。
シンプルなインターフェースとゲームエンジンとの統合により容易に開始可能 : クラウドの経験がほとんどない方でも、インフラストラクチャを意識せず、最小限のセットアップで始められる設計となっています。また、現時点では Unity 向けの SDK が提供されており、構築したバックエンドサービスに対してクライアントサイドから容易に通信可能です。他のゲームエンジンについても今後の SDK の提供が検討されています。
カスタマイズ可能なコンポーネントを組み合わせて構築 : プレイヤー認証機能やプレイヤーデータストレージ、独自コードの実行環境など、多くのビルトインの機能を持っています。これらをビルディングブロックの形で、カスタマイズして組み合わせることで様々なパターンのバックエンドサービスを構築可能です。
サーバーレスのフルマネージドサービス : ストレージの設定やネットワークプロトコルの選定、リソースのスケーリングなど、インフラレイヤの運用について意識することなくバックエンドサービスを構築可能です。
利用時の全体的なイメージは図の通りになっています。Amazon GameSparks 上で構築したバックエンドサービスに対しては、ゲームクライアントから WebSocket を利用して通信する形となります。また、構築したバックエンドサービスについては、CloudWatch Logs や CloudWatch Metrics を利用して 監視することが可能です。
Amazon GameSparks を利用した開発の流れを、図に合わせて以下に記載します。
Develop / Test : ゲーム開発者は AWS マネジメントコンソールや CLI を通して、Amazon GameSparks 上でゲームバックエンドサービスの開発・設定を行い、「Dev ステージ」にデプロイしてテストを行います。
Generate Code : ゲームエンジンで構築したゲームからバックエンドサービスを呼び出すためのライブラリコードを自動生成します。
Integrate : 上記ステップで生成したライブラリコードおよび SDK を利用して、ゲームエンジンと統合します。
Test : 実際にゲームエンジンからバックエンドサービスを呼び出し、正常に実行されるかどうかをテストします。
Deploy Next Stage : 上記ステップで問題なければステージを先に進めます。※ Preview の段階では Dev ステージのみ利用可能です。
また、Preview 段階での代表的な機能をピックアップしてみていきましょう。
Cloud Code : Cloud Code (JavaScript ES5.1) はイベントドリブンでバックエンドサービスのロジックを実装する Amazon GameSparks における根幹の機能となっており、他のコンポーネントとのハブのような役割として機能します。この Cloud Code では、Message という単位でリソースを作成し、ロジック実装に加えて、クライアントとのやりとりの形式 (リクエストやレスポンスのフィールド) を定義します。例えばクライアントから送信されたゲームクリア時のスコアをデータストレージに保存し、なんらかのレスポンスを返却するといった処理を実装可能です。
認証/アイデンティティ :プレイヤーを識別するアノニマス認証 (ゲスト認証) の機能です。Amazon GameSparks の SDK は自動的に、接続時にプレイヤーの識別と認証を行います。他の認証方法については、今後のサービスの追加機能として検討されています。
プレイヤーデータストレージ : プレイヤーごとのデータを保存するビルトインのストレージ機能です。例えばプレイヤーのレベルやログイン時間など個別のプレイヤーのデータを保存することができます。
テストハーネス : マネジメントコンソール上での Cloud Code のロジックを検証することができる機能です。都度の変更に応じてわざわざクライアントから実行する必要がなくなります。
DynamoDB 統合 : Cloud Code から簡単に Dynamo DB のデータに対して読み書きを行うことができます。例えばゲームにおけるグローバルデータ (アイテムカタログや、マップごとの固有情報など) を保存することができます。
Lambda 統合 : Cloud Code から簡単に Lambda を呼び出すことができます。Lambda を経由することでネイティブに統合されていない他の AWS サービスとの連携に利用することができます。

Amazon GameSparks を使ってバックエンド機能を構築する
では実際に Amazon GameSparks を利用してゲームのバックエンドサービスを構築してみましょう。
今回構築するのは、Button Blaster と名付けた、画面上のボタンのオブジェクトをクリックするとカウント数が増えていくシンプルなゲームです。このカウント数はプレイヤーごとに紐づいており、バックエンドサービスを経由して保存されます。
また、今回はゲームクライアントエンジンとして Unity 2020.3 を利用して作成します。スクリーンショットはMac での操作画面ですが、 Windows でも基本的な操作に大きな変わりはありません。

ステップ 1 : AWS アカウントと IAM ユーザーの準備
今回は AWS のマネジメントコンソールから操作を実施します。まずは AWS アカウントと操作に利用する IAM ユーザーを準備しましょう。GameSparks の用途別 IAM ユーザーのポリシーの詳細は こちら をご参照ください。
GameSparks はもちろん、AWS IAM や Amazon CloudWatch (ユースケースによっては Lambda と Dynamo DB) など他のサービスの操作も必要になるため、状況に応じて IAM ユーザーのポリシーを追加していきましょう。
最後に、IAM ユーザーでログイン後、コンソール にアクセスし、Amazon GameSparks のコンソールが開けることを確認します。現時点ではバージニア北部 (us-east-1) リージョンでのみ利用可能となっていますので、こちらのリージョンを利用します。
ステップ 2 : Unity SDK のセットアップ
Unity 2020.3 をインストールします。また、Amazon GameSparks SDK をダウンロードし、以下の手順に従ってSDKを追加します。
Unity 2020.3 で 3D プロジェクトを作成します。(プロジェクト名は任意 例 : ButtonBlaster)
Window メニューから Package Manager を選択します。
「+」 ボタンから Add package from tarball を選択します。
事前にダウンロードした SDK の AmazonGameSparks.tgz を選択します。
手順のイメージ画面

Window メニューから Package Manager を選択します。

「+」 ボタンから Add package from tarball を選択します。
ステップ 3 : Amazon GameSparks コンソール上で Game の作成
Amazon GameSparks ではまず最初に、1 つのゲームタイトルに相当する Game というリソースを作成します。
- マネジメントコンソールから [Create Game] をクリックします。
- 「ButtonBlaster」 を [Game name] に入力し、 [Create] をクリックします。

ステップ 4 : Cloud Code を使ってロジックを実装
ステップ 5 : 変更をデプロイ
ここまで実装した内容に対してテストハーネスや実際のゲームエンジンクライアントから接続してテストをするには、デプロイを行う必要があります。
1. 左のナビゲーションペインから [Dev] を選択し、[Deploy as new snapshot] をクリックし、適当な説明を追加して [Save] をクリックします。
Dev ステージは最初にカスタムロジックをデプロイするステージとなっています。Preview 段階の現在では、ステージとして、Dev ステージのみ利用可能となっています。デプロイには少し時間がかかりますが、Snapshot の欄にデプロイ時間が記載された項目が追加されれば、デプロイ完了となります。

ステップ 6 : マネジメントコンソール上でのテスト
Test harness という機能を利用することで、マネジメントコンソール上から各メッセージが正常に動作しているかをテストすることができます。
ステップ 7 : Unity との統合
Amazon GameSparks では、Cloud Code で作成したロジックに対して簡単に統合できるように、デプロイしたスナップショットのアクションとして、ゲームエンジン向けのコードを以下の画面のように自動生成することができます。具体的には、実装した Cloud Code のロジックに対して、フィールド定義に則った容易なアクセスを実現する Class を含んだライブラリコードが生成されます。
ステップ 8 : クライアントコードを確認し、ゲームをプレイ
いよいよ最後のステップです。実際にゲームをプレイして、動作確認をします。
まとめ
Amazon GameSparks を体験していただく第一歩として、サンプルゲームをもとにゲームのバックエンドサービスを構築する方法を手順に沿ってご紹介しました。
従来の AWS はゲーム開発者のコミュニティから「バックエンドサービスはオンラインゲームにおいて必須のコンポーネントである一方、インフラの構築・運用において専門的な知識が必要となり、負担が大きい」とフィードバックを受けておりました。
Amazon GameSparks は、まさにそういったお悩みを解決するために生まれたサービスであり、実際に今回バックエンドサービスを構築する流れの中で、ストレージやネットワークなどインフラ面を意識することはなかったと思います。
また SDK 提供およびライブラリの自動生成などにより、すぐに始められる環境を提供しておりますので、ゲーム開発者の方にぜひ一度触っていただきたいと思っています。
最後に、繰り返しになりますが、現在 Amazon GameSparks は Public Preview となっており、機能が限定されております。しかしながら、一般提供開始に向けてリーダーボード機能の提供 や、Amazon GameLift との連携方法 など、様々なアップデートを続けております。Preview 期間中は Amazon GameSparks 自体の料金は無料となっていますので、ぜひお試しください !
筆者プロフィール
藤原 蓮
アマゾン ウェブ サービス ジャパン合同会社
ゲームソリューションアーキテクト
ゲーム業界に特化したソリューションアーキテクトとして、お客様を支援させていただいております。
三度の飯よりゲーム好きです。特にFPSは自分でプレイするもの好きですが、競技シーンを見るのも好きです。

Did you find what you were looking for today?
Let us know so we can improve the quality of the content on our pages