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

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

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

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

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

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

  • TLS/HTTPS, אימות, ניהול זהויות והרשאות גישה (IAM), הרשאות או תפקידים.
  • במצבי שאילתה PLAN או PROFILE, תוכנית לביצוע שאילתה שמוחזרת ריקה.
  • ANALYZEדוח התנועות בחשבון. האמולטור מקבל את ההודעה אבל מתעלם ממנה.
  • אחד מכלי רישום הביקורת והמעקב.
  • הגנה מפני מחיקה של מסד נתונים. האמולטור מקבל את השדה enable_drop_protection, אבל הוא מאפשר להשליך מסדי נתונים גם אם המאפיין הזה מופעל.

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

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

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

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

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

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

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

כדי להריץ את האמולטור באמצעות Google Cloud CLI:

  1. מתקינים את הרכיב cloud-spanner-emulator:

    gcloud components install cloud-spanner-emulator
    

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

    gcloud components update
    
  2. מפעילים את האמולטור:

    gcloud emulators spanner start
    

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

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

הפעלת האמולטור באמצעות Docker

כדי להריץ את האמולטור באמצעות 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:9020 לבקשות REST.

הגדרת ה-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/
    
  2. אחרי ההגדרה, ה-CLI של gcloud שולח את הפקודות לאמולטור במקום לשירות הייצור. כדי לוודא זאת, יוצרים מכונה עם הגדרת המכונה של האמולטור:

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

החלפת הגדרות

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

# To switch to default (production) configuration:
gcloud config configurations activate default

# To switch back to emulator configuration:
gcloud config configurations activate emulator

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

אפשר להשתמש בגרסאות נתמכות של ספריות הלקוח עם האמולטור על ידי הגדרת משתנה הסביבה 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+
המשך ‫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"
};