ふり返る暇なんて無いね

日々のメモ書きをつらつらと。メインブログに書くほどでもないことを流してます

Spannerを触りたい。(Spanner構築と接続確認まで)

Cloud SQLでPostgreSQLを使っていたのですが、諸事情でSpannerを検証する必要があるので、ざっくり構築して接続確認するまでのメモです。

Spanner構築

Terraformでざっくり作ります。マルチリージョン構成で、スペックは最低で作ります。 database_dialectをPOSTGRESQLにすることでPostgreSQLと互換が取れます。

###########################################
# Service API
###########################################
resource "google_project_service" "main" {
  for_each = {
    for service in [
      "spanner.googleapis.com",
    ] : service => service
  }
  service = each.key

  disable_dependent_services = true
  disable_on_destroy         = false
}

###########################################
# Spanner
###########################################
resource "google_spanner_instance" "main" {
  config           = "asia1"
  name             = "poc-spanner"
  display_name     = "poc-spanner"
  processing_units = 100

  depends_on = [
    google_project_service.main
  ]
}

resource "google_spanner_database" "database" {
  instance         = google_spanner_instance.main.name
  name             = "poc"
  database_dialect = "POSTGRESQL" 
}

Spannerに接続

SpannerにはPostgreSQLのインターフェースがあるが、これに接続するために、PGAdapterを使用する必要があります。 PGAdapterはローカルで起動して、Spannerに接続するためのプロキシとして働きます。

今回はMac上にPGAdapterをインストールして、接続確認します。

とりあえず、javaのランタイムとpsqlクライアントをインストールします。

brew install java
echo 'export PATH="/opt/homebrew/opt/openjdk/bin:$PATH"' >> ~/.zshrc
sudo ln -sfn /opt/homebrew/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
brew install libpq
echo 'export PATH="/opt/homebrew/opt/libpq/bin:$PATH"' >> ~/.zshrc
exec ${SHELL} -l

PGAdapterをダウンロードして、起動します

wget https://storage.googleapis.com/pgadapter-jar-releases/pgadapter.tar.gz && tar -xzvf pgadapter.tar.gz
java -jar pgadapter.jar -p ${PROJECT_ID} -i ${INSTANCE_NAME} -d ${DATABASE}

ターミナルを別窓で開いてpsqlで接続して雑にテーブルを作ってみます。

% psql -h localhost
psql (16.1, server 14.1)
Type "help" for help.

poc=> CREATE TABLE Staff (
poc-> id    INTEGER    NOT NULL,
poc(> name   TEXT       NOT NULL,
poc(> age    INTEGER    ,
poc(> PRIMARY KEY (id));

気持ちテーブル作成に時間がかかる気がします。

コンソールからテーブルを確認すると作成されていることが確認できます。

いったん接続出来るところまで確認できました。 ここから既存のデータを入れたり、Cloud Run上のアプリケーションから接続したりを確認していきます。