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 archivia i dati solo la memoria e tutti gli stati, inclusi dati, schema e configurazioni, vengono persi al riavvio. L'emulatore offre le stesse API dell'ambiente di produzione Spanner ed è destinato allo sviluppo e ai test locali, non alla produzione deployment di machine learning.

Puoi collegare PGAdapter all'emulatore in tre modi diversi:

  • Esegui un container Docker combinato predefinito con PGAdapter e l'emulatore.
  • Esegui sia l'emulatore sia 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 un 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 devi specificare il nome di un progetto, di un'istanza o di un database quando avvii nel container. Per impostazione predefinita verranno utilizzati il nome del progetto emulator-project e il nome dell'istanza test-instance. Qualsiasi database a cui ti connetti viene automaticamente creato da PGAdapter.

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

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

Il database test-database viene creato automaticamente. Esegui queste istruzioni per verificare la connessione a un database di database di dialetti 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 connetti PGAdapter all'emulatore usando i comandi seguenti.

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 Docker non riesce ad accedere all'emulatore in esecuzione 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, indica a PGAdapter di creare automaticamente qualsiasi database che 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 comando seguente.

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 che l'emulatore vengono avviati nella stessa rete Docker, e PGAdapter è configurato per connettersi all'emulatore. L'ulteriore gli argomenti della riga di comando per PGAdapter utilizzati per connettersi sono:

  • -c "": indica a PGAdapter di non utilizzare alcuna credenziale.
  • -r autoConfigEmulator=true: indica a PGAdapter di crea automaticamente qualsiasi database a cui si connette un utente. Ciò significa che non è necessario creare un database prima di accedervi.
  • -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 comando seguente.

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

Il database test-database viene creato automaticamente. Esegui queste istruzioni per verificare la connessione a un database di database di dialetti 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"