CockroachCloudを使ってNakamaを起動する
ゲームサーバー Nakama では、現在無料で使える CockroachDB のマネージドサービス CockroachCloudも利用できるが、3.2.1+6790d453 時点で nakama migration 出来ない。エラー内容は以下のもの。全く同じ接続用URLを使用して cockroach cli を利用すると接続は可能なので Database ping に関わるところでコケてしまうらしい。 code:sh
{"level":"fatal","ts":"2021-04-29T02:07:02.938+0900","caller":"migrate/migrate.go:182","msg":"Error pinging database","error":"EOF"}
リポジトリとフォーラムに投稿がそれぞれある。
CockroachCloud を使いながら nakama migration 周りを実行するとき固有の問題らしく、間近では nakama migration が行うマイグレーション処理を手で実行することで、サーバーを起動できる状態にまで持っていくことができる。
マイグレーションで利用されるSQLはここにある。
CREATE DATABASE nakama; を実行してデータベースを作ったあと、migration で実行される sql のうち、up に相当する箇所を抜き出してすべて適用する。その後 migration の履歴を以下のような形で擬似的にねじ込む。
code:sql
CREATE TABLE migration_info (id text NOT NULL PRIMARY KEY, applied_at timestamp with time zone);
CREATE INDEX ON migration_info (id);
INSERT INTO migration_info (id, applied_at) VALUES ('20180103142001_initial_schema.sql','2021-04-16 12:35:14.419253+00');
INSERT INTO migration_info (id, applied_at) VALUES ('20180805174141-tournaments.sql','2021-04-16 12:35:14.435163+00');
INSERT INTO migration_info (id, applied_at) VALUES ('20200116134800-facebook-instant-games.sql','2021-04-16 12:35:14.442356+00');
INSERT INTO migration_info (id, applied_at) VALUES ('20200615102232-apple.sql','2021-04-16 12:35:14.449562+00');
INSERT INTO migration_info (id, applied_at) VALUES ('20201005180855-console.sql','2021-04-16 12:35:14.449562+00');
INSERT INTO migration_info (id, applied_at) VALUES ('20210416090601-purchase.sql','2021-04-16 12:35:14.449562+00');
すると以下のような起動コマンドで起動できるようになる。
nakama では --database.address の指定に &options=--cluster=hoge-fuga-1234 というクエリを指定できないので cluster の指定をデータベースの指定の内に含める必要がある。例えば cluster が hoge-fuga-1234 であれば cluster_name は hoge-fuga、 cluster_num は 1234 という形になる。
ちなみに接続に必要なルート証明書は CockroachCloud のコンソールから取得しておく必要がある。
code:sh
./nakama --name nakama1 --database.address '(user):(password)@(server):(port)/(cluster_name)-(cluster_num).nakama?ssl=true&sslmode=verify-full&sslrootcert=cc-ca.crt'
正常に起動すれば以下のような出力が得られる。
code:sh
{"level":"info","ts":"2021-04-29T02:57:56.364+0900","caller":"server/api.go:128","msg":"Starting API server for gRPC requests","port":7349}
{"level":"info","ts":"2021-04-29T02:57:56.384+0900","caller":"server/api.go:262","msg":"Starting API server gateway for HTTP requests","port":7350}
{"level":"info","ts":"2021-04-29T02:57:56.394+0900","caller":"server/console.go:130","msg":"Starting Console server for gRPC requests","port":7348}
{"level":"info","ts":"2021-04-29T02:57:56.398+0900","caller":"server/console.go:223","msg":"Starting Console server gateway for HTTP requests","port":7351}
Nakama Console は localhost:7351 でアクセス可能。
デフォルトユーザーは username: admin, password: password でログインできる。
ちなみに CockroachCloud のロケーションが遠すぎるからなのか物によっては 1クエリに1秒位かかってしまうので、CockroachCloud を使っての本番稼働はいまいまは厳しいと思われる。
code:sql
-- 手元からCRCloudへのクエリ
CREATE TABLE
Time: 402ms
-- 手元のCRDBへのクエリ
CREATE TABLE
Time: 46ms