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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  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#‎ גרסה 3.1.0 ואילך
המשך v1.5.0+‎
Java גרסה 1.51.0 ואילך
Node.js גרסה 4.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"
};