Atlas で Cloud Spanner のマイグレーションってできるの?
結論、Spanner 用の Driver はありませんでした。
最新のリリースタグのファイルを見ると、sql/spanner ディレクトリは存在しませんでした (T-T)
最近副業で、Go製マイグレーションツールの Atlas を使用することになり、キャッチアップしています。
最初は AWS で MySQL を使用する予定でしたが、議論の結果、GCP の Cloud Spanner を使用したいという結論に至りました。
ここで、「Atlas は Spanner でも使えるのだろうか」と疑問が湧きました。
AlloyDB では golang-migrate を使用した経験があるため、Atlas も使えるイメージが湧きましたが、、、。
Atlas のドキュメントを探しても、Spanner に関することが書いてあるページはなかったため、使えないのだろうか、と思っていましたが、公式の Github のリポジトリを見てみると、Spanner 用のドライバーを追加しているであろう PR が見つかりました。
これはいけるのでは、と思ったので、検証してみます。
とりあえず以下の記事を参考に、ローカル環境で Cloud Spanner のエミュレータを起動させました。
ローカル環境で Spanner を立ち上げることができたら、Atlas でローカル環境で起動している Spanner にテーブルを作成できるかを試します。
Cloud Spanner は基本的に PostgreSQL 互換なので、SQL文でスキーマを書いて、宣言的マイグレーションを行ってみます。
前のスクラップで使用した以下のテーブルを PostgreSQL の形式で作成します。(データベースは user
というものを作成済み)
CREATE TABLE IF NOT EXISTS users (
id text PRIMARY KEY,
user_name text not null,
email text not null UNIQUE,
prefecture smallint not null,
birthday date not null,
gender smallint not null,
deleted bool not null DEFAULT false,
created_at bigint not null DEFAULT EXTRACT(EPOCH FROM NOW()),
updated_at bigint not null DEFAULT EXTRACT(EPOCH FROM NOW()),
deleted_at bigint
);
実行するコマンドは以下です。
-u オプションで指定しているドライバーURL は、golang-migrate で使える形式のものを指定してみました。
atlas schema apply -u "spanner://projects/{PROJECT_ID}/instances/{INSTANCE_ID}/databases/user --to "file://./atlas/mysql/user.sql"
実行した結果、エラーが出てしまいました。
Error: sql/sqlclient: unknown driver "spanner". See: https://atlasgo.io/url
上記のPRの内容を見ても、spanner
の名前で Driver を作ろうとしていたようですし、リリースされず削除されてしまったのでしょう。
どのPRで削除されてしまったのかは見つけられていないです。