Menghubungkan PGAdapter ke emulator

Halaman ini menunjukkan cara menghubungkan PGAdapter ke emulator Spanner. Emulator berjalan secara lokal, dan Anda dapat menggunakannya untuk mengembangkan dan menguji aplikasi tanpa membuat project Google Cloud atau akun penagihan. Karena emulator hanya menyimpan data dalam memori, semua status, termasuk data, skema, dan konfigurasi, akan hilang saat dimulai ulang. Emulator menawarkan API yang sama dengan layanan produksi Spanner dan ditujukan untuk pengembangan dan pengujian lokal, bukan untuk deployment produksi.

Anda dapat menghubungkan PGAdapter ke emulator dengan tiga cara berbeda:

  • Jalankan container Docker gabungan bawaan dengan PGAdapter dan emulator.
  • Jalankan emulator dan PGAdapter di komputer lokal Anda.
  • Jalankan emulator dan PGAdapter di jaringan Docker.

Container Docker gabungan

Jalankan image Docker bawaan yang berisi PGAdapter dan emulator. Instance PGAdapter dalam penampung Docker otomatis dikonfigurasi untuk terhubung ke emulator dalam penampung.

Mulai container Docker dengan perintah berikut.

docker pull gcr.io/cloud-spanner-pg-adapter/pgadapter-emulator
docker run -d \
  -p 5432:5432 \
  -p 9010:9010 \
  -p 9020:9020 \
  gcr.io/cloud-spanner-pg-adapter/pgadapter-emulator

Anda tidak perlu menentukan nama project, instance, atau database saat memulai penampung. Secara default, nama project emulator-project dan nama instance test-instance akan digunakan. Setiap database yang Anda hubungkan akan otomatis dibuat oleh PGAdapter.

Anda dapat terhubung ke PGAdapter dan menjalankan pernyataan dengan psql dengan perintah berikut.

psql -h localhost -p 5432 -d test-database

Database test-database dibuat secara otomatis. Jalankan pernyataan ini untuk memverifikasi bahwa Anda terhubung ke database dialek PostgreSQL:

create table my_table (
  id bigint not null primary key,
  value varchar
);
insert into my_table (id, value) values (1, 'One');
select * from my_table;

Anda juga dapat terhubung langsung ke emulator di dalam penampung Docker, misalnya dengan gcloud CLI.

gcloud config configurations create emulator
gcloud config set auth/disable_credentials true
gcloud config set project emulator-project
gcloud config set api_endpoint_overrides/spanner http://localhost:9020/
gcloud spanner instances list
gcloud spanner databases execute-sql test-database \
  --instance=test-instance \
  --sql="select * from my_table"

Menjalankan emulator dan PGAdapter di komputer lokal

Anda dapat menjalankan emulator dan PGAdapter di komputer lokal, dan menghubungkan PGAdapter ke emulator dengan perintah berikut.

Pertama, mulai emulator.

gcloud emulators spanner start

Kemudian, mulai PGAdapter dan hubungkan ke emulator. Perhatikan bahwa Anda harus memulai PGAdapter sebagai aplikasi Java di komputer lokal agar dapat mengakses emulator. Jika Anda memulai PGAdapter dalam penampung Docker, PGAdapter tidak dapat mengakses emulator yang berjalan di host lokal Anda.

wget https://storage.googleapis.com/pgadapter-jar-releases/pgadapter.tar.gz \
  && tar -xzvf pgadapter.tar.gz
java -jar pgadapter.jar -p emulator-project -i test-instance \
  -c "" \
  -r autoConfigEmulator=true

Argumen command line tambahan untuk PGAdapter yang digunakan untuk terhubung ke emulator adalah:

  • -c "": Tindakan ini akan menginstruksikan PGAdapter untuk tidak menggunakan kredensial apa pun.
  • -r autoConfigEmulator=true: Tindakan ini akan menginstruksikan PGAdapter untuk terhubung ke localhost:9010, yang merupakan host dan port emulator default. Tindakan ini juga menginstruksikan PGAdapter untuk otomatis membuat database apa pun yang terhubung ke pengguna. Artinya, Anda tidak perlu membuat database sebelum menghubungkan ke database tersebut.

Anda dapat terhubung ke PGAdapter dan menjalankan pernyataan dengan psql dengan perintah berikut.

psql -h localhost -p 5432 -d test-database

Database test-database dibuat secara otomatis. Jalankan pernyataan ini untuk memverifikasi bahwa Anda terhubung ke database dialek PostgreSQL:

create table my_table (
  id bigint not null primary key,
  value varchar
);
insert into my_table (id, value) values (1, 'One');
select * from my_table;

Menjalankan emulator dan PGAdapter di jaringan Docker

Anda dapat menjalankan emulator dan PGAdapter di jaringan Docker dan menghubungkan PGAdapter ke emulator dengan perintah berikut.

cat <<EOT > docker-compose.yml
version: "3.9"
services:
  emulator:
    image: "gcr.io/cloud-spanner-emulator/emulator"
    pull_policy: always
    container_name: spanner-emulator
    ports:
      - "9010:9010"
      - "9020:9020"
  pgadapter:
    depends_on:
      emulator:
        condition: service_started
    image: "gcr.io/cloud-spanner-pg-adapter/pgadapter"
    pull_policy: always
    container_name: pgadapter-connected-to-emulator
    command:
      - "-p emulator-project"
      - "-i test-instance"
      - "-r autoConfigEmulator=true"
      - "-e emulator:9010"
      - "-c \"\""
      - "-x"
    ports:
      - "5432:5432"
EOT
docker compose up -d

PGAdapter dan emulator dimulai di jaringan Docker yang sama, dan PGAdapter dikonfigurasi untuk terhubung ke emulator. Argumen command line tambahan untuk PGAdapter yang digunakan untuk terhubung ke emulator adalah:

  • -c "": Tindakan ini akan menginstruksikan PGAdapter untuk tidak menggunakan kredensial apa pun.
  • -r autoConfigEmulator=true: Tindakan ini akan memerintahkan PGAdapter untuk membuat database apa pun yang terhubung ke pengguna secara otomatis. Artinya, Anda tidak perlu membuat database sebelum terhubung ke database tersebut.
  • -e emulator:9010: -e menentukan endpoint yang harus dihubungkan oleh PGAdapter. emulator:9010 adalah nama dan nomor port emulator di jaringan Docker yang sama.
  • -x: Tindakan ini memungkinkan koneksi ke PGAdapter dari komputer lokal Anda.

Anda dapat terhubung ke PGAdapter dan menjalankan pernyataan dengan psql dengan perintah berikut.

psql -h localhost -p 5432 -d test-database

Database test-database dibuat secara otomatis. Jalankan pernyataan ini untuk memverifikasi bahwa Anda terhubung ke database dialek PostgreSQL:

create table my_table (
  id bigint not null primary key,
  value varchar
);
insert into my_table (id, value) values (1, 'One');
select * from my_table;

Anda juga dapat terhubung langsung ke emulator di jaringan Docker, misalnya dengan gcloud CLI.

gcloud config configurations create emulator
gcloud config set auth/disable_credentials true
gcloud config set project emulator-project
gcloud config set api_endpoint_overrides/spanner http://localhost:9020/
gcloud spanner instances list
gcloud spanner databases execute-sql test-database \
  --instance=test-instance \
  --sql="select * from my_table"