Closed4

Atlas で Cloud Spanner のマイグレーションってできるの?

hott0mott0hott0mott0

結論、Spanner 用の Driver はありませんでした。
最新のリリースタグのファイルを見ると、sql/spanner ディレクトリは存在しませんでした (T-T)

最近副業で、Go製マイグレーションツールの Atlas を使用することになり、キャッチアップしています。
https://atlasgo.io

最初は AWS で MySQL を使用する予定でしたが、議論の結果、GCP の Cloud Spanner を使用したいという結論に至りました。

ここで、「Atlas は Spanner でも使えるのだろうか」と疑問が湧きました。
AlloyDB では golang-migrate を使用した経験があるため、Atlas も使えるイメージが湧きましたが、、、。

Atlas のドキュメントを探しても、Spanner に関することが書いてあるページはなかったため、使えないのだろうか、と思っていましたが、公式の Github のリポジトリを見てみると、Spanner 用のドライバーを追加しているであろう PR が見つかりました。
https://github.com/ariga/atlas/pull/1171

これはいけるのでは、と思ったので、検証してみます。

hott0mott0hott0mott0

ローカル環境で 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
hott0mott0hott0mott0

上記のPRの内容を見ても、spannerの名前で Driver を作ろうとしていたようですし、リリースされず削除されてしまったのでしょう。
どのPRで削除されてしまったのかは見つけられていないです。

このスクラップは3ヶ月前にクローズされました