חיבור PGAdapter לאמולטור

בדף הזה מוסבר איך לחבר את PGAdapter לאמולטור Spanner. האמולטור פועל באופן מקומי, ואפשר להשתמש בו כדי לפתח ולבדוק את האפליקציות בלי ליצורGoogle Cloud פרויקט או חשבון לחיוב. מכיוון שהאמולטור מאחסן נתונים רק בזיכרון, כל המצב, כולל נתונים, סכימה והגדרות, אובד בהפעלה מחדש. האמולטור מציע את אותם ממשקי API כמו שירות הייצור של Spanner, והוא מיועד לפיתוח ולבדיקות מקומיים, ולא לפריסות בייצור.

יש שלוש דרכים לחבר את PGAdapter לאמולטור:

  • מריצים קונטיינר Docker משולב מוכן מראש עם PGAdapter והאמולטור.
  • מריצים את האמולטור ואת PGAdapter במחשב המקומי.
  • מריצים את האמולטור ואת PGAdapter ברשת Docker.

קונטיינר Docker משולב

מריצים את קובץ האימג' של Docker שנוצר מראש ומכיל את PGAdapter ואת האמולטור. מופע PGAdapter בקונטיינר Docker מוגדר אוטומטית להתחבר לאמולטור בקונטיינר.

מפעילים את מאגר Docker באמצעות הפקודה הבאה.

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

כשמפעילים את הקונטיינר, לא צריך לציין שם של פרויקט, מופע או מסד נתונים. כברירת מחדל, הוא ישתמש בשם הפרויקט emulator-project ובשם המופע test-instance. כל מסד נתונים שמקשרים אליו נוצר אוטומטית על ידי PGAdapter.

אפשר להתחבר ל-PGAdapter ולהריץ הצהרות באמצעות psql עם הפקודה הבאה.

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

מסד הנתונים test-database נוצר באופן אוטומטי. מריצים את ההצהרות האלה כדי לוודא שאתם מחוברים למסד נתונים של 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;

אפשר גם להתחבר ישירות לאמולטור בתוך קונטיינר Docker, למשל באמצעות ה-CLI של 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"

הפעלת האמולטור ו-PGAdapter במחשב המקומי

אפשר להריץ את האמולטור ואת PGAdapter במחשב המקומי, ולחבר את PGAdapter לאמולטור באמצעות הפקודות הבאות.

קודם מפעילים את האמולטור.

gcloud emulators spanner start

לאחר מכן מפעילים את PGAdapter ומחברים אותו לאמולטור. שימו לב: כדי ש-PGAdapter יוכל לגשת לאמולטור, צריך להפעיל אותו כאפליקציית Java במחשב המקומי. אם מפעילים את PGAdapter במאגר Docker, הוא לא יכול לגשת לאמולטור שפועל במארח המקומי.

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

הארגומנטים הנוספים של שורת הפקודה ל-PGAdapter שמשמשים לחיבור לאמולטור הם:

  • -c "": ההוראה הזו אומרת ל-PGAdapter לא להשתמש בפרטי כניסה.
  • -r autoConfigEmulator=true: הפקודה הזו מורה ל-PGAdapter להתחבר אל localhost:9010, שהוא מארח ופורט ברירת המחדל של האמולטור. הוא גם מורה ל-PGAdapter ליצור באופן אוטומטי כל מסד נתונים שמשתמש מתחבר אליו. כלומר, לא צריך ליצור מסד נתונים לפני שמתחברים אליו.

אפשר להתחבר ל-PGAdapter ולהריץ הצהרות באמצעות psql עם הפקודה הבאה.

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

מסד הנתונים test-database נוצר באופן אוטומטי. מריצים את ההצהרות האלה כדי לוודא שאתם מחוברים למסד נתונים של 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;

הפעלת האמולטור ו-PGAdapter ברשת Docker

אפשר להריץ גם את האמולטור וגם את PGAdapter ברשת Docker ולחבר את PGAdapter לאמולטור באמצעות הפקודות הבאות.

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 מופעלים באותה רשת Docker, ו-PGAdapter מוגדר להתחבר לאמולטור. הארגומנטים הנוספים של שורת הפקודה עבור PGAdapter שמשמשים להתחברות לאמולטור הם:

  • -c "": ההוראה הזו אומרת ל-PGAdapter לא להשתמש בפרטי כניסה.
  • -r autoConfigEmulator=true: ההגדרה הזו מורה ל-PGAdapter ליצור באופן אוטומטי כל מסד נתונים שמשתמש מתחבר אליו. כלומר, לא צריך ליצור מסד נתונים לפני שמתחברים אליו.
  • -e emulator:9010: -e מציין את נקודת הקצה שאליה PGAdapter צריך להתחבר. ‫emulator:9010 הוא השם ומספר היציאה של האמולטור באותה רשת Docker.
  • -x: מאפשר חיבורים ל-PGAdapter מהמחשב המקומי.

אפשר להתחבר ל-PGAdapter ולהריץ הצהרות באמצעות psql עם הפקודה הבאה.

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

מסד הנתונים test-database נוצר באופן אוטומטי. מריצים את ההצהרות האלה כדי לוודא שאתם מחוברים למסד נתונים של 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;

אפשר גם להתחבר ישירות לאמולטור ברשת Docker, למשל באמצעות ה-CLI של 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"