Menghubungkan PGAdapter ke emulator

Halaman ini menunjukkan cara menghubungkan PGAdapter ke emulator Spanner. Emulator berjalan secara lokal, dan Anda dapat menggunakannya untuk mengembangkan serta 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 perangkat 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:

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

Container Docker gabungan

Jalankan image Docker bawaan yang berisi PGAdapter dan emulator. Instance PGAdapter di container Docker secara otomatis dikonfigurasi agar terhubung ke emulator dalam container.

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 project, instance, atau nama database saat memulai container. Secara default, nama project emulator-project dan nama instance test-instance akan digunakan. Database apa pun yang Anda hubungkan dibuat secara otomatis oleh PGAdapter.

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

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

Database test-database dibuat secara otomatis. Jalankan pernyataan berikut untuk memverifikasi bahwa Anda terhubung ke database 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 container 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 mesin lokal Anda

Anda dapat menjalankan emulator dan PGAdapter di mesin lokal Anda, 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 mesin lokal agar dapat mengakses emulator. Jika Anda memulai PGAdapter dalam container Docker, emulator tidak akan 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 "": Kode ini menginstruksikan PGAdapter untuk tidak menggunakan kredensial apa pun.
  • -r autoConfigEmulator=true: Elemen ini menginstruksikan PGAdapter untuk terhubung ke localhost:9010, yang merupakan host dan port emulator default. Library ini juga menyuruh PGAdapter untuk secara otomatis membuat database apa pun yang terhubung ke pengguna. Ini berarti Anda tidak perlu membuat database sebelum menghubungkannya.

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

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

Database test-database dibuat secara otomatis. Jalankan pernyataan berikut untuk memverifikasi bahwa Anda terhubung ke database 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 serta 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 "": Kode ini menginstruksikan PGAdapter untuk tidak menggunakan kredensial apa pun.
  • -r autoConfigEmulator=true: Kode ini menginstruksikan PGAdapter untuk secara otomatis membuat database yang terhubung ke pengguna. Ini berarti Anda tidak perlu membuat database sebelum menghubungkannya.
  • -e emulator:9010: -e menentukan endpoint yang harus terhubung dengan PGAdapter. emulator:9010 adalah nama dan nomor port emulator di jaringan Docker yang sama.
  • -x: Atribut ini memungkinkan koneksi ke PGAdapter dari mesin lokal Anda.

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

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

Database test-database dibuat secara otomatis. Jalankan pernyataan berikut untuk memverifikasi bahwa Anda terhubung ke database 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"