דרישה ל-App Engine

בעבר, כל מסדי הנתונים של Firestore היו מקושרים לאפליקציית App Engine. כשמסד הנתונים מקושר, נדרשת אפליקציית App Engine פעילה באותו פרויקט. ללא אפליקציית App Engine פעילה, גישת הקריאה והכתיבה למסד הנתונים מושבתת.

מסדי נתונים ב-Firestore מוקצים עכשיו כשהם לא מקושרים ל-App Engine כברירת מחדל.

אם מסד הנתונים שלכם מקושר ל-App Engine, אתם יכולים לבטל את הקישור שלו.

Active App Engine

אפליקציית App Engine פעילה היא אפליקציה שקיימת באותו פרויקט ושלא הושבתה. לא נדרש שימוש באפליקציה. האפליקציה המקושרת ומסד הנתונים צריכים להיות באותו אזור.

אם משביתים את אפליקציית App Engine, משביתים גם את הגישה למסד הנתונים של Firestore שמקושר לאפליקציה הזו.

אפשר לבדוק את מצב הניתוק של App Engine באמצעות API בארכיטקטורת REST:

curl  --header "Authorization: Bearer $(gcloud auth print-access-token)" \
--header "Content-type: application/json" \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases/(default)"

בתשובה, בודקים את הערך של appEngineIntegrationMode. אם הערך הוא DISABLED, מסד הנתונים לא מקושר לאפליקציית App Engine.

אם משביתים אפליקציית App Engine מקושרת, משביתים גם את הגישה לקריאה ולכתיבה במסד הנתונים. במקרה כזה, בדף Firestore Data במסוףGoogle Cloud מוצגת האפשרות לבטל את הקישור של מסד הנתונים לאפליקציית App Engine. כדי להתחיל בתהליך, לוחצים על Unlink Database (ביטול הקישור של מסד הנתונים).

מעבר אל 'נתונים' ב-Firestore

אפשר גם לבטל את הקישור של מסד הנתונים באמצעות API בארכיטקטורת REST:

curl -X PATCH \
--header "Authorization: Bearer $(gcloud auth print-access-token)" \
--header "Content-type: application/json" \
--data '{"app_engine_integration_mode": "DISABLED"}' \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases/(default)?updateMask=appEngineIntegrationMode"

כשמבטלים את הקישור של מסד הנתונים, אפשר להשבית את App Engine בלי להשפיע על הגישה למסד הנתונים. ביטול הקישור הוא פעולה סופית. יכול להיות שיחלפו עד חמש דקות עד שהביטול הקישור ייכנס לתוקף.

העברת משאבי Terraform App Engine

אם ניהלתם בעבר מסדי נתונים של Firestore באמצעות משאב Terraform‏ google_app_engine_application, אתם יכולים להשתמש במשאב Terraform‏ google_firestore_database במקום זאת.

הוראות כלליות לניהול מסדי נתונים של Firestore באמצעות Terraform מפורטות במאמר אוטומציה של יצירת מסדי נתונים.

יצירת משאב google_firestore_database

בקובץ התצורה של Terraform, יוצרים משאב google_firestore_database חדש:

firestore.tf

resource "google_firestore_database" "database" {
  project     = "project"
  name        = "(default)"
  location_id = "location"
  
  type = "database_type" // either "FIRESTORE_NATIVE" or "DATASTORE_MODE"
  
  app_engine_integration_mode = "DISABLED"

  // Optional, but recommended for safety
  delete_protection_state = "DELETE_PROTECTION_ENABLED"
}

כאן מפורטת רשימת המיקומים הזמינים ב-Firestore. בוחרים את המיקום שמתאים למיקום של מסד הנתונים הקיים.

ייבוא מסד נתונים קיים ב-Firestore

קודם צריך לוודא ש-Firestore API מופעל.

לאחר מכן, מייבאים את מסד הנתונים הקיים של Firestore למצב של Terraform:

