Cloud Saveバリデータのカスタマイズを始める
注釈:本資料はAI技術を用いて翻訳されています。
Overview
AccelByte Gaming Services(AGS)では、レコードを保存または取得できるかどうかを判断するカスタムクラウドセーブバリデータを実装できます。
この記事では、Extend Override appテンプレートを例として、カスタムクラウドセーブバリデータロジックを設定する手順を説明します。
Prerequisites
- C#
- Go
- Java
- Python
-
以下のツールがインストールされたWindows 11 WSL2/Linux Ubuntu 22.04またはmacOS 14以降
a. Bash
-
Windows WSL2またはLinux Ubuntuの場合:
bash --version
GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)
... -
macOSの場合:
bash --version
GNU bash, version 3.2.57(1)-release (arm64-apple-darwin23)
...
b. Make
-
Windows WSL2またはLinux Ubuntuの場合:
Ubuntuリポジトリからインストールするには、
sudo apt update && sudo apt install makeを実行します。make --version
GNU Make 4.3
... -
macOSの場合:
make --version
GNU Make 3.81
...
c. Docker(Docker Desktop 4.30以降/Docker Engine v23.0以降)
-
Linux Ubuntuの場合:
- Ubuntuリポジトリからインストールするには、
sudo apt update && sudo apt install docker.io docker-buildx docker-compose-v2を実行します。 - ユーザーを
dockerグループに追加します:sudo usermod -aG docker $USER。 - 変更を有効にするために、ログアウトしてから再度ログインします。
- Ubuntuリポジトリからインストールするには、
-
WindowsまたはmacOSの場合:
WindowsまたはmacOS向けのDocker DesktopのインストールについてはDockerのドキュメントに従ってください。
docker version
...
Server: Docker Desktop
Engine:
Version: 24.0.5
...
d. .NET 8 SDK
-
Linux Ubuntuの場合:
Ubuntuリポジトリからインストールするには、
sudo apt-get update && sudo apt-get install -y dotnet-sdk-8.0を実行します。 -
WindowsまたはmacOSの場合:
WindowsまたはmacOSへの.NETのインストールについてはMicrosoftのドキュメントに従ってください。
dotnet --version
8.0.119
e. Postman
- Postmanから入手できるバイナリを使用してください。
- extend-helper-cliから入手できるバイナリを使用してください。
g. TCP転送機能を持つローカルトンネルサービス。例:
-
無料プランには登録が必要です。クイックスタートについてはngrokのドキュメントを参照してください。
-
登録不要で試すことができます。クイックスタートについてはpinggyのドキュメントを参照してください。
-
-
以下のツールがインストールされたWindows 11 WSL2/Linux Ubuntu 22.04またはmacOS 14以降
a. Bash
-
Windows WSL2またはLinux Ubuntuの場合:
bash --version
GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)
... -
macOSの場合:
bash --version
GNU bash, version 3.2.57(1)-release (arm64-apple-darwin23)
...
b. Make
-
Windows WSL2またはLinux Ubuntuの場合:
Ubuntuリポジトリからインストールするには、
sudo apt update && sudo apt install makeを実行します。make --version
GNU Make 4.3
... -
macOSの場合:
make --version
GNU Make 3.81
...
c. Docker(Docker Desktop 4.30以降/Docker Engine v23.0以降)
-
Linux Ubuntuの場合:
- Ubuntuリポジトリからインストールするには、
sudo apt update && sudo apt install docker.io docker-buildx docker-compose-v2を実行します。 - ユーザーを
dockerグループに追加します:sudo usermod -aG docker $USER。 - 変更を有効にするために、ログアウトしてから再度ログインします。
- Ubuntuリポジトリからインストールするには、
-
WindowsまたはmacOSの場合:
WindowsまたはmacOS向けのDocker DesktopのインストールについてはDockerのドキュメントに従ってください。
docker version
...
Server: Docker Desktop
Engine:
Version: 24.0.5
...
d. Go v1.24
- Goのインストールガイドに従ってください。
go version
go version go1.24.0 ...e. Postman
- Postmanから入手できるバイナリを使用してください。
- extend-helper-cliから入手できるバイナリを使用してください。
g. TCP転送機能を持つローカルトンネルサービス。例:
-
無料プランには登録が必要です。クイックスタートについてはngrokのドキュメントを参照してください。
-
登録不要で試すことができます。クイックスタートについてはpinggyのドキュメントを参照してください。
-
-
以下のツールがインストールされたWindows 11 WSL2/Linux Ubuntu 22.04またはmacOS 14以降
a. Bash
-
Windows WSL2またはLinux Ubuntuの場合:
bash --version
GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)
... -
macOSの場合:
bash --version
GNU bash, version 3.2.57(1)-release (arm64-apple-darwin23)
...
b. Make
-
Windows WSL2またはLinux Ubuntuの場合:
Ubuntuリポジトリからインストールするには、
sudo apt update && sudo apt install makeを実行します。make --version
GNU Make 4.3
... -
macOSの場合:
make --version
GNU Make 3.81
...
c. Docker(Docker Desktop 4.30以降/Docker Engine v23.0以降)
-
Linux Ubuntuの場合:
- Ubuntuリポジトリからインストールするには、
sudo apt update && sudo apt install docker.io docker-buildx docker-compose-v2を実行します。 - ユーザーを
dockerグループに追加します:sudo usermod -aG docker $USER。 - 変更を有効にするために、ログアウトしてから再度ログインします。
- Ubuntuリポジトリからインストールするには、
-
WindowsまたはmacOSの場合:
WindowsまたはmacOS向けのDocker DesktopのインストールについてはDockerのドキュメントに従ってください。
docker version
...
Server: Docker Desktop
Engine:
Version: 24.0.5
...
d. JDK 17
-
Linux Ubuntuの場合:
Ubuntuリポジトリからインストールするには次を実行します:
sudo apt update && sudo apt install openjdk-17-jdk。 -
WindowsまたはmacOSの場合:
Microsoft Build for OpenJDKのインストールについてはMicrosoftのドキュメントに従ってください。
java --version
openjdk 17.0.10 2024-01-16
...
e. Postman
- Postmanから入手できるバイナリを使用してください。
- extend-helper-cliから入手できるバイナリを使用してください。
g. TCP転送機能を持つローカルトンネルサービス。例:
-
無料プランには登録が必要です。クイックスタートについてはngrokのドキュメントを参照してください。
-
登録不要で試すことができます。クイックスタートについてはpinggyのドキュメントを参照してください。
-
-
以下のツールがインストールされたWindows 11 WSL2/Linux Ubuntu 22.04またはmacOS 14以降
a. Bash
-
Windows WSL2またはLinux Ubuntuの場合:
bash --version
GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)
... -
macOSの場合:
bash --version
GNU bash, version 3.2.57(1)-release (arm64-apple-darwin23)
...
b. Make
-
Windows WSL2またはLinux Ubuntuの場合:
Ubuntuリポジトリからインストールするには、
sudo apt update && sudo apt install makeを実行します。make --version
GNU Make 4.3
... -
macOSの場合:
make --version
GNU Make 3.81
...
c. Docker(Docker Desktop 4.30以降/Docker Engine v23.0以降)
-
Linux Ubuntuの場合:
- Ubuntuリポジトリからインストールするには、
sudo apt update && sudo apt install docker.io docker-buildx docker-compose-v2を実行します。 - ユーザーを
dockerグループに追加します:sudo usermod -aG docker $USER。 - 変更を有効にするために、ログアウトしてから再度ログインします。
- Ubuntuリポジトリからインストールするには、
-
WindowsまたはmacOSの場合:
WindowsまたはmacOS向けのDocker DesktopのインストールについてはDockerのドキュメントに従ってください。
docker version
...
Server: Docker Desktop
Engine:
Version: 24.0.5
...
d. Python 3.10
-
Linux Ubuntuの場合:
Ubuntuリポジトリからインストールするには、
sudo apt update && sudo apt install python3 python3-venvを実行します。 -
WindowsまたはmacOSの場合:
こちらから入手できるインストーラーを使用してください。
python3 --version
Python 3.10.12
e. Postman
- Postmanから入手できるバイナリを使用してください。
- extend-helper-cliから入手できるバイナリを使用してください。
g. TCP転送機能を持つローカルトンネルサービス。例:
-
無料プランには登録が必要です。クイックスタートについてはngrokのドキュメントを参照してください。
-
登録不要で試すことができます。クイックスタートについてはpinggyのドキュメントを参照してください。
-
- AGS Admin Portal環境へのアクセス。
- Base URL:
<お使いの環境のドメインURL>- AGS Public Cloudのお客様の例:
https://spaceshooter.prod.gamingservices.accelbyte.io - AGS Private Cloudのお客様の例:
https://dev.customer.accelbyte.io
- AGS Public Cloudのお客様の例:
- まだ持っていない場合は、ゲームネームスペースを作成してください。ネームスペースIDを控えておいてください。
confidentialクライアントタイプでOAuthクライアントを作成してください。Client IDとClient Secretを保管しておいてください。
- Base URL:
Clone the app template
- C#
- Go
- Java
- Python
git clone https://github.com/AccelByte/cloudsave-validator-grpc-plugin-server-csharp.git
git clone https://github.com/AccelByte/cloudsave-validator-grpc-plugin-server-go.git
git clone https://github.com/AccelByte/cloudsave-validator-grpc-plugin-server-java.git
git clone https://github.com/AccelByte/cloudsave-validator-grpc-plugin-server-python.git
Set up, run, and test an Extend app
このセクションでは、Extend appのセットアップ、ビルド、実行、テストの方法について説明します。
Set up the Extend app
このappを実行できるようにするには、以下のセットアップ手順に従ってください。
-
.env.templateファイルの内容をコピーして、docker compose用の.envファイルを作成します。注記ホストOSの環境変数は
.envファイルの変数よりも優先されます。.envファイルの変数が正しく反映されない場合は、同じ名前のホストOS環境変数が存在するかどうかを確認してください。詳細については、docker compose環境変数の優先順位に関するDockerのドキュメントを参照してください。 -
以下に示すように、
.envファイルに必要な環境変数を入力します。AB_BASE_URL=https://test.accelbyte.io # AGS環境のBase URL
AB_CLIENT_ID='xxxxxxxxxx' # Prerequisitesセクションで取得したClient ID
AB_CLIENT_SECRET='xxxxxxxxxx' # Prerequisitesセクションで取得したClient Secret
AB_NAMESPACE='xxxxxxxxxx' # Prerequisitesセクションで取得したNamespace ID
PLUGIN_GRPC_SERVER_AUTH_ENABLED=true # アクセストークン検証の有効化/無効化注記このappでは、
PLUGIN_GRPC_SERVER_AUTH_ENABLEDはデフォルトでtrueに設定されています。falseに設定されている場合、gRPC serverはAccelByte Gaming Servicesのアクセストークンなしで呼び出すことができます。このオプションは開発目的でのみ提供されています。本番環境ではgRPC serverのアクセストークン検証を有効にすることをお勧めします。
Build the Extend app
このappをビルドするには、以下のコマンドを実行します。
make build
Run the Extend app
このappをコンテナ内でビルドして実行するには、以下のコマンドを実行します。
docker compose up --build
Test the Extend app
ローカル開発環境またはAGSでExtend appをテストできます。
Test in a local development environment
テストを行う前に、PLUGIN_GRPC_SERVER_AUTH_ENABLED が false に設定されていることを確認してください。設定されていない場合、gRPCリクエストは gRPC server によって拒否されます。
このapp内のカスタム関数は、Postman を使用してローカルでテストできます。Postmanを使用してExtend appをテストするには、以下の手順に従ってください。
-
以下のコマンドを使用してこのappを実行します。
docker compose up --build -
Postmanで新しいgRPCリクエストを作成し、サーバーURLとして
localhost:6565を入力します。詳細については、gRPCをサポートするPostmanのガイドを参照してください。 -
続けて
CloudsaveValidatorService/BeforeWritePlayerRecordメソッドを選択し、以下のサンプルメッセージで呼び出します。a. 有効な
payloadの場合{
"createdAt": {
"nanos": 10,
"seconds": "1693468029"
},
"isPublic": true,
"key": "favorite_weapon",
"namespace": "mynamespace",
"payload": "eyJ1c2VySWQiOiAiMWUwNzZiY2VlNmQxNGM4NDlmZmIxMjFjMGUwMTM1YmUiLCAiZmF2b3VyaXRlV2VhcG9uVHlwZSI6ICJTV09SRCIsICJmYXZvdXJpdGVXZWFwb24iOiAiZXhjYWxpYnVyIn0=", // {"userId": "1e076bcee6d14c849ffb121c0e0135be", "favoriteWeaponType": "SWORD", "favoriteWeapon": "excalibur"} をbase64でエンコードしたもの
"setBy": "SERVER",
"updatedAt": {
"nanos": 10,
"seconds": "1693468275"
},
"userId": "1e076bcee6d14c849ffb121c0e0135be"
}レスポンスには以下のように
isSuccess: trueが含まれます。{
"isSuccess": true,
"key": "favorite_weapon",
"userId": "1e076bcee6d14c849ffb121c0e0135be"
}b. 無効な
payloadの場合{
"createdAt": {
"nanos": 10,
"seconds": "1693468029"
},
"isPublic": true,
"key": "favorite_weapon",
"namespace": "mynamespace",
"payload": "eyJmb28iOiJiYXIifQ==", // {"foo":"bar"} をbase64でエンコードしたもの
"setBy": "SERVER",
"updatedAt": {
"nanos": 10,
"seconds": "1693468275"
},
"userId": "1e076bcee6d14c849ffb121c0e0135be"
}レスポンスには以下のように
isSuccess: falseが含まれます。{
"isSuccess": false,
"key": "favorite_weapon",
"userId": "1e076bcee6d14c849ffb121c0e0135be",
"error": {
"errorCode": 1,
"errorMessage": "favorite weapon cannot be empty; favorite weapon type cannot be empty; user ID cannot be empty"
}
}
Test with AGS
AGSでローカルに実行されているappをテストするには、gRPC server がインターネットに接続されている必要があります。パブリックIPを必要とせずにこれを行うには、ローカルトンネルサービスを使用できます。
-
以下のコマンドを使用してこのappを実行します。
docker compose up --build -
ローカル開発環境の
gRPC serverTCPポート6565をインターネットに公開します。最も簡単な方法は、ローカルトンネルサービスプロバイダーを使用することです。-
ngrokにサインインし、ngrokダッシュボードから
authtokenを取得してローカル環境に設定します。 そして、gRPC serverを公開するには以下のコマンドを使用します。ngrok tcp 6565 -
または、pinggyを使用して
sshコマンドラインのみで簡単なトンネルを設定することもできます。 その場合、gRPC serverを公開するには以下のコマンドを使用します。ssh -p 443 -o StrictHostKeyChecking=no -o ServerAliveInterval=30 -R0:127.0.0.1:6565 tcp@a.pinggy.io
トンネル転送URL(例:
http://0.tcp.ap.ngrok.io:xxxxxやtcp://xxxxx-xxx-xxx-xxx-xxx.a.free.pinggy.link:xxxxx)を控えておいてください。備考gRPCサーバーポート(TCP)をインターネットに公開するために、他のローカルトンネルサービスや別の方法を使用することもできます。
-
-
Admin Portalで、この設定に対応する正しいネームスペースに移動し、以下の操作を行います。
-
サイドバーメニューから、Online > Cloud Save > Customization に移動します。
-
まだ設定を追加していない場合は、Add Configuration をクリックします。
-
Locally hosted for testing purpose オプションを選択します。前の手順で取得したトンネル転送URLを入力し、Save をクリックします。
-
-
以下の権限を含む
confidentialクライアントタイプでOAuthクライアントを作成します。- AGS Private Cloudのお客様の場合:
ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:PLUGINS [CREATE,READ,UPDATE,DELETE]ADMIN:NAMESPACE:{namespace}:USER:*:CLOUDSAVE:RECORD [CREATE,READ,UPDATE,DELETE]ADMIN:NAMESPACE:{namespace}:CLOUDSAVE:RECORD [CREATE,READ,UPDATE,DELETE]NAMESPACE:{namespace}:CLOUDSAVE:RECORD [CREATE,READ,UPDATE,DELETE]ADMIN:NAMESPACE:{namespace}:INFORMATION:USER:* [DELETE]
- AGS Public Cloudのお客様の場合:
- Cloud Save > Custom Configuration(Read、Create、Update、Delete)
- Cloud Save > Game Records(Read、Create、Update、Delete)
- Cloud Save > Player Records(Read、Create、Update、Delete)
- IAM > Users(Delete)
importantClient IDとClient Secretのコピーを保管しておいてください。- この手順で作成するOAuthクライアントは、Prerequisitesセクションで説明したものとは別のものです。次のステップのCLIデモappで必要になります。
- AGS Private Cloudのお客様の場合:
-
Extend appのフローをシミュレートするために、Postmanコレクション(
demo/cloudsave-validator-demo.postman_collection.json)をインポートします。Extend appフローの実行中は、このappのコンソールログに注目してください。コレクション内のすべてのリクエストを実行すると、少なくとも1つのgRPC Serverメソッドが呼び出されるはずです。important- 前の手順で作成した
Client IDとClient Secretを含む、Postman Collection Overview(および/またはGlobal Environment)に必要な環境変数を設定することを忘れないでください。 - ローカルでホストしているExtend Appをローカルトンネルサービスで公開する場合は、環境変数
GRPC_SERVER_URL(例:9.tcp.ap.ngrok.io:99999やxxxxx-xxx-xxx-xxx-xxx.a.free.pinggy.link:xxxxx)を設定する必要があります。また、Extend AppをAccelByte Gaming Servicesにデプロイした場合はEXTEND_APP_NAMEを設定する必要があります。
- 前の手順で作成した
Deploy in AGS
AGSでExtend appをデプロイするには、Admin Portalで以下の手順が必要です。
- Extend appを作成する。
- Extend appをアップロードする。
- Extend appを設定する。
- Extend appをデプロイする。
- AGSがExtend appを使用するように設定する。
Create the Extend app
- AGS Admin Portalで、Extend Override appを作成したいネームスペースに移動します。
- サイドバーメニューの ADD-ONS から、Extend > Override に移動します。
- Overridable Features ページで、+ Create New ボタンをクリックします。
- Create App フォームで、Extend appの名前と説明(任意)を入力します。
- Create をクリックします。新しいExtend appがOverridable Features appリストに追加されます。
Upload the Extend app
-
extend-helper-cli用のIAMクライアントを設定します。クライアントタイプ
confidentialでIAMクライアントを作成し、以下に記載されている必要な権限を割り当てます。Client IDとClient Secretのコピーを保管しておいてください。- AGS Private Cloudのお客様の場合:
ADMIN:NAMESPACE:{namespace}:EXTEND:REPOCREDENTIALS[READ]ADMIN:NAMESPACE:{namespace}:EXTEND:APP[READ]
- AGS Public Cloudのお客様の場合:
- Extend > Extend appイメージリポジトリアクセス(Read)
- Extend > App(Read)
- AGS Private Cloudのお客様の場合:
-
必要な環境変数をエクスポートし、extend-helper-cliを使用してExtend appコンテナイメージをビルドし、AGSにアップロードします。
<project-dir>がExtend appのプロジェクトディレクトリを指していることを確認してください<namespace>と<app-name>の値は、Extend appのApp Detailページで確認できます- 適切なイメージタグ(例:
v0.0.1)を使用してください
- Linux
- Windows (WSL2)
- macOS
# AGS環境のBase URL。例: https://spaceshooter.prod.gamingservices.accelbyte.io、https://dev.accelbyte.io など
export AB_BASE_URL='https://xxxxxxxxxx'
# extend-helper-cli用OAuthクライアントのClient ID(手順1から)
export AB_CLIENT_ID='xxxxxxxxxx'
# extend-helper-cli用OAuthクライアントのClient Secret(手順1から)
export AB_CLIENT_SECRET='xxxxxxxxxx'
./extend-helper-cli-linux_amd64 image-upload --login --work-dir <project-dir> --namespace <namespace> --app <app-name> --image-tag v0.0.1# AGS環境のBase URL。例: https://spaceshooter.prod.gamingservices.accelbyte.io、https://dev.accelbyte.io など
export AB_BASE_URL='https://xxxxxxxxxx'
# extend-helper-cli用OAuthクライアントのClient ID(手順1から)
export AB_CLIENT_ID='xxxxxxxxxx'
# extend-helper-cli用OAuthクライアントのClient Secret(手順1から)
export AB_CLIENT_SECRET='xxxxxxxxxx'
./extend-helper-cli-linux_amd64 image-upload --login --work-dir <project-dir> --namespace <namespace> --app <app-name> --image-tag v0.0.1# AGS環境のBase URL。例: https://spaceshooter.prod.gamingservices.accelbyte.io、https://dev.accelbyte.io など
export AB_BASE_URL='https://xxxxxxxxxx'
# extend-helper-cli用OAuthクライアントのClient ID(手順1から)
export AB_CLIENT_ID='xxxxxxxxxx'
# extend-helper-cli用OAuthクライアントのClient Secret(手順1から)
export AB_CLIENT_SECRET='xxxxxxxxxx'
./extend-helper-cli-darwin_amd64 image-upload --login --work-dir <project-dir> --namespace <namespace> --app <app-name> --image-tag v0.0.1important- 上記のコマンドは、Extend appプロジェクトとは別のターミナルおよび異なる作業ディレクトリで実行することをお勧めします。これにより、extend-helper-cliがExtend app用の環境変数を誤って使用してしまうことを防げます。
- 以下のエラーが発生した場合は、解決手順についてトラブルシューティング: Dockerログインの失敗を参照してください。
Error saving credentials: error storing credentials - err: exit status 1, out: `error storing credentials - err: exit status 1, out: `The stub received bad data.`
イメージが正常にアップロードされると、Image Version History ページにバージョンv0.0.1のイメージが表示されます。

Configure the Extend app
アップロードしたExtend appをデプロイする前に、Extend appが必要とする環境変数を設定する必要があります。app詳細ページで、Extend appをローカルで実行・テストする際に使用した値と同じ値で以下の環境変数を設定します。
AB_CLIENT_IDAB_CLIENT_SECRET
Extend Override appがリリースv2024.02.13より前のテンプレートに基づいている場合は、必ず PLUGIN_GRPC_SERVER_AUTH_ENABLED 環境変数を true に設定してください。設定しない場合、Extend appのアクセストークン検証が無効になり、有効なアクセストークンなしでExtend appにアクセスされる可能性があります。
リリースv2024.02.13以降、Extend Override appテンプレートの PLUGIN_GRPC_SERVER_AUTH_ENABLED はデフォルトで true に設定されています。アクセストークン検証は、PLUGIN_GRPC_SERVER_AUTH_ENABLED が明示的に false に設定された場合にのみ無効にできます。これに合わせて、Admin Portalから作成される新しいExtend appには、デフォルトで PLUGIN_GRPC_SERVER_AUTH_ENABLED 環境変数が設定されなくなりました。以前は、Admin Portalから作成されるすべての新しいExtend appに PLUGIN_GRPC_SERVER_AUTH_ENABLED=false が追加されていました。
Deploy the Extend app
Extend appをデプロイするには、Deploy Latest Image をクリックします。app状態が RUNNING に更新されるまで待ちます。これはExtend appが正常にデプロイされたことを示します。
Set AGS to use the Extend app
Admin Portalで、Cloud Saveのカスタマイズを更新します。Overridden by セクションに移動して既存の設定を編集します。

AccelByte hosted オプションを選択し、Extend appのいずれかを選択します。完了するには Save をクリックします。
Next step
Extend Override appテンプレートを変更して、独自のカスタムロジックを実装しましょう。詳細についてはこちらを参照してください。