Collega PGAdapter all'emulatore

Questa pagina mostra come collegare PGAdapter al Emulatore di Spanner. L'emulatore viene eseguito in locale puoi utilizzarlo 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 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 un emulatore.
  • Esegui sia l'emulatore sia PGAdapter sulla tua macchina locale.
  • Esegui sia l'emulatore sia PGAdapter in una rete Docker.

Container Docker combinato

Esegui l'immagine Docker predefinita che contiene sia PGAdapter un emulatore. L'istanza PGAdapter nel container Docker configurato automaticamente per la connessione all'emulatore nel container.

Avvia il container Docker con il comando seguente.

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, utilizzerà il nome del progetto emulator-project e nome 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 container Docker, con 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"

Esegui l'emulatore e PGAdapter sulla tua macchina locale

Puoi eseguire sia l'emulatore sia 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 poter 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 aggiuntivi della riga di comando per PGAdapter utilizzati connettiti all'emulatore:

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

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;

Esegui l'emulatore e PGAdapter in una rete Docker

Puoi eseguire sia l'emulatore che PGAdapter in una rete Docker connetti PGAdapter all'emulatore usando i comandi seguenti.

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 che PGAdapter deve connettersi. emulator:9010 è il nome e il numero di porta dell'emulatore nella la 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, con 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"