terraform import google_firestore_database.database "(default)"

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

terraform plan

בודקים את הפלט כדי לוודא שהייבוא הושלם בהצלחה. אם הפלט מראה שיש שינויים בשדות, צריך לוודא שהשינויים האלה מכוונים. אם הפלט כולל שורה שדומה ל:

google_firestore_database.database must be replaced

אחר כך בודקים את קובץ התצורה של Terraform כדי לראות אם היו טעויות, במיוחד בשדות project, location או name, ואז מריצים שוב את הפקודה terraform plan. כל השדות שדורשים מ-Terraform להחליף את מסד הנתונים יסומנו בסימן # forces replacement בפלט של התוכנית.

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

terraform apply

הסרת המשאב google_app_engine_application

אם יש לכם משאב google_app_engine_application קיים בקובץ ההגדרות של Terraform, עכשיו צריך להסיר אותו מהקובץ.

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

terraform plan

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

Terraform will perform the following actions:

  # google_app_engine_application.app will be destroyed
  # (because google_app_engine_application.app is not in configuration)

אחרי שאתם מרוצים מהתוצאה של התוכנית, מריצים

terraform apply

נכון לעכשיו, Terraform לא תומך במחיקה של משאבי App Engine. למרות ש-Terraform תציג את המשאב כמשאב שנמחק, היא לא תמחק בפועל את אפליקציית App Engine. עם זאת, אפליקציית App Engine לא תנוהל יותר על ידי Terraform.

דרישה ל-Firestore API

בעבר, כל מסדי הנתונים של Firestore היו מקושרים לאפליקציית App Engine. עכשיו, מסדי הנתונים של Firestore מוקצים כשהם לא מקושרים ל-App Engine כברירת מחדל. בנוסף, כל מסדי הנתונים, גם הקיימים וגם אלה שנוצרו לאחרונה, צריכים לעמוד בדרישות הבאות:

  • כדי לנהל את מסד הנתונים שלכם מ Google Cloud המסוף ומ-ה-CLI של gcloud, צריך להפעיל את Firestore API בפרויקט. הפעולה הזו נדרשת גם במסדי נתונים של Firestore במצב Native וגם במסדי נתונים של Firestore במצב Datastore.
  • כשמבצעים את הפעולות האדמיניסטרטיביות הבאות ממסוף Google Cloud או מ-CLI של gcloud, נדרשות הרשאות ה-IAM הבאות:

    • יצירת מסד נתונים: datastore.databases.create
    • הצגת מטא-נתונים של מסד נתונים: datastore.databases.getMetadata
    • עריכת מטא-נתונים של מסד נתונים: datastore.databases.update

תפקידים שמוגדרים מראש כמו Datastore User ו-Datastore Viewer כוללים את ההרשאות הנדרשות. אם יצרתם תפקידי IAM בהתאמה אישית, יכול להיות שתצטרכו לעדכן אותם כך שיכללו את ההרשאות שצוינו למעלה.

אם הגדרתם בעבר תפקיד בהתאמה אישית ל-Datastore, יכול להיות שחסרה לו ההרשאה datastore.databases.getMetadata. כדי להמשיך לגשת ל-datastore.databases.getMetadata, צריך לעדכן את התפקידים בהתאמה אישית באמצעות datastore.databases.getMetadata או להשתמש בתפקיד מוגדר מראש.

הפעלת ה-API באמצעות Terraform

אם רוצים, אפשר גם להפעיל את Firestore API באמצעות Terraform:

resource "google_project_service" "firestore" {
  project = "project"
  service = "firestore.googleapis.com"
}

אם יש לכם משאב google_firestore_database, אתם יכולים להוסיף תלות במשאב google_project_service כדי לוודא שה-API מופעל לפני ש-Terraform מנסה ליצור את מסד הנתונים:

resource "google_firestore_database" "database" {
  // ...
  depends_on = [google_project_service.firestore]
}