הדמיה של Spanner באופן מקומי

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

האמולטור תומך בניבי השפה GoogleSQL ו-PostgreSQL. היא תומכת בכל השפות של ספריות הלקוח. אפשר גם להשתמש באמולטור עם Google Cloud CLI ועם ממשקי REST API.

האמולטור זמין גם כפרויקט קוד פתוח ב-GitHub.

מגבלות והבדלים

האמולטור לא תומך בפעולות הבאות:

בנוסף, האמולטור שונה משירות הייצור של Spanner בדרכים הבאות:

  • יכול להיות שהודעות השגיאה לא יהיו זהות בין האמולטור לבין שירות הייצור.
  • הביצועים והמדרגיות של האמולטור לא ניתנים להשוואה לאלה של שירות הייצור.
  • עסקאות של קריאה וכתיבה ושינויים בסכימה נועלים את כל מסד הנתונים לגישה בלעדית עד שהם מסתיימים.
  • יש תמיכה ב-Partitioned DML וב-partitionQuery, אבל האמולטור לא בודק אם אפשר לחלק את ההצהרות. המשמעות היא שאולי אפשר להריץ אמולטור של DML או של משפט partitionQuery מחולק, אבל יכול להיות שהפעולה תיכשל בשירות הייצור עם השגיאה של משפט שלא ניתן לחלוקה.

רשימה מלאה של ממשקי API ותכונות שנתמכים, לא נתמכים או נתמכים באופן חלקי זמינה בקובץ README ב-GitHub.

אפשרויות להפעלת האמולטור

יש שתי דרכים נפוצות להפעלת האמולטור:

בוחרים את הדרך שמתאימה לפיתוח האפליקציה ולתהליך העבודה של הבדיקות.

הגדרת האמולטור ל-CLI של gcloud

משתמשי Windows ו-macOS צריכים לבצע את הפעולות הבאות לפני התקנת האמולטור:

  • מתקינים את הרכיבים של ה-CLI של gcloud בתחנת העבודה:

    gcloud components install cloud-spanner-emulator
    

    אם ה-CLI של gcloud כבר מותקן, מריצים את הפקודה הבאה כדי לוודא שכל הרכיבים שלו מעודכנים:

    gcloud components update
    

יצירה והגדרה של האמולטור באמצעות ה-CLI של gcloud

כדי להשתמש באמולטור עם ה-CLI של gcloud, צריך להשבית את האימות ולשנות את נקודת הקצה. מומלץ ליצור הגדרה נפרדת של ה-CLI של gcloud כדי שתוכלו לעבור במהירות בין האמולטור לבין שירות הייצור.

  1. יצירה והפעלה של הגדרות אמולטור:

      gcloud config configurations create emulator
      gcloud config set auth/disable_credentials true
      gcloud config set project your-project-id
      gcloud config set api_endpoint_overrides/spanner http://localhost:9020/
    

    אחרי שמגדירים את ה-CLI של gcloud, הפקודות נשלחות לאמולטור במקום לשירות הפרודקשן. כדי לוודא זאת, אפשר ליצור מכונה עם הגדרות המכונה של האמולטור:

    gcloud spanner instances create test-instance \
      --config=emulator-config --description="Test Instance" --nodes=1
    

    כדי לעבור בין האמולטור לבין הגדרות ברירת המחדל, מריצים את הפקודה:

    gcloud config configurations activate [emulator | default]
    
  2. מפעילים את האמולטור באמצעות ה-CLI של gcloud.

התקנת האמולטור ב-Docker

  1. מתקינים את Docker במערכת ומוסיפים אותו לנתיב המערכת.

  2. מורידים את תמונת האמולטור העדכנית:

    docker pull gcr.io/cloud-spanner-emulator/emulator
    
  3. מריצים את האמולטור ב-Docker:

    docker run -p 9010:9010 -p 9020:9020 gcr.io/cloud-spanner-emulator/emulator
    

    הפקודה הזו מפעילה את האמולטור וממפה את היציאות בקונטיינר לאותן יציאות במארח המקומי. האמולטור משתמש בשתי נקודות קצה מקומיות: localhost:9010 לבקשות gRPC ו-localhost:9010 לבקשות REST.localhost:9020

  4. מפעילים את האמולטור באמצעות ה-CLI של gcloud.

הפעלת האמולטור באמצעות ה-CLI של gcloud

מפעילים את האמולטור באמצעות הפקודה gcloud emulators spanner:

gcloud emulators spanner start

האמולטור משתמש בשתי נקודות קצה מקומיות:

  • localhost:9010 לבקשות gRPC
  • localhost:9020 לבקשות REST

שימוש בספריות הלקוח עם האמולטור

אפשר להשתמש בגרסאות נתמכות של ספריות הלקוח עם האמולטור על ידי הגדרת משתנה הסביבה SPANNER_EMULATOR_HOST. יש הרבה דרכים לעשות את זה. לדוגמה:

‫Linux/macOS

export SPANNER_EMULATOR_HOST=localhost:9010

Windows

set SPANNER_EMULATOR_HOST=localhost:9010

או באמצעות gcloud env-init:

‫Linux/macOS

$(gcloud emulators spanner env-init)

Windows

gcloud emulators spanner env-init > set_vars.cmd && set_vars.cmd

כשהאפליקציה מופעלת, ספריית הלקוח בודקת אוטומטית אם יש SPANNER_EMULATOR_HOST ומתחברת לאמולטור אם הוא פועל.

אחרי שמגדירים את SPANNER_EMULATOR_HOST, אפשר לבדוק את האמולטור באמצעות המדריכים לתחילת העבודה. אפשר להתעלם מההוראות שקשורות ליצירת פרויקט, לאימות ולפרטי כניסה, כי לא צריך אותן כדי להשתמש באמולטור.

גרסאות נתמכות

בטבלה הבאה מפורטות הגרסאות של ספריות הלקוח שתומכות באמולטור.

ספריית לקוח גרסת מינימום
C++‎ v0.9.x+
C#‎ v3.1.0+
Go v1.5.0+
Java v1.51.0+
Node.js v4.5.0+
PHP v1.25.0+‎
Python v1.15.0+
Ruby v1.13.0+‎

הוראות נוספות ל-C#‎

בספריית הלקוח של C#, צריך לציין גם את האפשרות emulatordetection במחרוזת החיבור. בניגוד לספריות לקוח אחרות, ספריית הלקוח C# ‎ מתעלמת ממשתנה הסביבה SPANNER_EMULATOR_HOST כברירת מחדל. דוגמה למחרוזת החיבור:

var builder = new SpannerConnectionStringBuilder
{
    DataSource = $"projects/{projectId}/instances/{instanceId}/databases/{databaseId}";
    EmulatorDetection = "EmulatorOnly"
};