Collega PGAdapter all'emulatore

Questa pagina mostra come collegare PGAdapter all'emulatore Spanner. L'emulatore viene eseguito localmente e puoi usarlo per sviluppare e testare le tue applicazioni senza creare un progetto Google Cloud o un account di fatturazione. Poiché l'emulatore memorizza i dati solo in memoria, tutto lo stato, inclusi dati, schema e configurazioni, viene perso al riavvio. L'emulatore offre le stesse API del servizio di produzione Spanner ed è progettato per lo sviluppo e i test locali, non per i deployment di produzione.

Puoi collegare PGAdapter all'emulatore in tre modi diversi:

  • Esegui un container Docker combinato predefinito con PGAdapter e l'emulatore.
  • Esegui sia l'emulatore che PGAdapter sulla tua macchina locale.
  • Esegui sia l'emulatore che PGAdapter in una rete Docker.

Container Docker combinato

Esegui l'immagine Docker predefinita che contiene sia PGAdapter sia l'emulatore. L'istanza PGAdapter nel contenitore Docker viene configurata automaticamente per connettersi all'emulatore nel contenitore.

Avvia il container Docker con il seguente comando.

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

Non è necessario specificare un nome di progetto, istanza o database quando si avvia il contenitore. Per impostazione predefinita verranno utilizzati il nome del progetto emulator-project e il nome dell'istanza test-instance. Qualsiasi database a cui ti colleghi viene creato automaticamente da PGAdapter.

Puoi connetterti a PGAdapter ed eseguire istruzioni con psql con il seguente comando.

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

Il database test-database viene creato automaticamente. Esegui queste istruzioni per verificare di essere connesso a un database in dialetto 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;

Puoi anche connetterti direttamente all'emulatore all'interno del contenitore Docker, ad esempio con l'interfaccia a riga di comando gcloud.

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"

Esegui l'emulatore e PGAdapter sulla tua macchina locale

Puoi eseguire sia l'emulatore che PGAdapter sulla tua macchina locale e collegare PGAdapter all'emulatore con i seguenti comandi.

Per prima cosa, avvia l'emulatore.

gcloud emulators spanner start

Quindi avvia PGAdapter e connettilo all'emulatore. Tieni presente che devi avviare PGAdapter come applicazione Java sulla tua macchina locale affinché possa accedere all'emulatore. Se avvii PGAdapter in un container Docker, il container non potrà accedere all'emulatore in esecuzione sull'host locale.

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

Gli argomenti della riga di comando aggiuntivi per PGAdapter utilizzati per collegarsi all'emulatore sono:

  • -c "": questo indica a PGAdapter di non utilizzare alcuna credenziale.
  • -r autoConfigEmulator=true: questo comando indica a PGAdapter di connettersi a localhost:9010, che è l'host e la porta dell'emulatore predefiniti. Inoltre, invita PGAdapter a creare automaticamente qualsiasi database a cui un utente si connette. Ciò significa che non devi creare un database prima di collegarti.

Puoi connetterti a PGAdapter ed eseguire istruzioni con psql con il seguente comando.

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

Il database test-database viene creato automaticamente. Esegui queste istruzioni per verificare di essere connesso a un database in dialetto 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;

Esegui l'emulatore e PGAdapter in una rete Docker

Puoi eseguire sia l'emulatore sia PGAdapter in una rete Docker e collegare PGAdapter all'emulatore con i seguenti comandi.

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

Sia PGAdapter sia l'emulatore vengono avviati nella stessa rete Docker e PGAdapter è configurato per connettersi all'emulatore. Gli argomenti della riga di comando aggiuntivi per PGAdapter utilizzati per connettersi all'emulatore sono:

  • -c "": questo indica a PGAdapter di non utilizzare alcuna credenziale.
  • -r autoConfigEmulator=true: indica a PGAdapter di creare automaticamente qualsiasi database a cui un utente si connette. Ciò significa che non è necessario creare un database prima di connettersi.
  • -e emulator:9010: -e specifica l'endpoint a cui deve collegarsi PGAdapter. emulator:9010 è il nome e il numero di porta dell'emulatore nella stessa rete Docker.
  • -x: consente le connessioni a PGAdapter dalla tua macchina locale.

Puoi connetterti a PGAdapter ed eseguire istruzioni con psql con il seguente comando.

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

Il database test-database viene creato automaticamente. Esegui queste istruzioni per verificare di essere connesso a un database in dialetto 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;

Puoi anche connetterti direttamente all'emulatore nella rete Docker, ad esempio con l'interfaccia a riga di comando gcloud.

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"