Connecter PGAdapter à l'émulateur

Cette page explique comment connecter PGAdapter à l'émulateur Spanner. L'émulateur s'exécute localement et vous permet de développer et de tester vos applications sans créer de projet Google Cloud ni de compte de facturation. Comme l'émulateur ne stocke les données qu'en mémoire, tous les états, y compris les données, le schéma et les configurations, sont perdus au redémarrage. L'émulateur offre les mêmes API que le service de production Spanner. Il est destiné au développement et aux tests en local, et non aux déploiements en production.

Vous pouvez connecter PGAdapter à l'émulateur de trois manières différentes:

  • Exécutez un conteneur Docker combiné prédéfini avec PGAdapter et l'émulateur.
  • Exécutez l'émulateur et PGAdapter sur votre ordinateur local.
  • Exécutez l'émulateur et PGAdapter dans un réseau Docker.

Conteneur Docker combiné

Exécutez l'image Docker prédéfinie contenant à la fois PGAdapter et l'émulateur. L'instance PGAdapter du conteneur Docker est automatiquement configurée pour se connecter à l'émulateur dans le conteneur.

Démarrez le conteneur Docker à l'aide de la commande suivante.

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

Vous n'avez pas besoin de spécifier un projet, une instance ni un nom de base de données lorsque vous démarrez le conteneur. Par défaut, elle utilisera le nom de projet emulator-project et le nom d'instance test-instance. Toute base de données à laquelle vous vous connectez est automatiquement créée par PGAdapter.

Vous pouvez vous connecter à PGAdapter et exécuter des instructions avec psql à l'aide de la commande suivante.

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

La base de données test-database est créée automatiquement. Exécutez les instructions suivantes pour vérifier que vous êtes connecté à une base de données de dialecte 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;

Vous pouvez également vous connecter directement à l'émulateur à l'intérieur du conteneur Docker, par exemple avec la 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"

Exécutez l'émulateur et PGAdapter sur votre ordinateur local

Vous pouvez exécuter l'émulateur et PGAdapter sur votre ordinateur local, puis connecter PGAdapter à l'émulateur à l'aide des commandes suivantes.

Commencez par démarrer l'émulateur.

gcloud emulators spanner start

Démarrez ensuite PGAdapter et connectez-le à l'émulateur. Notez que vous devez démarrer PGAdapter en tant qu'application Java sur votre ordinateur local pour qu'il puisse accéder à l'émulateur. Si vous démarrez PGAdapter dans un conteneur Docker, il ne peut pas accéder à l'émulateur qui s'exécute sur votre hôte local.

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

Les arguments de ligne de commande supplémentaires de PGAdapter utilisés pour se connecter à l'émulateur sont les suivants:

  • -c "": indique à PGAdapter de ne pas utiliser d'identifiants.
  • -r autoConfigEmulator=true: indique à PGAdapter de se connecter à localhost:9010, qui est l'hôte et le port par défaut de l'émulateur. Il indique également à PGAdapter de créer automatiquement toute base de données à laquelle un utilisateur se connecte. Cela signifie que vous n'avez pas besoin de créer de base de données avant de vous y connecter.

Vous pouvez vous connecter à PGAdapter et exécuter des instructions avec psql à l'aide de la commande suivante.

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

La base de données test-database est créée automatiquement. Exécutez les instructions suivantes pour vérifier que vous êtes connecté à une base de données de dialecte 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;

Exécuter l'émulateur et PGAdapter dans un réseau Docker

Vous pouvez exécuter l'émulateur et PGAdapter dans un réseau Docker, puis connecter PGAdapter à l'émulateur à l'aide des commandes suivantes.

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 et l'émulateur sont démarrés dans le même réseau Docker, et PGAdapter est configuré pour se connecter à l'émulateur. Les arguments de ligne de commande supplémentaires pour PGAdapter utilisés pour se connecter à l'émulateur sont les suivants:

  • -c "": indique à PGAdapter de ne pas utiliser d'identifiants.
  • -r autoConfigEmulator=true: indique à PGAdapter de créer automatiquement toute base de données à laquelle un utilisateur se connecte. Cela signifie que vous n'avez pas besoin de créer de base de données avant de vous y connecter.
  • -e emulator:9010: -e spécifie le point de terminaison auquel PGAdapter doit se connecter. emulator:9010 est le nom et le numéro de port de l'émulateur dans le même réseau Docker.
  • -x: autorise les connexions à PGAdapter à partir de votre ordinateur local.

Vous pouvez vous connecter à PGAdapter et exécuter des instructions avec psql à l'aide de la commande suivante.

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

La base de données test-database est créée automatiquement. Exécutez les instructions suivantes pour vérifier que vous êtes connecté à une base de données de dialecte 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;

Vous pouvez également vous connecter directement à l'émulateur dans le réseau Docker, par exemple avec la 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"