דרישה ל-App Engine
בעבר, כל מסדי הנתונים של Firestore היו מקושרים לאפליקציית App Engine. כשמסד הנתונים מקושר, נדרשת אפליקציית App Engine פעילה באותו פרויקט. ללא אפליקציית App Engine פעילה, גישת הקריאה והכתיבה למסד הנתונים מושבתת.
מסדי נתונים ב-Firestore מוקצים עכשיו כשהם לא מקושרים ל-App Engine כברירת מחדל.
אם מסד הנתונים שלכם מקושר ל-App Engine, אתם יכולים לבטל את הקישור שלו.
Active App Engine
אפליקציית App Engine פעילה היא אפליקציה שקיימת באותו פרויקט ושלא הושבתה. לא נדרש שימוש באפליקציה. האפליקציה המקושרת ומסד הנתונים צריכים להיות באותו אזור.
אם משביתים את אפליקציית App Engine, משביתים גם את הגישה למסד הנתונים של Firestore שמקושר לאפליקציה הזו.
צפייה בסטטוס הקישור של App Engine
אפשר לבדוק את מצב הניתוק של 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
אם משביתים אפליקציית App Engine מקושרת, משביתים גם את הגישה לקריאה ולכתיבה במסד הנתונים. במקרה כזה, בדף Firestore Data במסוףGoogle Cloud מוצגת האפשרות לבטל את הקישור של מסד הנתונים לאפליקציית App Engine. כדי להתחיל בתהליך, לוחצים על Unlink Database (ביטול הקישור של מסד הנתונים).אפשר גם לבטל את הקישור של מסד הנתונים באמצעות 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]
}