Connecter PGAdapter à l'émulateur

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

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

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

Conteneur Docker combiné

Exécutez l'image Docker précompilée contenant à la fois PGAdapter et l'émulateur. L'instance PGAdapter dans le 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 ou un nom de base de données au démarrage le conteneur. Par défaut, le nom du projet emulator-project et le nom de l'instance test-instance sont utilisés. 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écuter ces instructions 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 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écuter l'émulateur et PGAdapter sur votre ordinateur local

Vous pouvez exécuter à la fois l'émulateur et PGAdapter sur votre ordinateur local. Connectez 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 lancez PGAdapter en tant qu'application Java sur votre ordinateur local accéder à l'émulateur. Si vous démarrez PGAdapter dans un conteneur Docker, il ne peut pas accéder à l'émulateur exécuté 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 pour PGAdapter qui sont utilisés pour se connecter à l'émulateur sont les suivants :

  • -c "": indique à PGAdapter de n'utiliser aucun identifiant.
  • -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. Ainsi, vous n'avez pas besoin de créer une base de données avant s'y connecte.

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écuter ces instructions 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 à la fois l'émulateur et PGAdapter dans un réseau Docker, et 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 sur 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 qui permettent de se connecter à l'émulateur sont les suivants :

  • -c "": indique à PGAdapter de n'utiliser aucun identifiant.
  • -r autoConfigEmulator=true: indique à PGAdapter de créent automatiquement toute base de données à laquelle un utilisateur se connecte. Cela signifie que vous n'avez pas besoin de créer une base de données avant de vous y connecter.
  • -e emulator:9010: -e spécifie le point de terminaison que PGAdapter doit utiliser. auquel vous souhaitez vous connecter. emulator:9010 est le nom et le numéro de port de l'émulateur dans le même réseau Docker.
  • -x: cette autorisation permet d'établir des connexions à PGAdapter à partir de votre machine locale.

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 ces instructions 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"